JSP的生命周期
来源:互联网 发布:win10如何优化虚拟机 编辑:程序博客网 时间:2024/05/22 12:09
1、编译阶段:
servlet容器编译servlet源文件,生成servlet类。
观察一个JSP页面在第一次访问的时候会由servlet容器会生成.java文件,最终编译成.class字节码文件,如果打开.java文件查看,就是一个servlet。
2、初始化阶段:
加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法。
3、执行阶段:
调用与JSP对应的servlet实例的服务方法。
4、销毁阶段:
调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例。
如下图所示的是servlet的生命周期和JSP非常的相似:
下面来测试一下JSP实现这些生命周期,在left.jsp页面如下写法:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>life.jsp</title></head><body><%! 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;%><p><%=content1 %></p><p><%=content2 %></p><p><%=content3 %></p></body></html>
效果如下:
然后打开工作空间的生成的java文件:“\workspace_web_test\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\webtest1\org\apache\jsp\life_jsp.java”
会发现如下结构:
/* * Generated by the Jasper component of Apache Tomcat * Version: Apache Tomcat/7.0.68 * Generated at: 2016-12-14 13:18:33 UTC * Note: The last modified time of this file was set to * the last modified time of the source file after * generation to assist with modification tracking. */package org.apache.jsp;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;public final class life_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { 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+"次"); } private static final javax.servlet.jsp.JspFactory _jspxFactory = javax.servlet.jsp.JspFactory.getDefaultFactory(); private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants; private volatile javax.el.ExpressionFactory _el_expressionfactory; private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager; public java.util.Map<java.lang.String,java.lang.Long> getDependants() { return _jspx_dependants; } public javax.el.ExpressionFactory _jsp_getExpressionFactory() { if (_el_expressionfactory == null) { synchronized (this) { if (_el_expressionfactory == null) { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); } } } return _el_expressionfactory; } public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() { if (_jsp_instancemanager == null) { synchronized (this) { if (_jsp_instancemanager == null) { _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig()); } } } return _jsp_instancemanager; } public void _jspInit() { } public void _jspDestroy() { } public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null; final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out = null; final java.lang.Object page = this; javax.servlet.jsp.JspWriter _jspx_out = null; javax.servlet.jsp.PageContext _jspx_page_context = null; try { response.setContentType("text/html; charset=UTF-8"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("\r\n"); out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write("<title>life.jsp</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write("\r\n"); out.write("\r\n"); out.write(" \r\n"); out.write("\r\n"); out.write("\r\n"); serviceVar++; System.out.println("_jspService(): JSP共响应了"+serviceVar+"次请求"); String content1="初始化次数 : "+initVar; String content2="响应客户请求次数 : "+serviceVar; String content3="销毁次数 : "+destroyVar; out.write("\r\n"); out.write("<p>"); out.print(content1 ); out.write("</p>\r\n"); out.write("<p>"); out.print(content2 ); out.write("</p>\r\n"); out.write("<p>"); out.print(content3 ); out.write("</p>\r\n"); out.write("\r\n"); out.write("</body>\r\n"); out.write("</html>"); } catch (java.lang.Throwable t) { if (!(t instanceof javax.servlet.jsp.SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { if (response.isCommitted()) { out.flush(); } else { out.clearBuffer(); } } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else throw new ServletException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } }}
参考:
http://www.runoob.com/jsp/jsp-life-cycle.html
阅读全文
0 0
- JSP-JSP的生命周期
- JSP/Servlet的生命周期
- JSP/Servlet的生命周期
- JSP/Servlet的生命周期
- JSP的生命周期
- JSP生命周期的实例
- JSP页面的生命周期
- JSP的生命周期
- JSP/Servlet的生命周期
- JSP页面的生命周期
- JSP的生命周期
- JSP的生命周期
- JSP的生命周期
- JSP的生命周期
- JSP中JavaBean的生命周期
- Servlet和JSP的生命周期
- Servlet和JSP的生命周期
- JSP学习 --- servlet的生命周期
- rsync命令排除文件和文件夹exclude
- 最新App、手机网站尺寸规范—移动设备界面UI设计尺寸规范
- quartz 简单使用
- MUI和evalJS
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
- JSP的生命周期
- 为什么有些人说转行穷三代???我看未必!!!!
- day_13_类模板(参数、数组、特化)
- 两个栈实现一个队列,并实现队列入队、出队、取队头、取队尾相关操作
- 8月19号CCPC——Graph Of Zhuper(未解答)
- Java解决汉诺塔问题
- scrapy-redis的使用(基于scrapy的改装)
- svn的merge使用例子
- TextureView的onSurfaceTextureDestroyed方法在点击下一个界面不回调问题