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. nginx的HA集群及配置

    一.服务器环境 master服务器: ip:192.168.11.155 系统环境:CentOS release 6.5 (Final) 内核版本:2.6.32-431.el6.x86_64 防火墙和 ...

  2. Android——计算器

    layout文件: <?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:andr ...

  3. 工厂方法模式(FACTORY METHOD)

    核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦.复用和方便后期维护拓展的目的. 工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接 ...

  4. C++仿函数和typename的用法

    1.仿函数的定义是很简单的,就是一个重载了括号()运算符的类,也被称为函数对象. 主要是用于个性化扩展算法对象.stl中实现了好多算法,每个算法都可以完成日常的大部分工作,设计者还允许你在这些强大的算 ...

  5. Driver development

    Windows Driver Kit (WDK) https://msdn.microsoft.com/en-us/library/windows/hardware/ff557573(v=vs.85) ...

  6. 网络-CIDR地址分类介绍

    CIDR(Classless Inter Domain Routing)改进了传统的IPv4地址分类.传统的IP分类将IP地址直接对应为默认的分类,从而将Internet分割为网络.CIDR在路由表中 ...

  7. 靠边伸缩菜单的做法(类似QQ,碰到就会伸出来)

    这段脚本主要实现一个group的伸缩功能,group里面的内容也就是菜单的内容可以自由添加. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...

  8. C#中锁定Word内容,样把人家的锁定内容破解了

    原文地址:http://www.cnblogs.com/name-lh/archive/2007/04/29/732620.html     教您怎样在C#中锁定Word内容,还教您怎样把人家的锁定内 ...

  9. svg如何用marker 定义一个黑色的小圆点

    <defs> <marker id="markerStartArrow" viewBox="0 0 30 30" refX="10& ...

  10. 003. 连接access数据库代码

    1. 前端aspx中的代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="De ...