zoukankan      html  css  js  c++  java
  • 第九章 Servlet工作原理解析

    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.8 总结

  • 相关阅读:
    Android的数据存储
    Servlet第一天
    JavaScript高级程序设计读书笔记(3)
    Interesting Papers on Face Recognition
    Researchers Study Ear Biometrics
    IIS 发生意外错误 0x8ffe2740
    Father of fractal geometry, Benoit Mandelbrot has passed away
    Computer vision scientist David Mumford wins National Medal of Science
    Pattern Recognition Review Papers
    盒模型bug的解决方法
  • 原文地址:https://www.cnblogs.com/liufei1983/p/7407062.html
Copyright © 2011-2022 走看看