由于即将学习javaweb,为了可以提前热身,手动仿照Tomcat服务器来手写一个最简单最迷你版的web服务器,来搭建静态网页.废话不多说先上简单代码实现功能.本次主要也是复习一下多线程,io,网络编程,集合等知识点.
import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class MyServer { public static void main(String[] args)throws Exception { ServerSocket serverSocket = new ServerSocket(8080); while(true){ Socket socket = serverSocket.accept(); /*1.获取浏览器要访问的资源的名字*/ BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); String firstLine = br.readLine();//GET /admin/login.html HTTP/1.1 String uri = firstLine.split(" ")[1].substring(1);// admin/login.html /*2.读取资源,将资源写给浏览器*/ InputStream is = MyServer.class.getClassLoader().getResourceAsStream(uri); PrintStream out = new PrintStream(socket.getOutputStream()); out.println("HTTP/1.1 200 OK"); out.println("Content-Type:text/html;charset=utf-8"); out.println(); byte[] data = new byte[1024]; int len; while((len=is.read(data)) != -1){ out.write(data,0,len); } out.close(); socket.close(); } } }
服务器优化方向:
1.如果服务器发生异常,应不应该直接奔溃?如果访问的资源不存在,应该返回404页面
2.使用线程优化服务器
3.每次访问服务器,都需要重新读取硬盘中的数据?怎么才能把已经访问过的数据缓存到服务器中提高下次访问的速度。
4.我们现在只能读取resources目录的资源,能不能添加配置文件读取指定目录下的资源?
5.使用日志记录服务器启动的时间,以及每次访问了哪些文件。
6.把我们的程序打包成一个jar包,然后上传到linux服务器中,并启动程序