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. Sql Server_笔记

    1.随机取出10条数据:select top 10 * from tablename order by newid()

  2. 选数 2002年NOIP全国联赛普及组

    题目描述 Description 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整 ...

  3. OOP作业

    1,定义一个水果类(fruit),水果类中的有[属性]:颜色(color).价格(price).重量(weigth),再定义一个<测试类>,创建一个苹果(apple)的对象, 颜色是&qu ...

  4. Jquery实现图片的预加载与延时加载

    有很多项目经常会需要判断图片加载完成后执行相应的操作,或者需要图片延迟加载,网上虽然已经有很不错的插件,但要为这些效果还得单独加载一个插件的话总感觉有点不舒服,干脆自己写了个方法: 1 2 3 4 5 ...

  5. sed详解

    1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后 ...

  6. SVG中的'defs' and 'use'-可复用的图元定义

    在下一个示例中,我使用了defs中的元素之前,定义了如何去展现图元. <?xml version="1.0" standalone="no"?> & ...

  7. cacti

    http://www.cacti.net/downloads/docs/html/index.html Cacti脚本及模板论坛:http://forums.cacti.net/forum-12.ht ...

  8. linux包之e2fsprogs之chattr命令

    概述 [root@localhost ~]# rpm -qf /usr/bin/chattre2fsprogs-1.41.12-18.el6.x86_64 chattr命令的作用很大,其中一些功能是由 ...

  9. unity, 查看.anim中的动画曲线(和帧)

    在场景里建一个gameObject,添加一个Animation组件,将.anim文件添加到Animation组件的Animations中,然后在Animation组件面板中选中.anim,然后 菜单- ...

  10. MVC2、MVC3、MVC4、MVC5之间的区别 以及Entity Framework 6 Code First using MVC 5官方介绍教程

    现在MVC的技术日趋成熟,面对着不同版本的MVC大家不免有所迷惑 -- 它们之间有什么不同呢?下面我把我搜集的信息汇总一下,以便大家能更好的认识不同版本MVC的功能,也便于自己查阅. View Eng ...