tomcat4源码剖析(一)——tomcat的整体架构

    在项目开发中,随着项目规模做的越来越大。对于所使用的底层容器的了解显得越发重要。借此契机,最近在研读《深入剖析Tomcat》这本书。觉得对于Tomcat的了解很有帮助。虽然写的是Tomcat4,但是感觉在大体的原理上差别应该不大。在此记录下自己查看代码的心得体会。本系列会根据书中的章节,进行整理和总结。

一、tomcat的总体结构

     对于应用层来说,tomcat是在java封装好的socket的基础上编写出来的。做过socket编程的人都知道,实现网络通信时服务器端自己实现一个ServerSocket。通过accept()方法阻塞式的监听指定的ip和端口,然后客户端实现一个socket实例去连接服务器,这样双方的通信接建立起来了。至于java如何抽象socket以及ServerSocket不是本文所讲解的重点,如需了解请自行查找资料。
     Tomcat就是在此基础上,实现了一个ServerSocket不断接收socket,完成客户端的请求。由此Tomcat将接收请求,处理请求这两部分抽象出来,形成连接器容器两个概念。连接器负责接收http请求,将请求协议,请求头抽象出来封装到Request,以及Response中,再将它们交给容器去处理。如图所示:
这里写图片描述

二、http请求

     其实每次我们打开浏览器点击一个具体的网址的时候,传送到服务器的都是一些字符,也就是http协议规定好的字符。当通过socket建立好连接后,服务器接收到的就是这些字符,然后根据协议挑选出其中的指定字段,当然请求的参数也在其中。然后服务器根据请求做相应的处理(比如查数据库返回指定的页面呀,返回一些图片什么的),通过socket将处理后的结果返回给客户端。返回的结果当然也还是字符,客户端接收到信息后,按照http协议解析,然后将结果你渲染成页面,这样我们就看见了网页,完成了一次请求过程。
     在整个过程中都遵循http协议。那http协议是什么呢?简单来说核心部分就是规定你发给我请求的时候,哪些地方填一些什么字符代表什么含义。我根据协议来解析你的请求。同时我回应你的时候,也按照一定的格式让你知道这次请求结果如何,然后浏览器按照协议取出指定的字符,在页面上渲染。
     一个典型的http协议包括:请求方法、请求头、实体。

GET /zkw/exmaple.jsp HTTP/1.1
User-Agent: Fiddler/2.6.3.48898 (.NET 3.5; WinNT 6.1.7601 SP1; zh-CN; 4xAMD64; Auto Update; Full Instance)
Pragma: no-cache
Host: www.fiddler2.com
Accept-Language: zh-CN
Referer: http://fiddler2.com/client/2.6.3.48898
Accept-Encoding: gzip, deflate
Connection: close

username=zkw&pwd=123

    如上所示,第一行就是请求方法,请求方法告诉服务器用什么方式请求(POST,GET,PUT等)。请求的服务器资源(/zkw/exmaple.jsp)。以及协议的版本(HTTP/1.1)。请求头包含客户端的环境和请求实体正文的相关信息。例如,客户端的语言环境(Accept-Language: zh-CN等)。实体包含的就是在这个请求中所携带的参数。例如用户名和密码等。
    在一次请求服务器的过程中,浏览器就是将类似于上述例子中的字符集通过网络传递给服务器。然后服务器解析上述字符集,提取其中的重要信息封装到request和reponse中,传递给容器处理。容器接收到request和reponse后再做处理,最后返回处理结果。
    服务器接收客户端请求,并将请求封装到自定义的request和reponse类中这一过程抽象出来就成为了连接器。接收request和reponse做相关处理,并返回处理结果给客户端这一过程抽象出来就成了容器Tomcat基本的工作流程就是这样的。不断接收请求,交给容器去处理,再接收请求再交给容器去处理。

三、总结

    Tomcat的工作原理很简单——就是在http协议的基础上,对协议进行解析。利用协议来完成客户端(浏览器)与服务器之间的通信。下一节将针对此节的协议完成简单的Tomcat服务器代码。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值