概述

Servlet技术是对webserver的扩展,要理解这个,可能先了解一下什么是Webserver以及它的功能,特别是它的不足是非常有帮助的,可參考:点击打开链接。另外。Servlet也是一个用java语言的Servlet
API编写的特殊的java类。它执行在Servlet容器中。它的功能是分析请求,处理请求,构造响应消息,它本来就处于web服务的线上这也非常easy理解。概念上就这么多了。

Servlet容器

容器负责管理Servlet类,其内容包含:匹配Servlet,运行Servlet生命周期等。容器和Servlet的关系呢就像饭店和厨师。厨师能够分为什么湘、闽、川、中式糕点等。这就相当于一个一个的Servlet类,顾客通过服务员(Request)点餐,然后饭店再依据点餐需求去找到相应的厨师(Servlet)来做菜。然后厨师做好了菜通过传菜生(Response)交给顾客。容器大概也就是相当于饭店做的内容了,
定位厨师。管理厨师。以下看一下Tomcat容器的结构,如图(图片作者许令波)。

生命周期

Servlet的生命周期须要经过创建、初始化、运行、销毁四个阶段。这四个阶段都是有Servlet容器来管理的。整个运行的流程例如以下图所看到的。

这里由于Servlet是单实例多线程的,所以针对请求先要检查实例是否存在。以下具体分析一下生命周期的各个阶段。

创建:关于Servlet实例何时创建有两种情况,在默认情况下Servlet实例是在第一个请求到来的时候创建。或者是通过配置文件来设置它在容器启动时就实例化。仅仅须要在web.XML文件里的<Servlet></Servlet>之间加入例如以下代码:<loadon-startup>1</loadon-startup> 。这里的的值表示的是Servlet实例化的顺序。

初始化: 一旦Servlet实例被创建,Webserver会自己主动调用init(ServletConfig config)方法来初始化该Servlet。当中方法參数config中包括了Servlet的配置信息。比方初始化參数,该对象由server创建。

<span style="font-size:18px;">        <span style="font-family:FangSong_GB2312;"><servlet>
<servlet-name>ClientIdValidateServlet</servlet-name>
<servlet-class>com.bjpowernode.drp.util.servlet.ClientIdValidateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ClientIdValidateServlet</servlet-name>
<url-pattern>/servlet/ClientIdValidateServlet</url-pattern>
</servlet-mapping></span></span></span>

运行( Service):在服务阶段Webserver会调用该实例的service(ServletRequest
request,ServletResponse response)方法。request对象和response对象有server创建并传给Servlet实例。request对象封装了client发往server端的信息。response对象封装了server发往client的信息。

销毁:Webserver必须保证调用destroy()方法之前。让全部正在执行在该实例的service()方法中的线程退出或者等待这些线程一段时间。

一旦destroy()方法已经执行。Webserver将拒绝全部的新到来的对该Servlet实例的请求,destroy()方法退出,该Servlet实例即能够被垃圾回收。

总结:Servlet是Java web的核心,对于理解它的工作原理和生命周期是比較重要的。

尽管是看了视频。查了资料。花了近一天的时间,可是感受上还不是特别清晰。

关于怎样定位到Servlet class文件,关于其和容器以及容器和Webserver,应用程序server之间的关系的问题。

都还比較的乱!

最新文章

  1. poj 2559 Largest Rectangle in a Histogram - 单调栈
  2. java的poi技术读取Excel[2003-2007,2010]
  3. 迭代器和for-of循环 顺便带一下Es5中的.map遍历
  4. Java IO流题库
  5. asp.net.mvc4在vs2010怎样创建mvc项目及它的结构
  6. Effective Java 49 Prefer primitive types to boxed primitives
  7. Linux 网络编程五(UDP协议)
  8. Ecplise软件Devices看到两个相同设备问题
  9. MATLAB——axis
  10. How to Determine the Version of Oracle XML Publisher for Oracle E-Business Suite 11i and Release 12 (Doc ID 362496.1)
  11. APUE学习之---------------进程
  12. var dataObj=eval(&quot;(&quot;+data+&quot;)&quot;);//转换为json对象(解决在ajax返回json格式数据的时候明明正确的获取了返回值但是却就是进不去success方法的问题。格式错误)
  13. WiFi其他方法和WiFi事件响
  14. 总是Eqw
  15. 记一款bug管理系统(bugdone.cn)的开发过程(3) - 永久免费化
  16. 青蛙的约会---poj1061(扩展欧几里德)
  17. EntityFramework 基本模式和Code-First的简单使用
  18. hdu 4813(2013长春现场赛A题)
  19. Mac: iTerm2使用
  20. 使用Amoeba实现mysql读写分离机制

热门文章

  1. mybatis使用中类属性名和数据库表字段名问题
  2. 1102 A-B数对
  3. Django--知识补充
  4. WordPress百度熊掌号页面改造(纯代码实现)
  5. GDB 学习
  6. redis的安装和使用【2】redis的java操作
  7. SDK_列表控件的使用
  8. Linux文件排序和FASTA文件操作
  9. acm学习指引
  10. js的title提示