Servlet

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。

Servlet容器

  • servlet容器启动过程:
    在tomcat容器管理等级中,Context直接管理着Servlet在容器中的包装类Wrapper,所以Servelt容器如何运行就影响这servlet,下面就是servlet容器启动过程
    Servlet容器启动时,触发servletContextEvent事件,并通知相应的监听器servletContextListener;
    Servlet容器在启动的过程中通过servletContextListener监视servletContext的状态(初始化或者销毁servletContext);
    servletContextListener中通过contextInitialized初始化方法,根据web.xml对servletContext进行配置,即将Context容器的属性缓存在内存中,供Service服务利用;
  • web应用初始化工作:
    web的初始化是在contextConfig中实现的,应用的初始化主要是对web.xml进行解析,这个文件描述了Web应用的关键信息,也是整个Web应用的入口。
    Tomcat将web.xml文件解析后,将其中的属性设置到Context容器中,这里包括创建Servlet实例,Filter和Listener。将Servlet包装成Context中的包装类Wrapper。
    Tomcat的context容器中的StrandWrapper对象就是tomcat中对于Servlet的包装也就是,Servlet是一种JavaWeb规范而不是直接耦合成一个类包装在tomcat容器里面,这是standwapper对象的设计初衷。

    Servlet实例

  • 创建Servlet对象
    如果Servlet在web.xml中load-on-startup的配置大于0,那么在Context容器启动时就会被实例化。在tomcat/conf/web.xml文件中,配置了2个load-on-startup为1,3的默认启动类,分别是Servlets.DefaultServlet、org.apache.servlet.JspServlet
  • 初始化Servlet
    前面讲了Servlet规范在tomcat的实现就是context中StandardWrapper。所以初始化的时候就是通过调用Servlet的init方法,同时把包装了StandarWrapper对象的StandarWrapperFacade作为ServletConfig传给Servlet。
    Servlet从web.xml被解析到初始化。ServletConfig 和 ServletContext的区别ServletConfig:从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet有效,一个servlet的ServletConfig对象不能被另一个servlet访问。

Servlet体系结构

  • 如果说javaweb规范,概况来讲肯定离不开 servlet规范。而servlet规范主要有这3个类ServletConfig、ServletRequest、ServletResponse。ServletConfig在servlet初始化的过程中就传给了servlet了,而ServletRequest和ServletResponse在servlet运行中我很清楚的知道他们的用法。这个Servletconfig对象和Servlet采用典型的“握手型的交互”根据交互场景来组装数据。而实际上servletconfig通过其门面设计模式的servletcontext类给servlet引用,通过servletcontext 可以获得context容器的相关信息如路径 和最小版本。servletRequest和servletresponse又通过web容器封装成了 httpservletRequest和httpservletresponse对象

Servlet如何工作

  • 先看一个典型的访问路径 http://localhost:80/test ,HTTP协议 +host名+port端口+url ,其中HTTP和host名用于服务器和客户机之间建立TCP/IP连接,而后面的url就是确立这个客户机浏览器将访问服务器web容器里面哪个servlet的。服务器的web容器中有一个mapper专门管理这种url<->servlet的映射关系!

  • 然后这个请求URL进入到这个servlet容器中之后,就会调用相应的的service方法,通常我们不是直接去实现javax.servlet.servlet类,而是实现简单点的httpservlet或者genericServlet类,然后选择性覆盖相应方法去实现我们的功能。
  • 然后再现在的MVC框架中,对于所有请求的处理的基本原理就是将它们都映射到一个Servlet,然后再去实现其service方法,这个方法也就是MVC的入口。
  • 最后当servlet从web容器中移除后,这个servlet的生命周期也就相应的结束了由容器调用相应的destroy方法。

Servlet中的Listener

  • 在整个tomcat容器的设计中,其实很多容器诸如此类,listener使用的非常广泛,它是基于观察者模式而设计的。类图如下

Filter如何工作

  • 其实在web.xml 中,filter也是一个常用的配置项,与servlet对象相比 ,除了有request和response对象,它还有一个filterchain对象,类图如下。
  • 在tomcat容器中,FilterConifg 和FilterChain的实现类分别是ApplicationFilterConfig和ApplicationFilterChain,而Filter接口由用户自己去实现,是这3个接口与Servlet中的类似,只不过ApplicationFilterChain可以把这些Filter串联起来,组成一个Filter链,这点和Jetty的Handler链在设计上有异曲同工之妙。
  • 再看下如图的Filter类三个接口方法:
  • Filter的一个比喻,如果有2条往返的加工流水线,我们可把这2条流水线看做 web交互中的request和response ,即请求和响应,在这2条流水线的远转图中,Filter就好比一个流水线工人对流动的产品进行处理,可以在某个工位存放或者取出或者拦截一些数据。

