手写Tomcat容器加载静态资源
实现tomcat容器加载静态资源
1、server.java
package tomcat3; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; /** * Created by User on 2017/8/25. */ public class Server { public static void main(String args[]) { ServerSocket serverSocket = null; Socket client = null; try { //服务器发送信息的电报机:ServerSocket 初始化 serverSocket = new ServerSocket(9999); System.out.println("服务器初始化完毕,初始化端口9999"); //不断在接收客户端链接 while (true) { //服务器端接收客户端socket链接 client = serverSocket.accept(); //对客户端里面的请求信息进行一个处理 InputStream in = client.getInputStream(); HttpRequest request = new HttpRequest(in); String uri = request.getUri(); //立马响应信息出去 需要输出流 //保证输出到客户端当中 OutputStream outputStream = client.getOutputStream(); HttpResponse response = new HttpResponse(outputStream); System.out.println(uri.substring(1)+"sssssfsfsf"); response.writerFile(uri.substring(1)); //构建一个响应头信息200 client.close(); } } catch (IOException e) { e.printStackTrace(); } } }
2、把InputStream 输入流整合出来整合成为一个接收流
HttpRequest.java
package tomcat3; import java.io.IOException; import java.io.InputStream; /** * Created by User on 2017/8/25. */ public class HttpRequest { private String uri; //根据客户端的不同请求uri 而响应不用的资源给客户端 //解析uri发生时间点在输入流管道接进来的时候应该进行解析 public HttpRequest(InputStream is) throws IOException{ resolverRequest(is); } private void resolverRequest(InputStream is) throws IOException{ byte[] buff = new byte[1024]; int length = 0; try { length = is.read(buff); if(length > 0) { //将读取出来的字节信息 转化成明文信息 String msg = new String(buff,0,length); System.out.println("客户端的请求信息:****"+ msg+ "****"); //解析出来uri uri = msg.substring(msg.indexOf("/"),msg.indexOf("HTTP/1.1")-1); }else { System.out.println("Bad Request ****"); } } catch (IOException e) { e.printStackTrace(); } } public String getUri() { return uri; } }
3、整合输出流OutputStream保证输出到客户端中
HttpResponse.java
package tomcat3; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; /** 响应客户端请求业务处理类 * Created by User on 2017/8/25. */ public class HttpResponse { private OutputStream os = null; public HttpResponse(OutputStream os) throws IOException{ this.os = os; } public void writerFile(String path)throws IOException { FileInputStream fis = new FileInputStream(path); byte[] buff = new byte[1024]; int len = 0; StringBuffer sb = new StringBuffer(); sb.append("HTTP/1.1 200 OK\n"); sb.append("Content-Type: text/html;charset=UTF-8\n"); sb.append("\r\n"); //响应头信息写出去 os.write(sb.toString().getBytes()); while ((len=fis.read(buff))!= -1) { os.write(buff,0,len); } fis.close(); os.flush(); os.close(); } }4、login.html
<!doctype html> <html> <head> <meta charset="utf-8"> <title>登陆界面</title> </head> <body> <div class="login_ico"> <img src="images/login_ico.png"> </div> <div class="login_putin"> <ul> <li><input type="text" ></li> <li><input type="password" ></li> </ul> </div> <div class="login_btn"> <input type="submit" value="登陆"> </div> </body> </html>
上边整合登录,启动服务的时候,你会报错,你需要建立一个文件夹来存放静态css和图片