《How Tomcat Works》读书笔记一

系统 1287 0

 

1. "《How Tomcat Works_Chapter 1: A Simple Web Server》"
   1.1: HTTP hypetext transfer protocal,
   1.2: Request: split a uri from address input
   1.3: Response: get the uri to read the file from the servers
   1.4: HttpServer: new a socket to receive & send bytes info
2. "《How Tomcat Works_Chapter 2: A Simple Servlet Container》"
   2.1: When the servlet is called for the first time, load the servlet class and call the
        servlet's' init method (once only)
   2.2: For each request, construct an instance of javax.servlet.ServletRequest and
        an instance of javax.servlet.ServletResponse.
   2.3: Invoke the servlet's' service method, passing the ServletRequest and
        ServletResponse objects.
   2.4: When the servlet class is shut down, call the servlet's' destroy method and
        unload the servlet class.

HttpServer.java:

      
         1
      
      
        package
      
      
         chap1_ASimpleWebServer;


      
      
         2
      
      
        import
      
      
         java.io.File;


      
      
         3
      
      
        import
      
      
         java.io.IOException;


      
      
         4
      
      
        import
      
      
         java.io.InputStream;


      
      
         5
      
      
        import
      
      
         java.io.OutputStream;


      
      
         6
      
      
        import
      
      
         java.net.InetAddress;


      
      
         7
      
      
        import
      
      
         java.net.ServerSocket;


      
      
         8
      
      
        import
      
      
         java.net.Socket;


      
      
         9
      
      
        10
      
      
        11
      
      
        public
      
      
        class
      
      
         HttpServer {


      
      
        12
      
      
        public
      
      
        static
      
      
        final
      
       String WEB_ROOT = System.getProperty("user.dir") + File.separator + "webroot"
      
        ;


      
      
        13
      
      
        14
      
      
        private
      
      
        static
      
      
        final
      
       String SHUTDOWN_COMMAND = "/SHUTDOWN"
      
        ;


      
      
        15
      
      
        16
      
      
        private
      
      
        boolean
      
       shutdown = 
      
        false
      
      
        ;


      
      
        17
      
      
        18
      
      
        public
      
      
        void
      
      
         await() {


      
      
        19
      
               ServerSocket serverSocket = 
      
        null
      
      
        ;


      
      
        20
      
      
        int
      
       port = 8080
      
        ;


      
      
        21
      
      
        try
      
      
         {


      
      
        22
      
                   serverSocket = 
      
        new
      
       ServerSocket(port, 1, InetAddress.getByName("127.0.0.1"
      
        ));


      
      
        23
      
               } 
      
        catch
      
      
         (IOException e) {


      
      
        24
      
      
                    e.printStackTrace();


      
      
        25
      
                   System.exit(1
      
        );


      
      
        26
      
      
                }


      
      
        27
      
      
        //
      
      
         loop waiting for a request
      
      
        28
      
      
        while
      
       (!
      
        shutdown) {


      
      
        29
      
                   Socket socket = 
      
        null
      
      
        ;


      
      
        30
      
                   InputStream input = 
      
        null
      
      
        ;


      
      
        31
      
                   OutputStream output = 
      
        null
      
      
        ;


      
      
        32
      
      
        try
      
      
         {


      
      
        33
      
                       socket =
      
         serverSocket.accept();


      
      
        34
      
                       input =
      
         socket.getInputStream();


      
      
        35
      
                       output =
      
         socket.getOutputStream();


      
      
        36
      
      
        //
      
      
         create Request object & parse
      
      
        37
      
                       Request request = 
      
        new
      
      
         Request(input);


      
      
        38
      
      
                        request.parse();


      
      
        39
      
      
        //
      
      
         create Response object
      
      
        40
      
                       Response response = 
      
        new
      
      
         Response(output);


      
      
        41
      
      
                        response.setRequest(request);


      
      
        42
      
      
                        response.sendResource();


      
      
        43
      
      
        //
      
      
         close socket
      
      
        44
      
      
                        socket.close();


      
      
        45
      
      
        //
      
      
         check if the previous URI is a shutdown command
      
      
        46
      
                       shutdown =
      
         request.getUri().equals(SHUTDOWN_COMMAND);


      
      
        47
      
                   } 
      
        catch
      
      
         (IOException e) {


      
      
        48
      
      
                        e.printStackTrace();


      
      
        49
      
      
        continue
      
      
        ;


      
      
        50
      
      
                    }


      
      
        51
      
      
                }


      
      
        52
      
      
            }


      
      
        53
      
      
        54
      
      
        public
      
      
        static
      
      
        void
      
      
         main(String[] args) {


      
      
        55
      
      
                System.out.println(WEB_ROOT);


      
      
        56
      
               HttpServer server = 
      
        new
      
      
         HttpServer();


      
      
        57
      
      
                server.await();


      
      
        58
      
      
            }


      
      
        59
      
       }
    

 

