`
mabusyao
  • 浏览: 252609 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Tomcat中的Request & Response 设计结构

阅读更多
老版Tomcat使用catalina作为其连接器和容器的架构,当一个request请求到达时,Tomcat会对其做一系列的封装,并传递给容器进行处理,处理完之后,又会有一些解析工作来获取相应的response。

这里简单的介绍一下request在catalina中的体系结构。

我们都知道当我们进行web开发时,一个servlet只会接收类型为HttpServletRequest的对象,并返回类型为HttpServletResponse的结果。两个类中分别包含了许多web开发人员需要调用的方法,通常这些方法足够使用。

然后作为web container,Tomcat还需要在request中保存许多内部信息及使用方法,这些信息和方法不应该暴露给web开发人员,否则会造成不必要的麻烦。

那么,Tomcat中是如何实现只向开发人员提供有限接口,而内部提供更多接口的呢?

我们以Request为例子来看:

从这张图看,整个request的设计是相当复杂(这还不是全部,有些内容已经被省略掉),我们先看最基础的四个接口:

    ServletRequest: 这个接口来自javax包,是JSP Spec中定义必须要实现的。
    Request: Catalina内部的Request接口,为ServletRequest提供了许多补充方法,供 Catalina内部使用。
    HttpServletRequest: 来自javax包,是JSP Spec中定义作为Http的request必须要实现的。
    HttpRequest: Catalina内部的Request接口,为HttpServletRequest提供了许多补充方法,供Catalina内部使用。

整个设计中共用到了三种设计模式:

    Default Pattern缺省模式,实际上这本身并不能算是一种模式,最多只能是一种编程方法,对于接口的所有子类,提供一个默认实现,在这里就是RequestBase及HttpRequestBase所做的工作,HttpRquestBase向HttpRquestImpl提供了HttpRequest和HttpServletRequest的默认实现。这样以后添加新的继承就只需要实现几个方法。

    Adapter Pattern适配器模式,我们已经知道HttpRequestImpl中包含了HttpRequest和HttpServletRequest定义的所有方法的实现,然而对于Catalina组件,他们并不需要知道任何关于HttpServletRequest接口中定义的内容。因此,我们可以通过适配器模式将任何继承了HttpRequest和HttpServletRequest的类封装起来,并只提供HttpRequest提供的接口(可以看到HttpRequestWrapper继承HttpRequest)。

    Facade Pattern门面模式,门面模式将内部复杂的实现隐藏起来,并提供一个简单的接口给外部的用户使用。在这里,HttpRequestFacade类将只提供HttpServletRequest中定义的方法给web开发人员。

从某种角度上讲,适配器模式和门面模式有一定的类似,都是将已有接口进行封装,并提供新的接口,然而适配器着重于将一个接口转换成另一个接口,门面模式则着重于将复杂的内部实现隐藏起来,提供一个简单的通用接口。

然而在我们这个例子中,似乎并没有这些所谓的区别,两种实现方法几乎一致。
  • 大小: 57.8 KB
分享到:
评论
2 楼 mabusyao 2011-05-24  
今天看到Tomcat的session management,似乎对于Adapter Pattern和Facade Pattern这两种模式,Tomcat中并没有明确的区分。
1 楼 mabusyao 2011-05-19  
昨天tech talk,听同事讲Bridge Pattern,略有感悟。觉得这里也用到了这样一个模式。

Request接口和HttpRequest接口直接的继承关系,以及ServletRequest和HttpServletRequest的继承关系,都是桥梁模式的一重体现。

但是具体应该在何时使用这个模式,还需要一番功夫学习。

相关推荐

    09_Java Web——Request&Response案例

    Java Web开发是构建Web应用程序的一种常见方式,它主要基于Java技术栈。在"09_Java Web——Request&Response案例"这个主题中,我们...通过分析和运行这些代码,你可以更深入地理解Java Web中的Request和Response机制。

    Request&Response-授课

    Request&Response是JavaWeb开发中最基本最重要的概念之一,它们是服务器和客户端之间交互的桥梁。Request对象表示客户端的请求,而Response对象表示服务器端的响应。 响应对象概述 响应对象是指服务器端收到请求...

    servlet*request*response技术作用明晰

    通过地址解析一张图说明浏览器和Tomcat服务器之间的通信关系。相关技术点有servlet、request、response、(XML小配置)等等。

    Tomcat/Servlet/Response/Cookie/Session/HTTP/Request

    Tomcat/Servlet/Response/Cookie/Session/HTTP/Request

    解决Tomcat中文乱码

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // Conditionally select and set the character encoding to be used if...

    JAVAWeb全课程笔记( html版)

    Request&Response编程 Cookie&Session XML语言 JSP技术入门 EL表达式语言 JSTL标签库: JSP标准标签库 MVC程序架构思想&案例 [总结]Path路径问题 [总结]JavaWeb乱码问题 [转自IBM]中文编码问题 JDBC入门 Jdbc事务...

    Web_3_Request和Response1

    在Web开发中,Request和Response是核心概念,它们代表了客户端与服务器之间的通信。本章主要探讨的是如何使用ServletResponse,特别是HttpServletResponse对象来构建响应,以及如何处理HTTP请求。 7.1 Response简介...

    Tomcat和weblogic中文乱码问题解决方案

    例如,在 Tomcat 或 WebLogic 服务器中,request 和 response 的编码方式可能不同,这将导致中文乱码问题的出现。 解决方案 解决中文乱码问题最好的方法是增加过滤器。关键代码只有三行: ```java response.set...

    分析Tomcat的工作原理

    Adapter作为适配器,将Tomcat的Request和Response对象转换为标准的ServletRequest和ServletResponse,供容器处理。 容器部分的核心是Catalina框架,其层次结构包括Engine、Host、Context和Wrapper。Engine是顶级...

    How Tomcat Works 中文版

    本书以Tomcat的4.1.12和5.0.18版本为基础,对Servlet容器如何处理请求的三个主要步骤进行了阐述:创建request和response对象,以及调用servlet的service方法。request对象包含了客户端请求的所有信息,而response...

    如何解决Tomcat下中文乱码问题?

    在IT行业中,尤其是在Java Web开发领域,Tomcat服务器在处理中文字符时经常遇到乱码问题。这主要涉及两个方面:JSP页面显示中文乱码和表单提交乱码。为了解决这些问题,我们需要理解字符编码的基本原理,并采取相应...

    How Tomcat Works 中文版.pdf

    此外,Tomcat 5还简化了查找子组件的映射组件,使得代码结构更加简洁。 全书共分为20章,前两章作为导言,紧接着的章节将对Tomcat的各个组件进行详细解释和讨论。书中还包括了针对Java技术的预备知识介绍,这包括...

    Tomcat 中文问题及解决方法总结

    在Tomcat 4.1 下使用POST方式提交表单时,表单中的中文字符显示为乱码,而在Tomcat 4.0 下通常不会出现该问题。 **可能原因**: POST提交的数据默认为ISO8859-1编码,需要将其转换成中文编码。 **解决方法**(适用...

    How Tomcat Work.pdf

    书中指出,servlet容器之所以复杂,是因为它需要处理三个基本任务:创建request对象和response对象,并调用servlet的service方法。request对象包含了所有可能被servlet使用的请求信息,如参数、头部、cookies等;而...

    解决tomcat下中文乱码问题

    在本文中,我们将讨论如何解决 Tomcat 下中文乱码问题。该问题是由于 Tomcat 默认的字符编码设置不正确引起的。我们将通过设置 Connector 元素的 URIEncoding 属性和在过滤器中设置字符编码来解决该问题。 一、...

    对于jsp的一些理解,包括原理,还有request,response概述,以及一些注意事项

    编译后的Servlet文件通常存储在服务器的特定目录中,如 Tomcat 的 `${CATALINA_HOME}/work` 目录。这些文件被称为JSP的“真身”,包含了将JSP页面转换为Servlet后的源代码。 在这些“真身”文件中,可以看到原本的...

    java web 修改request携带的参数信息

    在这个方法中,我们可以对Request和Response对象进行操作。以下是一个简单的Filter示例: ```java public class ParameterModifyFilter implements Filter { @Override public void init(FilterConfig ...

Global site tag (gtag.js) - Google Analytics