servlet生命周期深入理解
2016-05-02 18:26
309 查看
什么是Servlet
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。[b]实现与CGI相同的功能, 但是与CGI相比, 优点是:[/b]
性能明显更好。
Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
Servlet 是独立于平台的,因为它们是用 Java 编写的。
服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。
原因分析: (CGI创建进程, Servlet创建线程)
(1)CGI分析: 当用户浏览器发出一个Http/CGI的请求,或者说调用一个CGI程序的时候,服务器端就要新启用一个进程,调用CGI程序越多,就要消耗系统越多的处理时间。(2)Servlet分析: Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁。
Serlvet架构
下图显示了Servlet在Web应用程序中的位置:Serlvet的生命周期
Servlet的生命周期可以分为四个阶段,Servlet 通过调用 init () 方法进行初始化。
Servlet 调用 service() 方法来处理客户端的请求。
Servlet 通过调用 destroy() 方法终止(结束)。
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
Serlvet的生命周期方法
init()方法
init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化,就像 Applet 的 init 方法一样。public void init() throws ServletException { // 初始化代码... }
service()方法
service服务内容: service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。[b]service方法和doGET, doPOST方法的联系:[/b]
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
doGet()方法
GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 METHOD 的 HTML 表单,它由 doGet() 方法处理。public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet 代码 }
doPost()方法
POST 请求来自于一个特别指定了 METHOD 为 POST 的 HTML 表单,它由 doPost() 方法处理。public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet 代码 }
destroy()方法
destroy() 方法只会被调用一次,**在 Servlet 生命周期结束时被调用。**destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。destroy 方法定义如下所示:
public void destroy() { // 终止化代码... }
架构图:
下图显示了一个典型的 Servlet 生命周期方案。第一个到达服务器的 HTTP 请求被委派到 Servlet 容器。
Servlet 容器在调用 service() 方法之前加载 Servlet。
然后 Servlet 容器处理由多个线程产生的多个请求,每个线程执行一个单一的 Servlet 实例的 service() 方法。
参考: 菜鸟教程http://www.runoob.com/servlet/servlet-life-cycle.html
相关文章推荐
- 安卓SeekBar
- 安卓SeekBar
- Java 多线程(八)——实现简单线程池
- MWC - 飞控套件CRIUS MWC MultiWii SE v2.6组装
- TCP UDP分片
- AS的集成环境安装的故障排查(原创)
- 设计模式
- Bootstrap入门二:响应式页面布局
- hdoj2037
- Android Activity界面切换的各种效果
- 团队以及读后感想
- RelativeLayout,LinerLayout,GridLayout,FrameLayout随记
- SPOJ GSS1 & GSS3&挂了的GSS5
- 大量 python 爬虫源码分享--说说 python 爬虫这件小事
- C++::STL::algorithm
- android中完全退出应用程序的方法
- SPOJ GSS1 & GSS3&挂了的GSS5
- C++第四次上机实验
- 使用javascript和ajax中的不细心!!!
- Qt VS 版本设置debugger