Request.java:

      
        package
      
      
         chap1_ASimpleWebServer;


      
      
        import
      
      
         java.io.IOException;


      
      
        import
      
      
         java.io.InputStream;






      
      
        public
      
      
        class
      
      
         Request {

    
      
      
        private
      
      
         InputStream input;

    
      
      
        private
      
      
         String uri;

    

    
      
      
        public
      
      
         Request (InputStream input) {

        
      
      
        this
      
      .input =
      
         input;

    }

    

    
      
      
        public
      
      
        void
      
      
         parse() {

        StringBuffer request 
      
      = 
      
        new
      
       StringBuffer(2048
      
        );

        
      
      
        int
      
      
         len;

        
      
      
        byte
      
      [] buffer = 
      
        new
      
      
        byte
      
      [2048
      
        ];

        
      
      
        try
      
      
         {

            len 
      
      =
      
         input.read(buffer);

        } 
      
      
        catch
      
      
         (IOException e) {

            e.printStackTrace();

            len 
      
      = -1
      
        ;

        }

        
      
      
        for
      
       (
      
        int
      
       i = 0; i < len; i++
      
        ) {

            request.append((
      
      
        char
      
      )buffer[i]);  
      
        //
      
      
         do not forget cast type byte to char
      
      
                }

        System.out.println(request.toString());

        uri 
      
      =
      
         parseUri(request.toString());

    }

    

    
      
      
        private
      
      
         String parseUri(String requestString) {

        
      
      
        int
      
      
         index1, index2;

        index1 
      
      = requestString.indexOf(' '
      
        );

        
      
      
        if
      
       (index1 != -1
      
        ) {

            index2 
      
      = requestString.indexOf(' ', index1 + 1
      
        );

            
      
      
        if
      
       (index2 >
      
         index1) {

                
      
      
        return
      
       requestString.substring(index1 + 1
      
        , index2);

            }

        }

        
      
      
        return
      
      
        null
      
      
        ;

    }

    

    
      
      
        public
      
      
         String getUri() {

        
      
      
        return
      
      
         uri;

    }

}
      
    

 

 

Response.java:

      
         1
      
      
        package
      
      
         chap1_ASimpleWebServer;


      
      
         2
      
      
        import
      
      
         java.io.File;


      
      
         3
      
      
        import
      
      
         java.io.FileInputStream;


      
      
         4
      
      
        import
      
      
         java.io.IOException;


      
      
         5
      
      
        import
      
      
         java.io.OutputStream;


      
      
         6
      
      
         7
      
      
         8
      
      
        public
      
      
        class
      
      
         Response {


      
      
         9
      
      
        private
      
      
        static
      
      
        final
      
      
        int
      
       BUFFER_SIZE = 1024
      
        ;


      
      
        10
      
      
            Request request;


      
      
        11
      
      
            OutputStream output;


      
      
        12
      
      
        13
      
      
        public
      
      
         Response (OutputStream output) {


      
      
        14
      
      
        this
      
      .output =
      
         output;


      
      
        15
      
      
            }


      
      
        16
      
      
        17
      
      
        public
      
      
        void
      
      
         setRequest(Request request) {


      
      
        18
      
      
        this
      
      .request =
      
         request;


      
      
        19
      
      
            }


      
      
        20
      
      
        21
      
      
        public
      
      
        void
      
       sendResource() 
      
        throws
      
      
         IOException {


      
      
        22
      
      
        byte
      
      [] bytes = 
      
        new
      
      
        byte
      
      
        [BUFFER_SIZE];


      
      
        23
      
               FileInputStream fis = 
      
        null
      
      
        ;


      
      
        24
      
      
        try
      
      
         {


      
      
        25
      
                   File file = 
      
        new
      
      
         File(HttpServer.WEB_ROOT, request.getUri());


      
      
        26
      
      
                    System.out.println(request.getUri().toString());


      
      
        27
      
      
        if
      
      
         (file.exists()) {




      
      
        28
      
                       fis = 
      
        new
      
      
         FileInputStream(file);


      
      
        29
      
      
        int
      
       len = fis.read(bytes, 0
      
        , BUFFER_SIZE);


      
      
        30
      
      
        while
      
       (len != -1
      
        ) {


      
      
        31
      
                           output.write(bytes, 0
      
        , len);


      
      
        32
      
                           len = fis.read(bytes, 0
      
        , BUFFER_SIZE);


      
      
        33
      
      
                        }


      
      
        34
      
                   } 
      
        else
      
      
         {


      
      
        35
      
                       String errorMessage = "HTTP/1.1 404 File Not Found\r\n" +


      
        36
      
                                             "ContentType: text/html\r\n" +


      
        37
      
                                             "ContentLength: 23\r\n\r\n" +


      
        38
      
                                             "<head>File Not Found</head>"
      
        ;


      
      
        39
      
      
                        output.write(errorMessage.getBytes());


      
      
        40
      
      
                    }


      
      
        41
      
               } 
      
        catch
      
      
         (Exception e) {


      
      
        42
      
      
                    e.printStackTrace();


      
      
        43
      
               } 
      
        finally
      
      
         {


      
      
        44
      
      
        if
      
       (fis != 
      
        null
      
      
        ) {


      
      
        45
      
      
                        fis.close();


      
      
        46
      
      
                    }


      
      
        47
      
      
                }


      
      
        48
      
      
            }


      
      
        49
      
       }
    

简单的html, 放在webroot文件夹下:

      
        <
      
      
        html
      
      
        >
      
      
        <
      
      
        head
      
      
        >
      
      
        <
      
      
        title
      
      
        >
      
      Hello Tomcat!
      
        </
      
      
        title
      
      
        >
      
      
        </
      
      
        head
      
      
        >
      
      
        <
      
      
        body
      
      
        >
      
      
        <
      
      
        img 
      
      
        src
      
      
        ="./images/tomcat.jpg"
      
      
        >
      
      
        <
      
      
        br
      
      
        >
      
      
        <
      
      
        h1
      
      
        >
      
      It's Works!
      
        </
      
      
        h1
      
      
        >
      
      
        .

    
      
      
        </
      
      
        body
      
      
        >
      
      
        </
      
      
        html
      
      
        >
      
    

直接java application 运行, 在页面上即可,结果如下: 《How Tomcat Works》读书笔记一

光是如此是远远不够的, 所以我们还要增加对java文件的支持(Servlet文件)。。。

 

 

 

《How Tomcat Works》读书笔记一


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论