zoukankan      html  css  js  c++  java
  • Tomcat源码学习(9)How Tomcat works(转)

    第2章:一个简单的Servlet容器

    概要

        本章通过两个程序来说明你如何开发自己的servlet容器。第一个程序被设计得足够简单使得你能理解一个servlet容器是如何工作的。然后它演变为第二个稍微复杂的servlet容器。
        注意:每一个servlet容器的应用程序都是从前一章的应用程序逐渐演变过来的,直至一个全功能的Tomcat servlet容器在第17章被建立起来。
        这两个servlet容器都可以处理简单的servlet和静态资源。你可以使用PrimitiveServlet来测试这个容器。PrimitiveServlet在Listing 2.1中列出并且它的类文件可以在webroot目录下找到。更复杂的servlet就超过这些容器的能力了,但是你将会在以下各章中学到如何建立更复杂的servlet容器。
             Listing 2.1: PrimitiveServlet.java
    import javax.servlet.*;
    import java.io.IOException;
    import java.io.PrintWriter;
    public class PrimitiveServlet implements Servlet {
         public void init(ServletConfig config) throws ServletException {
         System.out.println("init");
         }
         public void service(ServletRequest request, ServletResponse response)
             throws ServletException, IOException {
             System.out.println("from service");
             PrintWriter out = response.getWriter();
             out.println("Hello. Roses are red.");
             out.print("Violets are blue.");
         }
         public void destroy() {
             System.out.println("destroy");
         }
         public String getServletInfo() {
             return null;
         }
         public ServletConfig getServletConfig() {
             return null;
         }
    }

    应用程序1

        现在,让我们从一个servlet容器的角度来研究一下servlet编程。总的来说,一个全功能的servlet容器会为servlet的每个HTTP请求做下面一些工作:
    • 当第一次调用servlet的时候,加载该servlet类并调用servlet的init方法(仅仅一次)。
    • 对每次请求,构造一个javax.servlet.ServletRequest实例和一个javax.servlet.ServletResponse实例。
    • 调用servlet的service方法,同时传递ServletRequest和ServletResponse对象。
    • 当servlet类被关闭的时候,调用servlet的destroy方法并卸载servlet类。
        本章的第一个servlet容器不是全功能的。因此,她不能运行什么除了非常简单的servlet,而且也不调用servlet的init方法和destroy方法。相反它做了下面的事情:
    • 等待HTTP请求。
    • 构造一个ServletRequest对象和一个ServletResponse对象。
    • 假如该请求需要一个静态资源的话,调用StaticResourceProcessor实例的process方法,同时传递ServletRequest和ServletResponse对象。
    • 假如该请求需要一个servlet的话,加载servlet类并调用servlet的service方法,同时传递ServletRequest和ServletResponse对象。
        注意:在这个servlet容器中,每一次servlet被请求的时候,servlet类都会被加载。
        第一个应用程序由6个类组成:
    • HttpServer1
    • Request
    • Response
    • StaticResourceProcessor
    • ServletProcessor1
    • Constants

    这个应用程序的入口点(静态main方法)可以在HttpServer1类里边找到。main方法创建了一个HttpServer1的实例并调用了它的await方法。await方法等待HTTP请求,为每次请求创建一个Request对象和一个Response对象,并把他们分发到一个StaticResourceProcessor实例或者一个ServletProcessor实例中去,这取决于请求一个静态资源还是一个servlet。
        Constants类包括涉及其他类的静态final变量WEB_ROOT。WEB_ROOT显示了PrimitiveServlet和这个容器可以提供的静态资源的位置。
        HttpServer1实例会一直等待HTTP请求,直到接收到一个shutdown的命令。你科研用第1章的做法发送一个shutdown命令。
        应用程序里边的每个类都会在以下各节中进行讨论。

  • 相关阅读:
    Linux实战教学笔记49:Zabbix监控平台3.2.4(一)搭建部署与概述
    数据库SQLITE3初识
    多功能聊天室-项目规划实现图
    多功能电子通讯录(涉及到了双向链表的使用,Linux文件编程等等)
    学生信息管理系统(C语言版本)
    Linux笔记-Makefile伪指令解析
    Linux笔记-vim 配置
    Linux笔记-Linux下编辑器的简介
    C/C++编码规范
    Linux笔记-Linux命令初解2
  • 原文地址:https://www.cnblogs.com/macula7/p/1960789.html
Copyright © 2011-2022 走看看