一.手写迷你版Tomcat-初探minicat

大家都成年人了,大名鼎鼎的Tomcat不需要我过多介绍,直接上手写的思路和代码。

思路分析

我们要建一个叫minicat的工程,来实现迷你版Tomcat。
名称:minicat
minicat要做的事情:作为服务器软件提供服务,我们可以通过浏览器客户端发送http请求,minicat可以接受到请求进行处理,处理之后的结果可以返回浏览器客户端。

  1. 提供服务,接收请求(Socket通信)
  2. 请求信息封装成Request对象(Response对象)
  3. 客户端请求资源,资源分为静态资源(html)和动态资源(Servlet)
  4. 资源返回给客户端浏览器

Minicat1.0版本

需求:浏览器请求http://localhost:8080,返回一个固定的字符串到页面"Hello minicat"
分析

  1. 需要用ServerSocket监听8080端口
  2. 根据HTTP协议响应格式,返回字符串"Hello minicat"

实现

/**
     * minicat启动需要初始化展开的一些操作
     */
    public void start() throws IOException {
        // 监听端口
        ServerSocket serverSocket = new ServerSocket(port);
        System.out.println("---->>>minicat start on port:"+port);

		// 阻塞式监听端口
        while (true) {
            String data = "Hello minicat!";
            Socket socket = serverSocket.accept();
            // 有了socket,接收到请求,获取输出流
            OutputStream outputStream = socket.getOutputStream();
            // 包装http响应体
            String responseText = HttpProtocolUtil.getHttpHeader200(data.getBytes().length)+data;
            // 输出
            outputStream.write(responseText.getBytes());
            socket.close();
        }
    }

http协议工具类

/**
 * http协议工具类,主要是提供响应头信息,这里我们只提供200和404的情况
 */
public class HttpProtocolUtil {

    /**
     * 为响应码200提供请求头信息
     *
     * @param contentLength
     * @return
     */
    public static String getHttpHeader200(long contentLength) {
        return "HTTP/1.1 200 OK \n" +
                "Content-Type: text/html \n" +
                "Content-Length: " + contentLength + " \n" +
                "\r\n";
    }

    /**
     * 为响应码404提供请求头信息(此处也包含了数据内容)
     * @return
     */
    public static String getHttpHeader404() {
        String str404 = "

404 not found

"
; return "HTTP/1.1 404 NOT Found \n" + "Content-Type: text/html \n" + "Content-Length: " + str404.getBytes().length + " \n" + "\r\n" + str404; } }

没错,就是这两端代码,撑起了一个简要的minicat 1.0。通过main函数启动,浏览器访问localhost:8080效果如下:
一.手写迷你版Tomcat-初探minicat_第1张图片

你可能感兴趣的:(手写框架,tomcat,java)