设为首页 收藏本站
查看: 455|回复: 0

[经验分享] tomcat处理http请求

[复制链接]

尚未签到

发表于 2017-1-21 09:28:43 | 显示全部楼层 |阅读模式
        最近这两个星期加班都比较晚,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的总体架构图:
 
DSC0000.gif

 

从上图可以看出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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-331414-1-1.html 上篇帖子: 配置远程jconsole监测tomcat 下篇帖子: JDK+MyEclipse+Tomcat的配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表