zoukankan      html  css  js  c++  java
  • 《How Tomcat Works》读书笔记一

    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 运行, 在页面上即可,结果如下:

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

     
  • 相关阅读:
    刷新
    自定义背景色
    会议通js
    Flex Layout Attribute
    spin.js
    jq size()与length的区别
    初识node.js
    [Swift]归并排序 | Merge sort
    [Swift]桶排序 | Bucket sort
    [Swift]计数排序 | Counting sort
  • 原文地址:https://www.cnblogs.com/thoupin/p/3019753.html
Copyright © 2011-2022 走看看