zoukankan      html  css  js  c++  java
  • Jsp的生命周期

         今天学习了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>
    

    运行结果: 

         

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

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

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

  • 相关阅读:
    性能测试的概念
    位运算和逻辑与运算
    09年~16年上午题题型分布
    复习建议
    软件评测师下午题笔记
    php 数据库 操作
    mysqli_query($conn, "set names utf8"); //**设置字符集*** 不设置插入数据库就是乱码
    iview admin template 基础模板架子
    iview-admin里面的 axios 给包装了一层数据 libs/axios.js 数据做了一层拦截
    mysql 如果没有密码 就不能远程连接
  • 原文地址:https://www.cnblogs.com/future-liu1121/p/7208392.html
Copyright © 2011-2022 走看看