参考关于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. ThreadLocal及InheritableThreadLocal的原理剖析

    我们知道,线程的不安全问题,主要是由于多线程并发读取一个变量而引起的,那么有没有一种办法可以让一个变量是线程独有的呢,这样不就可以解决线程安全问题了么.其实JDK已经为我们提供了ThreadLocal ...

  2. [Swift]LeetCode85. 最大矩形 | Maximal Rectangle

    Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and ...

  3. Windows系统下安装Redis

    1.首先你要有redis-latest-windws和redisclient-客户端工具 2.在redis-latest-windws文件夹内创建一个批处理文件  start.bat 创建批处理文件的 ...

  4. synchronize 关键字原理

    众所周知 synchronized 关键字是解决并发问题常用解决方案,有以下三种使用方式: 同步普通方法,锁的是当前对象. 同步静态方法,锁的是当前 Class 对象. 同步块,锁的是 () 中的对象 ...

  5. bind(),unbind(),hover(),toggle(),animate()

    First.bind() bind(Type,fn) type:click/mouseover/mouseout fn:functionsecond.unbind() unbind(Type,fn) ...

  6. Visual Studio 2017中使用Libman管理客户端库

    什么是Libman 微软在Visual Studio 2017 15.8版本中内嵌了一个新的工具Library Manager. Library Manager(简称Libman)是一个客户端库管理工 ...

  7. asp.net core 系列 18 web服务器实现

    一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...

  8. 《HelloGitHub月刊》第 09 期

    <HelloGitHub>第 09 期 兴趣是最好的老师,<HelloGitHub>就是帮你找到兴趣! 前言 转眼就到年底了,月刊做到了第09期,感谢大家一路的支持和帮助

  9. 【Python3爬虫】拉勾网爬虫

    一.思路分析: 在之前写拉勾网的爬虫的时候,总是得到下面这个结果(真是头疼),当你看到下面这个结果的时候,也就意味着被反爬了,因为一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访 ...

  10. 用gogs轻松搭建个人的git服务器

    因为公司和家里电脑里面有些项目需做版本控制或者说共享吧,就想搭个自己的git服务器:原本想用gitlab,不过我服务器配置比较差,查了一下,看到gogs,眼前一亮: Gogs 的目标是打造一个最简单. ...