`
wxb880114
  • 浏览: 681814 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

How Tomcat Work——连接器

 
阅读更多
概要 
    在介绍中提到,Catalina 中有两个主要的模块:连接器和容器。本章中你将会写一个可以创建更好的请求和响应对象的连接器,用来改进第2章中的程序。一个符合Servlet 2.3和2.4规 范 的 连 接 器 必 须 创 建javax.servlet.http.HttpServletRequest 和javax.servlet.http.HttpServletResponse,并传递给被调用的servlet的service方法。在第2 章 中,servlet 容器只可以运行实现了 javax.servlet.Servlet 的 servlet,并传递 javax.servlet.ServletRequest 和 javax.servlet.ServletResponse 实例给 service 方法。因为连接器并不知道 servlet 的类型(例如它是否实现了 javax.servlet.Servlet,继承了javax.servlet.GenericServlet,或者继承了javax.servlet.http.HttpServlet),所以连接器必须始终提供HttpServletRequest和HttpServletResponse的实例。
    在本章的应用程序中,连接器解析HTTP请求头部并让servlet可以获得头部, cookies, 参数名/值等等。你将会完善第2章中Response类的getWriter方法,让它能够正确运行。由于这些改进,你将会从 PrimitiveServlet 中获取一个完整的响应,并能够运行更加复杂的ModernServlet。
    本章你建立的连接器是将在第 4 章详细讨论的 Tomcat4 的默认连接器的一个简化版本。Tomcat的默认连接器在Tomcat4中是不推荐使用的,但它仍然可以作为一个非常棒的学习工具。在这章的剩余部分,"connector"指的是内置在我们应用程序的模块。
    注意:和上一章的应用程序不同的是,本章的应用程序中,连接器和容器是分离的。
    在我们解释该应用程序之前,让我们先来说说包 org.apache.catalina.util 里边的StringManager类。这个类用来处理这个程序中不同模块和Catalina自身的错误信息的国际化。
StringManager 类 
    一个像Tomcat这样的大型应用需要仔细的处理错误信息。在Tomcat中,错误信息对于系统管理员和servlet程序员都是有用的。例 如,Tomcat记录错误信息,让系统管理员可以定位发生的任何异常。对 servlet 程 序 员 来 说 , Tomcat 会在抛出的任何一个
javax.servlet.ServletException 中发送一个错误信息,这样程序员可以知道他/她的 servlet究竟发送什么错误了。
    Tomcat 所采用的方法是在一个属性文件里边存储错误信息,这样,可以容易的修改这些信息。不过,Tomcat中有数以百计的类。把所有类使用的错误信 息存储到一个大的属性文件里边将会容易产生维护的噩梦。为了避免这一情况,Tomcat 为每个包都分配一个属性文件。例如,在包 org.apache.catalina.connector 里边的属性文件包含了该包所有的类抛出的所有错误信息。每个属性文件都会被一个 org.apache.catalina.util.StringManager类的实例所处理。当Tomcat 运行时,将会有许多 StringManager实例,每个实例会读取包对应的一个属性文件。此外,由于 Tomcat的受欢迎程度,提供多种语言的错误信息也是有意义的。目前,有三种语言是被支持的。英语的错误信息属性文件名为LocalStrings.properties。另外两个是西班牙语和日语,分别放在 LocalStrings_es.propertiesLocalStrings_ja.properties里边。
    当包里边的一个类需要查找放在该包属性文件的一个错误信息时,它首先会获得一个
StringManager实例。不过,相同包里边的许多类可能也需要 StringManager,为每个对象创建一个StringManager实例是一种资源浪费。因此, StringManager类被设计成一个StringManager实例可以被包里边的所有类共享。假如你熟悉设计模式,你将会正确的猜到 StringManager是一个单例 (singleton)类。仅有的一个构造方法是私有的,所有你不能在类的外部使用new关键字来实例化。你通过传递一个包名来调用它的公共静态方法 getManager来获得一个实例。每个实例存储在一个以包名为键(key)的Hashtable中。
应用程序
    从本章开始,每章附带的应用程序都会分成模块。这章的应用程序由三个模块组成:
connector, startup和core。
    startup模块只有一个类, Bootstrap,用来启动应用的。 connector模块的类可以分为五组:
  连接器和它的支撑类(HttpConnector和HttpProcessor)。 
  指代HTTP请求的类(HttpRequest)和它的辅助类。 
  指代HTTP响应的类(HttpResponse)和它的辅助类。
  Facade类(HttpRequestFacade和HttpResponseFacade)。 
  Constant类  

    Tomcat的默认连接器和我们的连接器使用SocketInputStream类来从套接字的InputStream中读取字节流。一个 SocketInputStream 实例对从套接字的 getInputStream 方法中返回的java.io.InputStream 实例进行包装。  SocketInputStream 类提供了两个重要的方法:
readRequestLine 和 readHeader。readRequestLine 返回一个 HTTP 请求的第一行。例如,这行包括了 URI,方法和 HTTP 版本。因为从套接字的输入流中处理字节流意味着只读取一次,从第一个字节到最后一个字节(并且不回退),因此 readHeader 被调用之前,readRequestLine 必须只被调用一次。readHeader每次被调用来获得一个头部的名/值对,并且应该被重复的调用知道所有的头部被读取到。readRequestLine 的返回值是一个 HttpRequestLine 的实例,而readHeader 的返回值是一个 HttpHeader 对象。 

  我们将会在下面的子节里边详细说明该应用程序:

  启动应用程序 
  连接器 
  创建一个HttpRequest对象 
  创建一个HttpResponse对象 
  静态资源处理器和servlet处理器 
  运行应用程序
启动应用程序 
    Bootstrap 类来启动应用程序        
   Bootstrap类

package ex03.pyrmont.startup;
import ex03.pyrmont.connector.http.HttpConnector;
public final class Bootstrap {
    public static void main(String[] args) {
        HttpConnector connector = new HttpConnector();
        connector.start();
    }
}
    Bootstrap类中的main方法实例化HttpConnector类并调用它的start方法。
连接器 
    ex03.pyrmont.connector.http.HttpConnector类指代一个连接器,职责是创建一个服务器套接字用来等待前来的HTTP请求。这个类在Listing 3.2中出现。
    HttpConnector类实现了java.lang.Runnable,所以它能被它自己的线程专用。当你启动应用程序,一个HttpConnector的实例被创建,并且它的run方法被执行。
    注意: 你可以通过读"Working with Threads"这篇文章来提醒你自己怎样创建Java线程。 
    run方法包括一个while循环,用来做下面的事情:
  等待HTTP请求 
  为每个请求创建个HttpProcessor实例 
  调用HttpProcessor的process方法 
分享到:
评论

相关推荐

    how tomcat work 中文版

    - **连接器(Connector)**:Tomcat支持多种类型的连接器,如Bio、Nio、Apr等,用于处理不同类型的网络通信。 - **Context**:每个Web应用程序对应一个Context,负责管理应用程序的Servlet和JSP。 - **Clustering**...

    how tomcat work

    Tomcat启动时,会读取`server.xml`配置文件,解析服务器的全局配置,如端口设置、连接器配置、Context定义等。然后初始化各个组件,建立监听套接字,等待客户端请求。 3. **请求处理**: - **接收请求**:当...

    how tomcat work_中文版(源码)

    在《如何让Tomcat工作:中文版》这本书中,读者可以详细了解到这些过程的内部细节,包括请求处理的生命周期管理、线程模型、类加载机制、安全策略、连接器(Coyote)组件、容器结构等。书中附带的源码分析部分,则有...

    How Tomcat Work 电子书+源码

    2. **HTTP连接器**:Tomcat通过Connector接收HTTP请求。默认使用 APR (Apache Portable Runtime) 连接器,它可以利用操作系统级别的特性提高性能。 3. **请求处理**:接收到请求后,Tomcat会通过线程池分配一个线程...

    How Tomcat Work.pdf

    在介绍Tomcat的两个主要版本时,书中指出Tomcat5相较于Tomcat4有所改进,支持了更先进的Servlet2.4和JSP2.0规范,拥有更有效率的默认连接器,并且共享后台处理线程,大大减少了资源消耗。Tomcat5不需要映射组件来...

    HowTomcatWork 源代码

    Tomcat的架构主要包括四个主要部分:Catalina(核心处理引擎)、 Jasper(JSP编译器)、Juli(日志系统)和 Coyote(HTTP/1.1连接器)。Catalina负责管理Servlet容器,Jasper处理JSP文件的编译和执行,Juli提供日志...

    How Tomcat Work 第二章 实例应用

    这个过程涉及了Tomcat的连接器(Connector)和容器(Container)组件,如Coyote Connector和Host Container。 5. **会话管理**:Tomcat提供了会话跟踪机制,允许用户在多个页面间保持状态。理解如何配置会话超时,...

    How Tomcat Work 第一章 实例应用

    《How Tomcat Work》第一章主要围绕Tomcat服务器的实例应用展开,旨在帮助读者理解并实践Tomcat在实际开发中的工作原理。Tomcat是一款开源的、轻量级的应用服务器,主要用于运行Java Servlet和JavaServer Pages(JSP...

    HowTomcatWork源码

    《How Tomcat Work》是一本深入探讨Apache Tomcat工作原理的书籍,其源码提供了丰富的实践案例和设计思路。Tomcat作为一个开源的Java Servlet容器,是许多Web应用程序的基础。通过研究这本书中的源码,我们可以了解...

    学习tomcat源码+英文《How Tomcat Work》和每一章的相关项目+tomcat6源码依赖jar

    《How Tomcat Works》这本书详细介绍了这些组件的工作方式,包括线程管理、连接器架构、会话管理、安全特性等。通过阅读这本书,你可以了解到Tomcat如何处理HTTP请求,如何管理应用上下文,以及如何加载和部署Web...

    译How Tomcat Works(第二章)

    8. **扩展性与性能优化**:Tomcat可以通过插件、连接器和模块扩展功能。例如,通过AJP连接器实现与其他Web服务器的集成,或者使用mod_jk与Apache HTTP Server配合提高性能。 9. **故障排查与日志**:Tomcat生成详细...

    How Tomcat Works【英文PDF+中文HTML+源码】.zip

    1. **架构概述**:Tomcat的架构基于服务器-客户端模型,主要由Catalina(Servlet容器)、 Coyote(HTTP/HTTPS连接器)和Jasper(JSP引擎)三个主要组件构成。Catalina处理Servlet,Coyote处理网络通信,Jasper编译和...

    How Tomcat Works 中文版/英文版 + 源码

    2. **启动与配置**:Tomcat的配置主要在`conf`目录下的`server.xml`文件中进行,这里定义了服务器的端口、连接器、Context(应用上下文)等。 3. **目录结构**:每个Web应用都有一个特定的目录结构,如`WEB-INF`...

    how tomcat to work

    本书名为“How Tomcat Works”,它深入剖析了Tomcat 4.1.12和5.0.18这两个版本,解释了这个开源、免费且广受欢迎的servlet容器——代号为Catalina的内部工作原理。Tomcat是一个复杂的系统,它由许多不同的组件构成。...

    How Tomcat Works.rar

    7. **性能优化**:可以通过调整连接器配置、启用线程池、限制并发连接数、使用NIO连接器等方式提高Tomcat的性能。还可以通过修改`jvmRoute`实现负载均衡。 8. **集群与复制**:对于高可用性和负载均衡,Tomcat支持...

    tomcat源码

    Tomcat支持多种连接器,如HTTP/1.1和AJP,它们负责与客户端的通信。Coyote连接器实现了这些协议,将网络数据包转化为内部的请求对象。 7. **部署与配置** 通过`web.xml`文件,开发者可以配置Web应用的各种元数据...

    HowTomcatWrks

    《HowTomcatWorks》是一本深入探讨Apache Tomcat工作原理的资源集合,包含了完整的源码和详细的PDF书籍。这份资料对于理解Tomcat的内部机制、优化服务器性能以及解决相关问题具有极大的价值。以下是对Tomcat核心知识...

    Apache Tomcat集群

    #### 五、配置Apache Tomcat连接器 1. **安装mod_jk模块** - 将`mod_jk-1.2.28-httpd-2.2.3.os`复制到`Apache_HOME/modules`目录下。 2. **配置Apache HTTP Server** - 编辑`Apache_HOME/conf/httpd.conf`,在...

    外文翻译 stus MVC

    Struts——an open-source MVC implementation This article introduces Struts, a Model-View-Controller implementation that uses servlets and JavaServer Pages (JSP) technology. Struts can help you control...

Global site tag (gtag.js) - Google Analytics