最近这两个星期加班都比较晚,12点左右吧。现在项目的问题都处理的差不多了,抽空写下对前段时间遇到问题的思考。
这段时间参与的这个项目,在jsp与action之间交互使用VO(value object 值对象),java与数据库之间使用PO(persistant object 持久对象)。vo就是po的简化版,只有po的部分属性。此前自己做的项目都是使用同一个pojo来实现页面与action和java与数据库之间的数据传递。这引发了我的一个思考,有没有必要创建独立的vo对象?
我猜测原开发人员创建vo对象的初衷就是减少不必要属性的暴露,减少传输数据。但是,jsp在运行时会被编译成servlet,是在服务器端运行的,输出的是符合http协议的报文,使用vo减少不必要属性的暴露,减少传输数据的说法是不成立的。为了验证想法,有必要弄清楚web服务器处理一次请求的流程。先来分析下web服务器是怎么工作的,以tomcat处理一次servlet请求为例。
Tomcat的结构
tomcat的结构很复杂,但是Tomcat也非常模块化。下面是tomcat的总体架构图:
从上图可以看出Tomcat的核心是两个组件:连接器(Connector)和容器(Container)。Connector组件是负责生成请求对象和响应对象的,Tomcat默认的是HttpConnector,负责根据收到的Http请求报文生成Request对象和Response对象,并把这两个对象传递给Container,然后根据Response中的内容生成相应的HTTP报文。
Container是容器的父接口,所有子容器都必须实现这个接口,简单来说就是服务器部署的项目是运行在Container中的。Container里面的项目获取到Connector传递过来对应的的Request对象和Response对象进行相应的操作。
Connector可以根据不同的设计和应用场景进行替换。一个Container可以选择对应多个Connector。多个Connector和一个Container就形成了一个Service,有了Service就可以对外提供服务了。
Tomcat处理请求流程
Tomcat要为一个Servlet的请求提供服务,需要做三件事:
1、创建一个request对象并填充那些有可能被所引用的Servlet使用的信息,如参数,头部、cookies、查询字符串等。一个request对象就是javax.servlet.ServletRequest或javax.servlet.http.ServletRequest接口的一个实例。
2、 创建一个response对象,所引用的servlet使用它来给客户端发送响应。一个response对象是javax.servlet.ServletRequest或javax.servlet.http.ServletRequest接口的一个实例。
3、 调用servlet的service方法,并传入request和response对象。这里servlet会从request对象取值,给response写值。
4、根据servlet返回的response生成相应的HTTP响应报文。
最后,回到原来的那个问题——在页面与action层之间创建vo来传递数据真没必要。
参考资料:http://blog.csdn.net/beijiguangyong/article/details/7439352
http://www.ibm.com/developerworks/cn/java/j-lo-tomcat1/index.html
分享到:
相关推荐
tomcat中server配置文件的结构,以及处理一个http请求的全过程
在这个系列的第三部分,我们将深入探讨Tomcat处理HTTP请求的核心组件——`Connector`类。`Connector`是Tomcat与外部世界交互的关键桥梁,负责接收并转发HTTP请求到内部的Servlet容器进行处理。 首先,我们来理解`...
Coyote是Tomcat处理HTTP请求和响应的组件。它监听特定端口(默认8080),接收来自客户端的HTTP请求,解析请求头和请求体,然后交给Catalina处理。处理完成后,Coyote将响应结果打包成HTTP响应,并发送回客户端。 **...
1. "Tomcat处理HTTP请求源码分析.doc":详细阐述了Tomcat接收到HTTP请求后,如何解析请求头、执行请求方法、构造响应的过程,包括Servlet生命周期和请求转发等。 2. "Tomcat的类载入器以及源码分析.doc":详细介绍...
在Tomcat处理HTTP请求时,主要涉及以下几个步骤: 1. **连接器(Connector)**:连接器负责接收来自客户端的HTTP请求,将这些请求转换为内部可以处理的格式,如创建`ServletRequest`和`ServletResponse`对象。 2. ...
标题“Tomcat分配请求之——Socket获取请求”主要涉及的是Tomcat服务器在处理HTTP请求时的核心机制。在Web服务器中,Tomcat是一个广泛使用的开源应用服务器,它负责解析并响应来自客户端(如浏览器)的HTTP请求。这...
1. Servlet:Tomcat处理HTTP请求的核心是Servlet,需要编写一个Servlet来接收并处理来自Android客户端的POST请求。 2. doPost方法:在Servlet中,重写doPost方法,解析请求体获取数据。对于Multipart/form-data,...
这一步骤对于开发者来说极其重要,因为通过查看源码,开发者可以更深入地理解Tomcat处理HTTP请求、管理Servlet、部署Web应用程序以及执行其他核心功能的方式。 Tomcat源码的主要组成部分包括以下几个关键模块: 1....
Coyote是Tomcat处理HTTP请求的核心,它监听端口,接收请求,将其转化为内部格式,然后传递给Catalina进行处理。同时,它也负责将Catalina的响应结果转换回HTTP响应,发送回客户端。 6. **线程模型** Tomcat使用多...
Tomcat 发送 HTTPS 请求配置 Tomcat 是一个流行的 Web 服务器软件,用于部署基于 Java 的 Web 应用程序。为了确保数据传输的安全性,需要使用 HTTPS 协议来加密数据。在本文中,我们将介绍如何配置 Tomcat 来发送 ...
#### 三、Tomcat处理HTTP请求的过程 当Tomcat接收到HTTP请求时,处理流程如下: 1. **接收请求**:Connector监听特定端口上的网络连接,一旦检测到新的客户端连接请求,就会创建一个新的线程或使用线程池中的现有...
Coyote是Tomcat处理HTTP请求和响应的核心。它监听端口,接收请求,将请求数据转换为内部格式供Catalina处理,同时将Catalina的响应转换回HTTP响应并发送给客户端。 4. **Jasper JSP引擎** Jasper解析JSP文件为...
- **service()**:Servlet的`service()`方法被调用,处理HTTP请求并生成响应。 ##### 4. 响应生成与返回 - **allocate()**:在生成响应之前,可能还需要进行资源分配。 - **returnservlet**:Servlet生成响应后,...
2. **lib**:这个目录下存放了Tomcat运行所需的JAR文件,包括Servlet API、JSP API以及其他必要的库,它们是Tomcat处理HTTP请求和执行Servlet的重要依赖。 3. **logs**:记录Tomcat运行时的日志信息,对于调试和...
标题中的“tomcat connectors”指的是Apache Tomcat服务器的连接器组件,这些组件是Tomcat处理HTTP请求和响应的核心部分。在Tomcat服务器中,主要有两种连接器: Coyote(用于处理HTTP/1.1)和Apr(Apache Portable ...
第三章讲解了Tomcat处理HTTP请求的流程。当一个HTTP请求到达Tomcat时,它首先由Connector接收,然后通过ProtocolHandler将请求数据转换为内部结构。接下来,Request对象被创建并封装请求信息,而Response对象则用于...
总结来说,这个"Tomcat+MySQL为自己的APP打造服务器(4)完结篇Demo"涵盖了Android应用开发中的关键部分:服务器端的Tomcat处理HTTP请求并与MySQL数据库交互,以及Android客户端如何安全、高效地与服务器通信。...
- **功能**:作为Servlet和JSP容器,Tomcat处理HTTP请求,解析请求并调用相应的Servlet或JSP页面来生成响应。 - **版本历史**:5.5.x系列是Tomcat的长青分支,引入了许多性能优化和稳定性改进。 - **配置**:...
- **Servlet API**:这是Tomcat处理HTTP请求的核心,提供了Servlet和JSP的接口定义。 - **JSP API**:用于处理JSP页面的转换和执行,使得开发者可以使用HTML语法来编写动态内容。 - **Quercus**:如果这个集成...
10. **第10章:HTTP连接器** - 介绍了Tomcat处理HTTP请求的方式,包括AJP和SSL的支持。 11. **第11章:Tomcat与Apache HTTP服务器** - 讨论了Tomcat与Apache的集成方式,实现更强大的Web服务。 12. **第12章:...