Servlet中的url-pattern

  • 前面我们说过 Servlet 和 URL之间的对象关系 ,在tomcat有一个Mapper类实现请求访问时去对应哪个Servlet。而Filter的url匹配是在创建 ApplicationFilterChain时,对匹配的Url相应的Filter放入到ApplicationFilterChain对象的Filters数组中,然后FilterChain依次调用这些Filter。
  • Url在web.xml被加载时会校验这些url-pattern是否合法,这个检查是在StandardContext的ValidateURLPattern中进行,吐过不通过就会报这个java.lang.IllegalArgumentException:Invalid ...
  • 解析规则如下

Java Web 深入分析(8) Servlet工作原理解析的更多相关文章

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

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

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

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

  3. Servlet 工作原理解析

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

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

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

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

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

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

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

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

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

  8. Servlet工作原理解析(tomcat7、嵌入式服务器)

      目录 Servlet 容器Tomcat Servlet 容器的启动过程 Web 应用的初始化工作 Servlet 体系结构 创建 Servlet 对象(如何被加载) 初始化 Servlet(如何被 ...

  9. Servlet工作原理解析

    Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 S ...

随机推荐

  1. Qt代码配色VS2015风格

    通过本文的方法可以将VS2015的深色主题界面应用到Qt上,对于喜欢VS代码风格配色的人应该会比较有用 效果图:  1. 设置IDE主题 为了配合vs深色的代码编辑背景,将Qt的主题也换成深色版本 2 ...

  2. OpenSL ES: OpenSL ES 简介

    1. OpenSL ES 是什么 OpenSL ES (Open Sound Library for Embedded Systems)是无授权费.跨平台.针对嵌入式系统精心优化的硬件音频加速API. ...

  3. 论文翻译 DOTA:A Large-scale Dataset for Object Detection in Aerial Images

      简介:武大遥感国重实验室-夏桂松和华科电信学院-白翔等合作做的一个航拍图像数据集 摘要: 目标检测是计算机视觉领域一个重要且有挑战性的问题.虽然过去的十几年中目标检测在自然场景已经有了较重要的成就 ...

  4. 123457123456#0#-----com.threeapp.magicImageShow01----儿童宝宝魔法画笔

    com.threeapp.magicImageShow01----儿童宝宝魔法画笔

  5. hadoop第一次面到hr(品友互动)

    第一次“北漂” 准备了一个星期的Hadoop,把林子雨老师的视频刷了一遍,翻出了好久没用的小本本,密密麻麻的记了一大堆.刷了网上能找到的Hadoop的所有面试题(这个真的很重要) 然后,启程,北上,还 ...

  6. PostgreSQL学习笔记——内置函数

    算术函数(数值计算) +(加).-(减).*(乘)./(除) ABS函数--绝对值: ABS(数值) MOD--求余: MOD(被除数,除数) ROUND--四舍五入: ROUND(对象数值,保留小数 ...

  7. win10 1803 频繁死机,卡死不动

    摘自微软官网的解决办法,我的目测好像是可以了. 小娜搜索框输入“PowerShell”选择在管理员命令提示符下键入以下命令: Dism /Online /Cleanup-Image /ScanHeal ...

  8. 最新 百度java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.百度等10家互联网公司的校招Offer,因为某些自身原因最终选择了百度.6.7月主要是做系统复习.项目复盘.LeetCode ...

  9. Quartz.Net入门 - Net作业调度

    背景 很多时候,项目需要在不同时刻,执行一个或很多个不同的作业. Windows执行计划这时并不能很好的满足需求了,迫切需要一个更为强大,方便管理,集群部署的作业调度框架. 介绍 Quartz一个开源 ...

  10. linux系统下,在用户空间应用程序中模拟发送系统键盘事件

    Linux 有自己的 input 子系统,可以统一管理鼠标和键盘事件. 如果想模拟键盘事件,但是系统没有键盘设备该如何是好? 基于输入子系统实现的 input 可以方便的在用户空间模拟鼠标和键盘事件. ...