服务器之家:专注于服务器技术及软件下载分享
分类导航

云服务器|WEB服务器|FTP服务器|邮件服务器|虚拟主机|服务器安全|DNS服务器|服务器知识|Nginx|IIS|Tomcat|

服务器之家 - 服务器技术 - Tomcat - tomcat中Servlet的工作机制详细介绍

tomcat中Servlet的工作机制详细介绍

2021-08-17 16:50wangyangzhizhou Tomcat

这篇文章主要介绍了tomcat中Servlet的工作机制详细介绍的相关资料,需要的朋友可以参考下

tomcat中servlet的工作机制

在研究servlet在tomcat中的工作机制前必须先看看servlet规范的一些重要的相关规定,规范提供了一个servlet接口,接口中包含的重要方法是init、service、destroy等方法,servlet在初始化时要调用init方法,在销毁时要调用destroy方法,而对客户端请求处理时则调用service方法。对于这些机制的支持都必须由tomcat内部去支持,具体则是由wrapper容器提供支持。

在tomcat中消息流的流转机制是通过四个不同级别的容器管道机制进行流转的,对于每个请求都是一层一层处理的。如下图,当客户端请求到达服务端后请求被抽象成request对象后向四个容器进行传递,首先经过engine容器的管道通过若干阀门,最后通过standardenginevalve阀门流转到host容器的管道,处理后继续往下流转,通过standardhostvalve阀门流转到context容器的管道,继续往下流转,通过standardcontextvalve阀门流转到wrapper容器的管道,而对servlet的核心处理也正是在standardwrappervalve阀门中。standardwrappervalve阀门调用servlet的service方法队请求进行处理,然后对客户端响应。

tomcat中Servlet的工作机制详细介绍

下面更深入了解下standardwrappervalve阀门调用servlet的过程。

web应用的servlet类都是根据servlet接口,例如一般我们在写业务处理servlet类时都会继承httpservlet类,为了遵循servlet规范,它其实最终也是实现了servlet接口,只是httpservlet定义了http协议的servlet,将协议共性的东西抽离出来复用。servlet处理客户端请求的核心方法为service方法,所以对于httpservlet来说,它需要针对http协议的get、post、pu、delete、head、options、trace等请求方法做出不同的分发处理,为方便理解,下面用个简化的代码展示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public abstract class httpservlet extends servlet{
  public void service(servletrequest req, servletresponse res) throws servletexception, ioexception {
    httpservletrequest request = (httpservletrequest) req;
    httpservletresponse response = (httpservletresponse) res;
    string method = req.getmethod();
    if (method.equals("get")) {
      doget(request, response);
    }else if (method.equals("post")) {
      dopost(request, response);
    }else if (method.equals("head")) {
      dohead(request, response);
    }
  }
protected void dohead(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception{}
protected void doget(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception{}
protected void dopost(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {}
}

service方法将请求对象和响应对象转换成httpservletrequest和httpservletresponse,然后获取请求方法,根据请求方法调用不同的处理方法,例如如果为get方法则调用doget方法,那么在继承了httpservlet类的servlet只需重写doget或dopost方法完成业务逻辑处理,这就是我们熟悉的servlet了。

这样一来,standardwrappervalve阀门调用servlet的工作其实就是通过反射机制实现对servlet对象的控制,例如在不配置load-on-startup情况下,客户端首次访问该servlet时由于还不存在该servlet对象,需要通过反射机制实例化出该servlet对象,并且调用初始化方法,所以这也是为什么第一次访问某个servlet时会比较耗时的原因,后面客户端再对该servlet访问时都会使用该servlet对象,无需再做实例化和初始化操作。有了servlet对象后调用其service方法即完成了对客户端请求的处理。

实际上通过反射机制实例化servlet对象是一个比较复杂的过程,它除了完成实例化和初始化工作外还要解析该servlet类包含的各种注解并作处理,另外,对于实现了singlethreadmodel接口的servlet类,它还要维护一个该servlet对象池。

综上所述,servlet工作机制大致流程是:request -> standardenginevalve -> standardhostvalve -> standardcontextvalve -> standardwrappervalve -> 实例化并初始化servlet对象 -> 调用该servlet对象的service方法 -> response。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://blog.csdn.net/wangyangzhizhou/article/details/52273676

延伸 · 阅读

精彩推荐
  • Tomcat解决Tomcat的maxPostSize属性的配置需要注意的问题

    解决Tomcat的maxPostSize属性的配置需要注意的问题

    这篇文章主要介绍了解决Tomcat的maxPostSize属性的配置需要注意的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    life is wonderful12012021-09-13
  • TomcatEclipse创建tomcat实现过程原理详解

    Eclipse创建tomcat实现过程原理详解

    这篇文章主要介绍了Eclipse创建tomcat实现过程原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以...

    海绵般汲取11642021-09-16
  • Tomcat如何查看tomcat的控制台输出的方法

    如何查看tomcat的控制台输出的方法

    这篇文章主要介绍了如何查看tomcat的控制台输出的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    CaiCaiNeo11932021-08-29
  • Tomcat一次tomcat源码启动控制台中文乱码的调试过程记录

    一次tomcat源码启动控制台中文乱码的调试过程记录

    平时在使用tomcat做一些服务的时候经常遇到各种乱码问题,下面这篇文章主要给大家介绍了一次tomcat源码启动控制台中文乱码的调试过程,需要的朋友可以...

    zhoutaoping199211852021-09-24
  • TomcatTomcat安装配置方法图文教程

    Tomcat安装配置方法图文教程

    这篇文章主要为大家详细介绍了Tomcat安装配置方法图文教程,java环境变量如何配置,Eclipse安装配置方法图文教程 ,为大家分享了三个教程,感兴趣的小伙...

    Tomcat教程网13292021-08-11
  • TomcatTomcat服务器的安全设置

    Tomcat服务器的安全设置

    tomcat是一个开源Web服务器,基于Tomcat的Web运行效率高,可以在一般的硬件平台上流畅运行,因此,颇受Web站长的青睐。不过,在默认配置下其存在一定的安...

    IT专家网9002021-08-03
  • TomcatTomcat整体结构简单介绍

    Tomcat整体结构简单介绍

    这篇文章主要介绍了Tomcat整体结构简单介绍,Tomcat的本质是一个Servlet容器。一个Servlet能做的事情是:处理请求资源,并为客户端填充response对象,需要的朋友...

    叫我田露也行12302021-09-07
  • TomcatTomcat CentOS安装实现过程图解

    Tomcat CentOS安装实现过程图解

    这篇文章主要介绍了Tomcat CentOS安装实现过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考...

    agrin5842021-09-15