第 3 章 连 接 器
正如前言所述,Catalina中有两个主要的模块,连接器(connector)和容器(container)。在本章中,将会建立一个连接器来增强第2章中的应用程序的功能,用一种更好的方法来创建request对和response对象。兼容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对象的类型(即不知道该servlet对象是实现了javax.servlet.Servlet接口,还是继承自javax.servlet.GenericServlet类或javax.servlet.http.HttpServlet类),连接器总是会提供HttpServletRequest实例和HttpServletResponse实例。
在本章的应用程序中,连接器解析HTTP请求头,使servlet实例能够获取到请求头、cookie和请求参数/值等信息。可以修改第2章中Response类的getWriter()方法,使其可以工作得更好些。有了这些增强功能之后,就可以从PrimitiveServlet实例中获得完整的响应信息了,从而可以运行更加复杂一点的servlet类(例如ModernServlet)。
本章中所要建立的连接器实际上是Tomcat 4中的默认连接器的简化版,默认连接器将会在第4章中讨论。虽然在Tomcat 4中已经以不再推荐使用默认连接器了,但它却是一个很好的学习工具。在本章剩下的部分中,“连接器”特指要在本章的应用程序中建立的模块。
注意 与前面几章中的应用程序不同,在本章的应用程序中,连接器和容器是分开的。
本章的应用程序都在ex03.pyrmont包及其子包下。其中连接器所使用的类都在ex03.pyrmont.connector包及ex03.pyrmont.connector.http包下。从本章的应用程序开始,每章的应用程序中都会有一个启动类,用来启动整个应用程序。但是,另一方面,还没有一种机制来关闭应用程序。一旦应用程序运行后,就只能通过关闭控制台(在Windows平台上)或终止进程(在UNIX/Linux平台上)的方式强制关闭应用程序。
在对本章的应用程序进行说明之前,会先对org.apache.catalina.util包下的StringManager类进行说明。该类用来处理应用程序中不同模块和Catalina本身中错误消息的国际化操作。在此之后,再对应用程序进行说明。