参考关于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数组中。

Servlet工作原理解析 《深入分析java web 技术内幕》第九章的更多相关文章

  1. Javac编译原理 《深入分析java web 技术内幕》第四章

    javac编译的四个主要的流程: 词法分析器:将源码转换为Token流 将源代码划分成一个个Token(找出java语言中的关键字) 语法分析器:将Token流转化为语法树 将上述的一个个Token组 ...

  2. java体系结构与工作方式 《深入分析java web 技术内幕》第七章

    java体系结构与工作方式 7.1 JVM体系结构 何谓JVM JVM(Java Virtual Machine) 通过模拟一个计算机来达到一个计算机所具有的计算功能 指令集:计算机所能识别的机器语言 ...

  3. 深入分析Java Web技术内幕(修订版)

    阿里巴巴集团技术丛书 深入分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书.技术大牛范禹.玉伯.毕玄联合力荐!大型互联网公司开发应用实践!) 许令波 著   ISBN 978-7-121- ...

  4. developerWorks 图书频道: 深入分析 Java Web 技术内幕,第 10 章

    developerWorks 图书频道: 深入分析 Java Web 技术内幕,第 10 章 深入理解 Session 与 Cookie Session 与 Cookie 不管是对 Java Web ...

  5. JAVA Coder 的《深入分析Java Web 技术内幕》读书笔记

    本文基于<深入分析Java Web 技术内幕> <深入分析Java Web 技术内幕>,作者是 许令波,电子工业出版社.本文只是记录书本当中的精彩部分,作个人回顾和技术分享,请 ...

  6. 《深入分析Java Web技术内幕》读书笔记 - 第1章 深入Web请求过程

    第1章 深入Web请求过程 1 1.1 B/S网络架构概述 2 基于统一的应用层协议HTTP来交互数据. 1.2 如何发起一个请求 4 HTTP连接本质是建立Socket连接.请求实现方式:工具包如H ...

  7. 深入分析java web技术内幕目录一览

    Web请求过程 如何发起请求:browser,httpclient http解析:chrome ,cache Dns域名解析:域名缓存 cdn:负载,动态加速,回源 Java I/O I/0类库的基本 ...

  8. 深入分析Java Web技术内幕

    深入web请求过程 发起一个http请求的过程就是建立一个socket通信的过程 HTTPClient是一个开源的实现了http请求的工具包 深入分析java I/O的工作机制 深入分析java We ...

  9. 《深入分析Java Web技术内幕》读后感(servlet)

    见书第九章 P243 在Tomcat的容器等级中,Context容器直接管理Servlet在容器中的包装类Wrapper,所以Context容器如何运行将直接影响Servlet的工作方式. Servl ...

随机推荐

  1. [Swift]LeetCode131. 分割回文串 | Palindrome Partitioning

    Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...

  2. [Swift]LeetCode605. 种花问题 | Can Place Flowers

    Suppose you have a long flowerbed in which some of the plots are planted and some are not. However, ...

  3. 两分钟搞懂UiAutomator、UiAutomator2、Bootstrap的关系

    很多同学经过一段时间的学习之后都明白了Appium的基本原理,但是越学习到后面发现出现的很多陌生名词无法弄清楚其具体作用,今天这篇文章的目的就是为了让大家来弄懂三个高频名词:UiAutomator.U ...

  4. hdfs创建删除文件和文件夹

    在 hadoop 中,基于 Linux 命令可以给 hdfs 创建文件和文件夹,或者删除文件和文件夹 创建文件的命令为: hadoop fs -touch /file.txt 创建文件夹的命令为: h ...

  5. .NET Core实战项目之CMS 第六章 入门篇-Vue的快速入门及其使用

    写在前面 上面文章我给大家介绍了Dapper这个ORM框架的简单使用,大伙会用了嘛!本来今天这篇文章是要讲Vue的快速入门的,原因是想在后面的文章中使用Vue进行这个CMS系统的后台管理界面的实现.但 ...

  6. WebSocket(5)---多人聊天系统

    多人聊天系统 功能说明:多人聊天系统,主要功能点: 1.当你登陆成功后,可以看到所有在线用户(实际开发可以通过redis实现,我这边仅仅用map集合) 2.实现群聊功能,我发送消息,大家都可以看到. ...

  7. ASP.NET Core 2.0 : 八.图说管道,唐僧扫塔的故事

    本文通过一张GIF动图来继续聊一下ASP.NET Core的请求处理管道,从管道的配置.构建以及请求处理流程等方面做一下详细的研究.(ASP.NET Core系列目录) 一.概述 上文说到,请求是经过 ...

  8. nginx部署dotnet core站点

    步骤 aspnetcore程序端口号5001,实际外部端口号8001,相当于把8001收到的请求转发给5001. 把发布出来的文件全部丢掉 /var/www/JuXiangTou 里面去.可以用scp ...

  9. Python3+Selenium2完整的自动化测试实现之旅(七):完整的轻量级自动化框架实现

    一.前言 前面系列Python3+Selenium2自动化系列博文,陆陆续续总结了自动化环境最基础环境的搭建.IE和Chrome浏览器驱动配置.selenium下的webdriver模块提供的元素定位 ...

  10. Java开发笔记(四十)日期与字符串的互相转换

    前面介绍了如何通过Date工具获取各个时间数值,但是用户更喜欢形如“2018-11-24 23:04:18”这种结构清晰.简洁明了的字符串,而非啰里八唆依次汇报每个时间单位及其数值的描述.既然日期时间 ...