tomcat&servlet

292 阅读5分钟

参考:

Tomcat详解(1)---Tomcat 的顶层结构及启动过程

Tomcat详解(2)---Tomcat 的生命周期管理

Tomcat详解(3)---Container 分析

Tomcat详解(4)---Pipeline-Value 管道

Tomcat详解(5)---Connector 分析

详解Servlet

四张图带你了解Tomcat系统架构    总结的很好



Tomcat介绍


一、tomcat处理过程

1、用户点击网页内容,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得。
2、Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。
3、Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host。
4、Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhost的Host获得请求/test/index.jsp,匹配它所拥有的所有的Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“ ”的Context去处理)。
5、path=“/test”的Context获得请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL PATTERN为*.jsp的Servlet,对应于JspServlet类。
6、构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或doPost().执行业务逻辑、数据存储等程序。
7、Context把执行完之后的HttpServletResponse对象返回给Host。
8、Host把HttpServletResponse对象返回给Engine。
9、Engine把HttpServletResponse对象返回Connector。
10、Connector把HttpServletResponse对象返回给客户Browser。


二、tomcat介绍

Tomcat 是Web应用服务器,是一个Servlet/JSP容器.

Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户。而Servlet是一种运行在支持 Java语言的服务器上的组件。 Servlet最常见的用途是扩展Java Web服务器功能,提供非常安全的、可移植的.

1、Connecter组件

一个Connecter将在某个指定的端口上侦听客户请求,接收浏览器的发过来的 tcp 连接请求,创建一个 Request 和 Response 对象分别用于和请求端交换数据,然后会产生一个线程来处理这个请求并把产生的 Request 和 Response 对象传给处理Engine(Container中的一部分),从Engine出获得响应并返回客户。

Tomcat中有两个经典的Connector,

  • 一个直接侦听来自Browser的HTTP请求,
  • 另外一个来自其他的WebServer请求。
  • Cotote HTTP/1.1 Connector在端口8080处侦听来自客户Browser的HTTP请求,Coyote JK2 Connector在端口8009处侦听其他Web Server的Servlet/JSP请求。

Connector 最重要的功能就是接收连接请求然后分配线程让 Container 来处理这个请求,所以这必然是多线程的,多线程的处理是 Connector 设计的核心。

2、Container是容器的父接口,

该容器的设计用的是典型的责任链的设计模式,它由四个自容器组件构成,分别是Engine、Host、Context、Wrapper。这四个组件是负责关系,存在包含关系。

  • 一个 Engine 代表一个完整的 Servlet 引擎。
  • Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。Wrapper 是最底层的容器,它没有子容器了,所以调用它的 addChild 将会报错。
  • Wrapper 的实现类是 StandardWrapper,StandardWrapper 还实现了拥有一个 Servlet 初始化信息的 ServletConfig,由此看出 StandardWrapper 将直接和 Servlet 的各种信息打交道。




servlet介绍


Tomcat 的容器等级中,Context 容器是直接管理 Servlet 在容器中的包装类 Wrapper,所以 Context 容器如何运行将直接影响 Servlet 的工作方式。一个 Context 对应一个 Web 工程,

客户端的请求直接打到tomcat,它监听端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。


1、servlet的生命周期是什么?

  • 服务器启动时 (web.xml中配置load-on-startup=1,默认为0) 或者第一次请求该servlet时,就会初始化一个Servlet对象,也就是会执行初始化方法 init( ServletConfig conf )
  • 该servlet对象去处理所有客户端请求,在service( ServletRequest req,ServletResponse res )方法中执行
  • 最后服务器关闭时,才会销毁这个servlet对象,执行destroy()方法。

2、servlet的生命周期中,可以看出,执行的是service方法,为什么我们就只需要写doGet和doPost方法呢?

service( HttpServletRequest req, HttpServletResponse resp) 

这个方法就是判断浏览器过来的请求方式是哪种,每种的处理方式不一样,我们常用的就是get,post,并且,我们处理的方式可能有很多的内容,所以,在该方法内会将get,post等其他5种请求方式提取出来,变成单个的方法,然后我们需要编写servlet时,就可以直接重写doGet或者doPost方法就行了,而不是重写service方法,更加有针对性。

所以在编写servlet时,继承httpServlet,只要重写两个方法,一个doGet,一个doPost,其实就是service方法会调用这两个方法中的一个(看请求方式)。


3、Servlet的生命周期

从创建到毁灭:

  • 1).调用 init() 方法初始化
  • 2).调用 service() 方法来处理客户端的请求
  • 3).调用 destroy() 方法释放资源,标记自身为可回收
  • 4).被垃圾回收器回收

由下面可以看见,servlet的init方法和destroy方法,一般容器调用这两个方法之间的过程,就叫做servlet的生命周期。