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. leetcode 111 Minimum Depth of Binary Tree ----- java

    Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...

  2. 國王遊戲(2012年NOIP全国联赛提高组)

    题目描述 Description 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n位大臣排成 ...

  3. android中常见对话框之一AlertDialog

    在Android应用中,有多种对话框:Dialog.AlertDialog.ProgressDialog.时间.日期等对话框. (1)Dialog类,是一切对话框的基类,需要注意的是,Dialog类虽 ...

  4. CentOS搭建LNMP环境

    安装开发工具包: yum groupinstall -y "Development Tools*" 50多个,安装了好久…… 下载Nginx: http://nginx.org/e ...

  5. Linux驱动设计编译错误信息集锦

    1.warning: passing argument 2 of 'request_irq' from incompatible pointer type http://blog.sina.com.c ...

  6. 简单播放系统提示音 android

    //Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); //alert = RingtoneManager.g ...

  7. Eclipse 复制按钮卡死

    复制按钮和按住CTRL链着超链接 有冲突,Eclipse不知道是复制还是链到元素,所以卡死 Eclipse/MyEclipse中使用复制粘贴功能卡的解决办法 最近在MyEclipse中编辑代码时,使用 ...

  8. linux服务之udevd

    http://www.ibm.com/developerworks/cn/linux/l-cn-udev/[root@localhost ~]# uname -r2.6.32-431.el6.x86_ ...

  9. linux概念之进程分析

    http://blog.csdn.net/kevinx_xu/article/details/8178746 /proc 详解 内核线程分析报告 进程层次 [root@109-com1 scripts ...

  10. CentOS6.4系统启动失败故障排查

    转:http://www.centoscn.com/CentosBug/osbug/2014/1028/4011.html 操作系统启动失败如下图报错: 故障现象: 从图中可以看到,操作系统启动的过程 ...