zoukankan      html  css  js  c++  java
  • Servlet工作原理解析 《深入分析java web 技术内幕》第九章

    参考关于servblet的相关文章

    侧重概况:https://blog.csdn.net/levycc/article/details/50728921

    ibm的相关:https://www.ibm.com/developerworks/cn/java/j-lo-servlet/index.html

    《深入分析java web 技术内幕》第九章

    9.1 从Servlet容器说起

         Servlet容器:Jetty, Tomcat等。

      这里以Tomcat为例,  真正管理Servlet的容器是Context容器,一个Context对应一个WEB工程。context容器管理Servlet在容器中的包装类Wrapper,所以Context容器如何运行直接影响Servlet的工作方式,

      9..1.1 Servlet容器的启动过程

      如何启动Tomcat: 启动类org.apache.catalina.startup.Tomcat,创建一个实例对象并调用start方法就可以很容器地启动Tomcat。

      9.1.2 Web应用的初始化工作

      web应用初始化在contextConfig的configureStart方法中实现的,应用的初始化主要是解析web.xml,解析成webxml对象

      接下来将webxml对象中的属性设置到Context容器中,这里包括创建Servlet对象、filter、listener等。

       将servelet包装成Context容器中的StandardWrapper,为什么将Servlet包装成StandardWrapper而不是直接包装成Servlet?这里StandardWrapper是Tomcat容器的一部分,具有容器的特征,而

      Servlet作为一个独立的web开发标准,不应该强耦合在Tomcat中。

      除了将servelet包装成standardwrapper并作为子容器添加到Context,其他所有的web.xml属性都被解析到Context中

    9.2 创建Servlet实例

      前面已经完成了Servlet的解析工作,并且被包装成StandardWrapper添加在Context容器中,但是依然不能工作,还没有被实例化。下面介绍Servelet对象是如何创建的,以及是如何初始化的。

      9..2.1 创建Servlet实例

      如何Servlet的load-on-startup的配置项大于0,那么在Context容器启动时就会被实例化。

      9.2.2 初始化Servlet

    9.3 Servlet体系结构

    与Servlet主动关联的是三个类,分别是ServletConfig, ServletRequest和ServletResponse。

     Tomcat接受到请求首先将会创建的Request和Resonse,者两个类是Tomcat内部使用的描述一次请求和响应的信息类,

    9.4 Servlet如何工作

      用户从浏览器向服务器发起一个请求通常会包含如下信息:Http://hostname:port/contextpath/servletpath, hostname和port是为了用来与sever建立TCP连接,后面的

      URL采用来选择在服务器中那个子容器服务用户请求,服务器如何根据这个URL来到达正确的Servlet容器?

      映射工作由专门的类完成,这个类是org.apache.tomcat.util.http.mapper, 这个类保存了Tomcat的Container容器中所有子容器的信息,org.apache.catalina.connector.Request类在进入Container容器之前,Mapper将会根据这次请求 的hostname和contextpah将host和Context容器设置到Request的mapingData属性中。

      但是在Request到达Servlet容器之间,必须执行filter链,以及通知在web.xml中定义的listener,

      接下来执行Servlet的service方法,通常,我们自己定义的servlet并不直接实现它,而是继承HttpServlet类或者GenericServlet类,我们可以选择覆盖一部分方法。

      现在web应用很少直接将交互全部界面用Servlet来实现,而是采用更加高效的MVC框架来实现。MVC框架基本原理是将所有的请求映射到一个servlet,然后去实现service方法,这个方法是MVC入口。

      servlet从servlet容器中移除时,调用servlet的destroy方法。

    9.5 Servlet中的Listener

      Tomcat服务器中,Listener使用非常广泛,它是基于观察者模式的。

      他们基本上涵盖了整个Servlet生命周期中你感兴趣的每种事件。这些listener实现类可以配置在web.xml的<listener>标签中。

      如Spring的ContextLoaderListener就实现了一个ServletContextContextListener,当容器启动的时候启动Spring容器。

      有几种方法可以加载Spring容器:通过在web.xml的<context-param>标签中配置Spring的applicationContext.xml路径,文件名可以任意取,如果没有配置,将在web-inf/路径下找默认的application Context.xml.

    9.6 Filter如何工作

      Filter和Filter-mapping 组合来使用Filter。

      Filter类的三个接口:init() / dofilter()  /    destroy()

    9.7 Servlet中的URL-Pattern

      <Servlet-mapping>和<filter-mapping>都有<URL-pattern>配置项。

       如果匹配上了,就将这个FIlter保存到Application Filter Chain的filters数组中。

    9.1 从Servlet容器说起

         Servlet容器:Jetty, Tomcat等。

      这里以Tomcat为例,  真正管理Servlet的容器是Context容器,一个Context对应一个WEB工程。context容器管理Servlet在容器中的包装类Wrapper,所以Context容器如何运行直接影响Servlet的工作方式,

      9..1.1 Servlet容器的启动过程

      如何启动Tomcat: 启动类org.apache.catalina.startup.Tomcat,创建一个实例对象并调用start方法就可以很容器地启动Tomcat。

      9.1.2 Web应用的初始化工作

      web应用初始化在contextConfig的configureStart方法中实现的,应用的初始化主要是解析web.xml,解析成webxml对象

      接下来将webxml对象中的属性设置到Context容器中,这里包括创建Servlet对象、filter、listener等。

       将servelet包装成Context容器中的StandardWrapper,为什么将Servlet包装成StandardWrapper而不是直接包装成Servlet?这里StandardWrapper是Tomcat容器的一部分,具有容器的特征,而

      Servlet作为一个独立的web开发标准,不应该强耦合在Tomcat中。

      除了将servelet包装成standardwrapper并作为子容器添加到Context,其他所有的web.xml属性都被解析到Context中

    9.2 创建Servlet实例

      前面已经完成了Servlet的解析工作,并且被包装成StandardWrapper添加在Context容器中,但是依然不能工作,还没有被实例化。下面介绍Servelet对象是如何创建的,以及是如何初始化的。

      9..2.1 创建Servlet实例

      如何Servlet的load-on-startup的配置项大于0,那么在Context容器启动时就会被实例化。

      9.2.2 初始化Servlet

    9.3 Servlet体系结构

    与Servlet主动关联的是三个类,分别是ServletConfig, ServletRequest和ServletResponse。

     Tomcat接受到请求首先将会创建的Request和Resonse,者两个类是Tomcat内部使用的描述一次请求和响应的信息类,

    9.4 Servlet如何工作

      用户从浏览器向服务器发起一个请求通常会包含如下信息:Http://hostname:port/contextpath/servletpath, hostname和port是为了用来与sever建立TCP连接,后面的

      URL采用来选择在服务器中那个子容器服务用户请求,服务器如何根据这个URL来到达正确的Servlet容器?

      映射工作由专门的类完成,这个类是org.apache.tomcat.util.http.mapper, 这个类保存了Tomcat的Container容器中所有子容器的信息,org.apache.catalina.connector.Request类在进入Container容器之前,Mapper将会根据这次请求 的hostname和contextpah将host和Context容器设置到Request的mapingData属性中。

      但是在Request到达Servlet容器之间,必须执行filter链,以及通知在web.xml中定义的listener,

      接下来执行Servlet的service方法,通常,我们自己定义的servlet并不直接实现它,而是继承HttpServlet类或者GenericServlet类,我们可以选择覆盖一部分方法。

      现在web应用很少直接将交互全部界面用Servlet来实现,而是采用更加高效的MVC框架来实现。MVC框架基本原理是将所有的请求映射到一个servlet,然后去实现service方法,这个方法是MVC入口。

      servlet从servlet容器中移除时,调用servlet的destroy方法。

    9.5 Servlet中的Listener

      Tomcat服务器中,Listener使用非常广泛,它是基于观察者模式的。

      他们基本上涵盖了整个Servlet生命周期中你感兴趣的每种事件。这些listener实现类可以配置在web.xml的<listener>标签中。

      如Spring的ContextLoaderListener就实现了一个ServletContextContextListener,当容器启动的时候启动Spring容器。

      有几种方法可以加载Spring容器:通过在web.xml的<context-param>标签中配置Spring的applicationContext.xml路径,文件名可以任意取,如果没有配置,将在web-inf/路径下找默认的application Context.xml.

    9.6 Filter如何工作

      Filter和Filter-mapping 组合来使用Filter。

      Filter类的三个接口:init() / dofilter()  /    destroy()

    9.7 Servlet中的URL-Pattern

      <Servlet-mapping>和<filter-mapping>都有<URL-pattern>配置项。

       如果匹配上了,就将这个FIlter保存到Application Filter Chain的filters数组中。

  • 相关阅读:
    站点防攻击之禁止国外ip
    docker 安装rabbitMQ
    【转】浅析支付系统的整体架构
    【转】MQ详解及四大MQ比较
    SQL server 中的dbo、guest
    网站加载速度的优化(1):优化前端页面
    【转】Apache ab压力测试
    Asp.Net Core 部署发布后EFCore数据库断连和Google浏览器无法存储Cookie
    C# 使用nuget.exe发布类库及更新类库
    .net core 读取Excal文件数据及注意事项
  • 原文地址:https://www.cnblogs.com/liguo-wang/p/9465848.html
Copyright © 2011-2022 走看看