Servlet和传统CGI程序相比的优点:
 
1. 只需要启动一个操作系统进程以及加载一个JVM,大大降低了系统的开销
2. 如果多个请求需要做同样处理的时候,这时只需要加载一个类,这也大大降低了开销
3. 所有动态加载的类可以实现对网络协议以及请求解码的代码共享,大大降低了工作量
4. Servlet能够直接和Web服务器交互,而普通的CGI程序不能,Servlet还能够在各个程序间共享数据,使得数据库连接池之类的功能很容易实现
 
 
JSP: Servlet的模板
JSP是一种实现普通静态HTML和动态HTML混合编码的技术,它是Servlet API的一个扩展。
基本原理:
Web容器处理JSP文件请求需要经过三个阶段
1. 翻译阶段     在这个阶段,编写好的JSP文件首先会被Web容器中的JSP引擎转换成Java源代码,也就是通过Servlet引擎
2. 编译阶段     JSP文件所翻译成的Java源代码会被编译成可执行的字节码
3. 请求阶段     当容器接收了客户端的请求之后,就执行前面已经编译成二进制字节码的JSP文件。处理完请求之后,容器再把生成的页面反馈给客户端进行显示
 
Tips
一旦容器把JSP文件翻译和编译之后,来自客户端的每一个JSP请求就可以重用这个编译好的二进制字节码.如果对JSP进行修改,容器就会及时地探测到这个修改,并进行重翻译和编辑.所以JSP文件在第一次请求时会比较慢,而之后同样JSP文件的请求会非常快
 
 
 Servlet生命周期:
 
CGI编程中,用户每请求一次CGI程序,服务器就会开辟一个单独的进程来处理请求,处理完毕再将这个进程销毁。这样反复开辟与销毁效率低下,占用很多资源。
 
     服务器在启动时(若load-on-startup为1)或第一次请求servlet时初始化一个Servlet对象,然后用这个Servlet对象去处理所有客户端请求。服务器关闭时才销毁这个Servlet对象,这样省去了开辟与销毁Servlet的开销。这种机制也增加了服务器维护Servlet的复杂度。
 
     无论请求多少次Servlet,最后只有一个Servlet实例。多个客户端并发请求Servlet时,服务器会启动多个线程分别执行该Servlet的service()方法。
 
     在Servlet对象的生命周期中,init(ServletConfig conf)方法与destroy()方法均只会被服务器执行一次,而service()在每次客户端请求Servlet时都会被执行。Servlet中有时会用到一些需要初始化与销毁的资源,因此可以把初始化资源的代码放入init()方法内,把销毁该资源的代码放入destroy()方法内,而不需要每次处理请求都要初始化与销毁资源。
     对于Servlet的init(ServletConfig conf)方法,HttpServlet提供了不带参数的替代方法init().HttpServlet加载时会执行这个不带参数的init()方法,因此只需要把代码放置到init()中。
 
在web.xml里的servlet中设置init-param,然后init方法读取初始化参数,可以保证只读取一次,减少doGet方法与doPost方法的使用。
 
 
注解 @PostConstruct 与 注解 @Predestroy
 
这两个注解被用来修饰一个非静态的void()方法,而且这两个方法不能有抛出异常声明。使用注解修饰方法的时候可以写在方法的前面,也可以写在返回类型或者void的前面。
 
被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,被@PostConstruct修饰的方法会在构造函数之后、init方法之前运行。
被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。
 
注释会多多少少地影响服务器的启动速度。服务器启动时,会遍历Web应用WEB-INF/classes下所有的class文件与WEB-INF/lib下的所有jar文件,以检查哪些类使用了注释。如果应用程序中没有使用任何注释,可以在Web.xml中设置<web-app>的metadata-complete属性为true来关掉服务器启动时例行的注解检查。
 
 

Servlet概述及其生命周期的更多相关文章

  1. Servlet和JSP生命周期概述

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt374 Servlet生命周期分为三个阶段: 1,初始化阶段  调用init( ...

  2. servlet反射、生命周期、接口

    什么是Servlet Servlet是JavaWeb的三大组件之一,它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要: l  ...

  3. 面试之jsp、Servlet相关知识——生命周期, 区别等

    1.servlet生命周期 所谓生命周期,指的是servlet容器如何创建servlet实例.分配其资源.调用其方法.并销毁其实例的整个过程. 阶段一: 实例化(就是创建servlet对象,调用构造器 ...

  4. Java Servlet(二):servlet配置及生命周期相关(jdk7+tomcat7+eclipse)

    该篇文章记录了Servlet配置相关用法及Servlet在Servlet容器中生命周期方法. Tomcat是一个Servlet容器: 1.Servlet容器管理了Servlet的整个生命周期,并调用s ...

  5. servlet简介及生命周期

    Servlet 简介 Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上 ...

  6. jsp当做第二个servlet request的生命周期 请求 响应 不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束 request的域消失

    jsp当做第二个servlet  request的生命周期   请求 响应  不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束  request的域消失

  7. java Web servlet简介及其生命周期

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

  8. Java Web学习总结(9)——servlet和Jsp生命周期解读

    一.servlet的工作工程 Servlet是运行在Servlet容器(有时候也叫Servlet引擎,是web服务器和应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的 ...

  9. Servlet配置及生命周期

    1.设置Ecilipse快捷  file new 2.创建Servlet程序 1). 创建一个 Servlet 接口的实现类.              public class HelloServl ...

随机推荐

  1. 笨小猴 2008年NOIP全国联赛提高组

    题目描述 Description 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设m ...

  2. HDU 5957 Query on a graph

    HDU 5957 Query on a graph 2016ACM/ICPC亚洲区沈阳站 题意 \(N(N \le 10^5)\)个点,\(N\)条边的连通图. 有\(M \le 10^5\)操作: ...

  3. UI组件(思维导图)

  4. Linux系统编程@进程管理(二)

    1.创建守护进程(Deamon) 守护进程的概念与作用 后台服务程序 – 系统服务,进程名字往往以’d’结尾,生存周期比较长(系统装入时启动,关闭时候终止.系统装入两种启动方式:1从启动脚本.etc/ ...

  5. C/C++笔试题(很多)

    微软亚洲技术中心的面试题!!! .进程和线程的差别. 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2 ...

  6. Valgrind使用[转]

    简介 调试程序有很多方法,例如向屏幕上打印消息,使用调试器,或者只需仔细考虑程序如何运行,并对问题进行有根有据的猜测. 在修复 bug 之前,首先要确定在源程序中的位置.例如,当一个程序产生崩溃或生成 ...

  7. 11g新特性与12c新特性

    1. 11g新特性概图 管理新特性> 开发新特性> 2. 12c 新特性概图

  8. linux工具之dracut

    这是一个工具类,不是一个后台服务类 centos7.2-minimal就下面三个包 [root@1st-kvm ~]# rpm -qa|grep dracutdracut-config-rescue- ...

  9. DIV的绝对居中

    来源:http://www.cnblogs.com/damonlan/archive/2012/04/28/2473525.html 作者:浪迹天涯 很多时候,我们需要在浏览器中让一个div居中进行显 ...

  10. pouchdb 安装使用

    1. 安装: If you are on a Debian flavor of Linux (Ubuntu, Mint, etc.), you can install CouchDB with: $ ...