美文网首页
Jsp的生命周期

Jsp的生命周期

作者: hello_mr_future | 来源:发表于2017-12-02 21:57 被阅读0次

今天学习了Jsp的一些基本知识,当看到jsp的生命周期时,稍微查阅了资料,这里大概总结一下。

首先,Jsp的生命周期粗略的划分为3个阶段,分别是初始化阶段、执行阶段、销毁阶段;细分为4个阶段,分别是编译阶段、初始化阶段、执行阶段、销毁阶段。

其中编译阶段是指当第一次执行Jsp时,Jsp引擎需要判断这个Jsp是否需要编译成servlet,如果需要,那么就对其进行编译三部曲(哪三部曲呢?1.先解析Jsp 2.转换成servlet 3.编译servlet),并且每次修改之后,jsp也要进行重新编译;如果不需要直接访问字节码文件。

初始化阶段:是指将jsp对应的servlet进行初始化,调用jspInit()方法进行初始化,创建servlet实例,一般来讲初始化只执行一次,如果你需要执行自定义的初始化任务,那么重写jspInit()方法。当然,一般可以在jspInit()方法中进行数据库的连接、文件的打开创建查询表等

public void jspInit(){
//需要初始化的代码
}

执行阶段:调用与jsp对应的servlet实例的服务方法。这一个阶段是和请求相关的一切交互,直到实例被销毁。当网页完成初始化后,Jsp引擎就会调用_jspService()方法,响应请求,这里需要一个HttpServletRequest对象和一个httpServletResponse对象,其中httpServletRequest对象负责传递请求,携带请求的内容,在此方法中获取请求的内容,然后该方法内部生成回应response由 HttpServletResponse带回。

void _jspService(HttpServlettRequest request , HttpServletResponse response){
    //获取request中的内容,并且形成一个响应response返回
}

销毁阶段:当不再需要该jsp时,可以从容器中去除该jsp生成的servlet的实例,调用的是jspDestroy()方法,在该方法内可以实现数据库的关闭、打开文件的关闭等资源的释放

public void jspDestroy(){
//执行想要做的清理工作,如关闭数据库的连接、文件的关闭等
}

这里我找了菜鸟教程的一段非常典型的代码

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
<%@ page import="java.text.*" %>
<html>
  <head>
    <title>我的个人主页</title>
  </head>
  <body>

  <%!
    private int initVar = 0;
    private int serviceVar = 0;
    private int destroyVar = 0;
  %>

  <%!
    public void jspInit(){
        initVar++;
        System.out.println("初始化了"+initVar+"次");
  }
    public void jspDestroy(){
        destroyVar++;
        System.out.println("销毁了"+destroyVar+"次");
  }
  %>

  <%
    serviceVar++;
    System.out.println("请求了多少次"+serviceVar+"次");

    String content1 = "初始化的次数:"+initVar;
    String content2 = "请求的次数:"+serviceVar;
    String content3 = "销毁的次数:"+destroyVar;

  %>
  <h1>测试jsp的生命周期</h1>
  <p><%=content1%></p>
  <p><%=content2%></p>
  <p><%=content3%></p>
  </body>
</html>

运行结果:

image

当打开服务器,开始运行该程序时,进行了编译阶段、初始化阶段(但是目前我还不知道这个为什么会有请求一次在那里),接着请求一次,请求的次数增加,当关闭服务器或者关闭浏览器的请求窗口时就会出现销毁了1次。

这个程序的内容就是自己定义完成各方法,其中只有变量是显示在浏览器中的,每次的System.out.println()都是打印在服务端的。

总结一下:jsp总共是四个阶段,举个不太恰当的例子,每个阶段就好比一个人的出现,从孕育到死亡,编译阶段就好比我们从胚胎到修成人身一样,编译成servlet,初始化阶段就是出生,出现了一个servlet 实例,接着这个实例长大了,接受知识,接受礼仪的教育,并且时不时对外提供互动,并且他的父母可能对他的生活有一个安排(系统默认的jspService()方法),但是随着他的长大,他渐渐有了自己的想法,有了自己定义的jspService()方法,一直到他寿终正寝不能动,死亡,嗯,这个时候后辈需要对其安葬(火化)完成了servlet实例的销毁,当然后辈也可以对他进行他们认为的销毁(比如连带着用过的东西也进行了火化等等)。

相关文章

  • 五、JSP生命周期

    JSP生命周期 理解jsp底层功能的关键就是去理解他们所遵循的生命周期。 jsp生命周期从创建到销毁的整个...

  • JSP介绍与语法-java之JSP学习第一天(非原创)

    文章大纲 一、JSP 简介二、JSP 生命周期三、JSP 语法四、学习资料下载五、参考文章 一、JSP 简介 1....

  • 【Java】JSP生命周期

    理解JSP底层功能的关键就是去理解它们所遵守的生命周期。JSP生命周期就是从创建到销毁的整个过程,类似于servl...

  • Jsp的生命周期

    今天学习了Jsp的一些基本知识,当看到jsp的生命周期时,稍微查阅了资料,这里大概总结一下。 首先,Jsp的生命周...

  • jsp生命周期

    Jsp只会在客户端第一次发请求的时候被编译,之后的请求不会再编译,同时tomcat能自动检测jsp变更与否,变更则...

  • java

    Java基础部分1、Servlet、jsp生命周期与工作原理 Servlet的生命周期主要分为以下三个阶段:一是容...

  • JSP四大作用域总结

    pageContext域 --- pageScope -- page域 生命周期:访问jsp开始创建,结束时销毁作...

  • JavaWeb的四大作用域

    1.PageContext域:作用范围是整个JSP页面,是四大作用域中最小的一个;生命周期是当对JSP的请求时开始...

  • 【7】进大厂必须掌握的面试题-Java面试-Jsp

    1. jsp的生命周期方法是什么? 方法描述公共无效的jspInit()与servlet的init方法相同,仅被调...

  • Servlet的生命周期和JSP

    servlet生命周期 A构造 默认情况第一次使用的时候,通过单例模式创建一个servlet对象 B init初始...

网友评论

      本文标题:Jsp的生命周期

      本文链接:https://www.haomeiwen.com/subject/tksobxtx.html