手写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和图片
 
 

猜你喜欢

转载自blog.csdn.net/chajinglong/article/details/77639181