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

第九章 Servlet工作原理解析的更多相关文章

  1. 第九章 Servlet工作原理解析(待续)

    从 Servlet容器说起 创建 Servlet实例 Servlet体系结构 Servlet如何工作 Servlet中的Listener Filter如何工作 Servlet中的url-pattern

  2. Servlet工作原理解析 《深入分析java web 技术内幕》第九章

    参考关于servblet的相关文章 侧重概况:https://blog.csdn.net/levycc/article/details/50728921 ibm的相关:https://www.ibm. ...

  3. Servlet 工作原理解析

    转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/ Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 J ...

  4. [转]Servlet 工作原理解析

    Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...

  5. Servlet 工作原理解析--转载

    原文:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/index.html?ca=drs- Web 技术成为当今主流的互联网 Web 应用 ...

  6. 【Java】Servlet 工作原理解析

    Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...

  7. 【Tomcat】Servlet 工作原理解析

    Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...

  8. 第九章:Servlet工作原理解析

    9.1 从Servlet容器说起 Servlet和Servlet容器的关系,就像枪和子弹的关系,彼此依存又互相独立发展,这一切都是为了适应工业化生产.从技术角度来说,是为了解耦,通过标准化接口来互相协 ...

  9. JavaWeb总结--Servlet 工作原理解析

    从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力 ...

随机推荐

  1. angular custom Element 自定义web component

    angular 自定义web组件: 首先创建一个名为myCustom的组件. 引入app.module: ... import {customComponent} from ' ./myCustom. ...

  2. yii2:如果获取config/web.php配置的值?

    return [ 'version' => '1.0.1', 'category-map' => [ 1 => '样式1', 2 => '样式2', 3 => '样式3' ...

  3. 微信公众号 iOS UITextFiled 用中文键盘输英文出现空格的解决方法

    问题出现的现象: 最近公司开发微信公众号邀请码,需要对用户输入进行限制,允许输入的是字母和数字,其他输入会使用正则表达式禁止.但是有iOS用户反映在输入字母过程中,经常几个字母之后,邀请码不对,查看公 ...

  4. MySQL连接中出现大量的 init 状态问题

    最怕的就是睡一觉醒来,系统出了问题. 大早系统无法登陆,以前没有经验的同学code的代码,竟然 try catch 没有记录异常日志信息. 查的问题一点头绪都没有,一直锁定在公司公共网关接口出了问题. ...

  5. tsunami:一种基于UDP协议的快速传输

    一. 需求 最近在做数据库迁移,经常需要打包实例传输,传统scp感觉很慢. 二. 软件信息 1. 软件主页:http://tsunami-udp.sf.net/ 2. 软件安装:直接源码make &a ...

  6. Shiro快速入门

    1.什么是Shiro Shiro是Java的一个安全框架, 完成权限控制的任务. 权限控制的基本功能: 认证(让系统知道你是谁); 授权(让系统知道你能做什么)权限控制常用的技术: 过滤器/拦截器, ...

  7. 闸流管(或双向可控硅) IGBT 应用

    十条规则规则1. 为了导通闸流管(或双向可控硅),必须有门极电流≧IGT ,直至负载电流达到≧IL .这条件必须满足,并按可能遇到的最低温度考虑.规则2. 要断开(切换)闸流管(或双向可控硅),负载电 ...

  8. grep 常用正则匹配

    1.或操作 grep -E '123|abc' filename // 找出文件(filename)中包含123或者包含abc的行 egrep '123|abc' filename // 用egrep ...

  9. ASP调用存储过程访问SQL Server

     ASP调用存储过程访问SQL Server 2011-02-15 10:22:57 标签:asp 数据库 sQL 存储过程 Server ASP和存储过程(Stored Procedures)的文章 ...

  10. [QT] Tab键切换焦点顺序

    在Qt Designer 中点击“编辑Tab顺序“按钮进入编辑Tab顺序模式,如下图: 之后界面会变成这样: 随处点击右键即可弹出菜单,选择  "制表符顺序列表..." 出现 剩下 ...