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. timus 1136 Parliament(e)

    Parliament Time limit: 1.0 secondMemory limit: 64 MB A new parliament is elected in the state of MMM ...

  2. timus 1106 Two Teams(二部图)

    Two Teams Time limit: 1.0 secondMemory limit: 64 MB The group of people consists of N members. Every ...

  3. poj3687 拓扑序

    题意:有编号 1-n 的球,每个球的质量不同,质量从 1 到 n 不等,给出一系列比较,分别是两个编号的球的大小关系,求一个序列满足上述关系,并且从编号 1 开始依次选择可选的最小质量,输出每个球的质 ...

  4. kuangbin_ShortPath K (POJ 3159)

    很简单的模板题 放在K那么后的位置的原因大概是 光看题意并不是很容易想到是用最短路解吧 奈何kuangbin分在了最短路专题 一发水过 #include <iostream> #inclu ...

  5. springMvc源码学习之:spirngMvc的参数注入的问题

    转载:https://my.oschina.net/lichhao/blog/172562 概述 在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成 ...

  6. 《FreeSWITCH: VoIP实战》:SIP 模块 - mod_sofia

    SIP 模块是 FreeSWITCH 的主要模块,所以,值得拿出专门一章来讲解. 在前几章时里,你肯定见过几次 sofia 这个词,只是或许还不知道是什么意思.是这样的,Sofia-SIP 是由诺基亚 ...

  7. KMP字符串模式匹配学习笔记

    KMP算法实验 1.编程计算模式串(子串)的next值.2.利用KMP算法在主串中找到模式串的位置. 参考代码:---------int getNexlVal( char * s,  int j)// ...

  8. NGUI Font

    ---------------------------------------------------------------------------------------------------- ...

  9. 解决方法:loadrunner 场景下执行webservice脚本是---报错10492 Error: Exception was raised when calling per-process-init function in extens

    在vug下执行时,脚本无异常,但是在controller下执行时报下面错误,网上查了下,解决方法千奇百怪,但无一可行. 分析了下错误,似乎是初始化进程有关.想到rts中的设置习惯时以线程方式执行. 遂 ...

  10. easyUI之Combo

    Combo组件为自定义下拉列表组件,无class的加载方式,主要是通过jquery的方式.它依赖于validatebox,可以用它的很多属性.例如: 前台: <div id="box& ...