JSP 生命周期

  理解JSP底层功能的关键就是去理解它们所遵守的生命周期。

  JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成servlet。

  以下是JSP生命周期中所走过的几个阶段:

  编译阶段:

  servlet容器编译servlet源文件,生成servlet类

  初始化阶段:

  加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法

  执行阶段:

  调用与JSP对应的servlet实例的服务方法

  销毁阶段:

  调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例

  很明显,JSP生命周期的四个主要阶段和servlet生命周期非常相似,下面给出图示:

  JSP编译

  当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。

  编译的过程包括三个步骤:

  解析JSP文件。

  将JSP文件转为servlet。

  编译servlet。

  JSP初始化

  容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了,就像下面这样:

  public void jspInit(){

  // 初始化代码

  }

  一般来讲程序只初始化一次,servlet也是如此。通常情况下您可以在jspInit()方法中初始化数据库连接、打开文件和创建查询表。

  JSP执行

  这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。

  当JSP网页完成初始化后,JSP引擎将会调用_jspService()方法。

  _jspService()方法需要一个HttpServletRequest对象和一个HttpServletResponse对象作为它的参数,就像下面这样:

  void _jspService(HttpServletRequest request,

  HttpServletResponse response)

  {

  // 服务端处理代码

  }

  _jspService()方法在每个request中被调用一次并且负责产生与之相对应的response,并且它还负责产生所有7个HTTP方法的回应,比如GET、POST、DELETE等等。

  JSP清理

  JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。

  jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。

  jspDestroy()方法的格式如下:

  public void jspDestroy()

  {

  // 清理代码

  }

  实例

  JSP生命周期代码实例如下所示:

  <%@ page contentType="text/html; charset=GB2312" %>

  

  <%!

  private int initVar=0;

  private int serviceVar=0;

  private int destroyVar=0;

  %>

  <%!

  public void jspInit(){

  initVar++;

  System.out.println("jspInit(): JSP被初始化了"+initVar+"次");

  }

  public void jspDestroy(){

  destroyVar++;

  System.out.println("jspDestroy(): JSP被销毁了"+destroyVar+"次");

  }

  %>

  <%

  serviceVar++;

  System.out.println("_jspService(): JSP共响应了"+serviceVar+"次请求");

  String content1="初始化次数 : "+initVar;

  String content2="响应客户请求次数 : "+serviceVar;

  String content3="销毁次数 : "+destroyVar;

  %>

  

<%=content1 %>

  

<%=content2 %>

  

<%=content3 %>

  

  (编辑:雷林鹏 来源:网络)

JSP 生命周期的更多相关文章

  1. 关于JSP生命周期的叙述,下列哪些为真?

    关于JSP生命周期的叙述,下列哪些为真? A.JSP会先解释成Servlet源文件,然后编译成Servlet类文件 B.每当用户端运行JSP时,jspInit()方法都会运行一次 C.每当用户端运行J ...

  2. JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期

    JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期. JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成ser ...

  3. jsp学习与提高(一)——JSP生命周期、三大指令及动作

    1.jsp定义: 1.1以java语言为脚本语言,运行在服务端的程序: 1.2处理客户请求,生成页面 1.3其本质是个sevlet会生成.java文件编译后再生成.class文件 2.jsp生命周期( ...

  4. JSP-Runoob:JSP 生命周期

    ylbtech-JSP-Runoob:JSP 生命周期 1.返回顶部 1. JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期. JSP生命周期就是从创建到销毁的整个过程,类似于 ...

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

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

  6. JSP生命周期

    1.编译阶段:servlet容器编译servlet源文件,生成servlet类.观察一个JSP页面在第一次访问的时候会由servlet容器会生成.java文件,最终编译成.class字节码文件,如果打 ...

  7. jsp生命周期和工作原理

    jsp的工作原理jsp是一种Servlet,但是与HttpServlet的工作方式不太一样.httpservlet是先由源代码编译为class文件后部署到服务器下的,先编译后部署.而jsp则是先部署后 ...

  8. Servlet和JSP生命周期概述

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

  9. JSP Servlet WEB生命周期

    [转载] JavaWeb的生命周期是由Servlet容器来控制的总的来说分为三个阶段1.启动阶段:加载web应用相关数据,创建ServletContext对象,对Filter和servlet进行初始化 ...

随机推荐

  1. 02.MyBatis配置文件详解

        MyBatis入参考文档:http://mybatis.org/mybatis-3/zh/  1.properties 属性 1.在MyBatis配置文件中引用属性文件     MyBatis ...

  2. Drools规则引擎

    一.简介 Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules ...

  3. Typed Arrays in javascripts

    Typed Arrays(类型数组)这个概念,可能对很多人来说非常陌生,那么它是什么,又有什么用途呢? 之前的问题 Web应用程序变得越来越强大,例如新增了音视频处理.WebSocket等多个功能特性 ...

  4. Python开发【Django】:重构Admin

    自定义KingAdmin 通过admin样式自己做KingAdmin 提前需知道的model操作 # 获取app名 >>> models.Customer._meta.app_lab ...

  5. JSON数组成员反序列化

    场景: 构想客户端能够传递如下格式JSON字符串到服务端: {"KeyValueSetList":[{"SN":"RQ1001"," ...

  6. android Dialog官方demo

    1.普通的Dialog AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("今天 ...

  7. STL学习笔记--各种容器的运用时机

    如何选择最佳的容器类别? 缺省情况下应该使用vector.vector的内部结构简单,并允许随机存取,所以数据的存取十分方便灵活,数据的处理也够快. 如果经常要在序列的头部和尾部安插和移除元素,应采用 ...

  8. java猫和猫的名字

    这篇文章之所以叫猫和猫的名字,是因为是以猫为案例来讲的 主要的内容就是java构造函数和参数的传递 class Animal { public static String name; Animal(S ...

  9. 5.7 Components — Sending Actions From Components to Your Application

    一.概述 1. 当一个组件在模板中被使用时,它具有发送action到这个模板的controller和routes的能力.当重大事件发生的时候,这些允许组件通知application,比如点击组件一个特 ...

  10. 154. Find Minimum in Rotated Sorted Array II(剑指offer)

    Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed? Would ...