首页 [@] JSP的运行原理

[@] JSP的运行原理

举报
开通vip

[@] JSP的运行原理[@] JSP的运行原理 Jsp运行原理 JSP的运行原理如下图所示: 当客户端向一个JSP页面发出请求时,Web Container将JSP转化成Servlet的源代码(只在第一次请求时),然后编译转化后的Servlet并加载到内存中执行,执行的结果Response到客户端。JSP只在第一次执行的时候会转化为Servlet,以后每次执行Web容器都是直接执行编译后的Servlet,所以JSP和Servlet只是在第一次执行的时候不一样,JSP慢一点,以后的执行都是相同的。 下面看看JSP文件在各个阶段的...

[@] JSP的运行原理
[@] JSP的运行原理 Jsp运行原理 JSP的运行原理如下图所示: 当客户端向一个JSP页面发出请求时,Web Container将JSP转化成Servlet的源代码(只在第一次请求时),然后编译转化后的Servlet并加载到内存中执行,执行的结果Response到客户端。JSP只在第一次执行的时候会转化为Servlet,以后每次执行Web容器都是直接执行编译后的Servlet,所以JSP和Servlet只是在第一次执行的时候不一样,JSP慢一点,以后的执行都是相同的。 下面看看JSP文件在各个阶段的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 。 源文件:success.jsp <%@ page contentType="text/html;charset=gb2312"%> 登录成功

${sessionScope.userid}您好,欢迎登录网上 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 店~

与Servlet的运行原理不同的是,JSP需要先转换成Java文件。 success.jsp文件被转换成的Java文件的内容如下(位于Tomcat安装目录下的work\Catalina\localhost\ch2\org\apache\jsp文件夹中,ch2是我的应用的名字): package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class success_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private static java.util.Vector _jspx_dependants; public java.util.List getDependants() { return _jspx_dependants; } public void (HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html;charset=gb2312"); 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("\r\n"); out.write(" \r\n"); out.write(" 登录成功\r\n"); out.write(" \r\n"); out.write(" \r\n"); out.write("

"); out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${sessionScope.userid} ", java.lang.String.class, (PageContext)_jspx_page_context, null, false)); out.write("您好,欢迎登录网上书店~

\r\n"); out.write(" \r\n"); out.write("\r\n"); } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) out.clearBuffer(); if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); } } finally { if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context); } } } 从JSP被转换成的Java文件可以看出如下几点: 1) JSP文件中的内容基本都被包含在了_jspService方法中,实际上页面执行的过程就是 这个方法执行的过程; 2) 页面中显示给用户的HTML信息都被转换成了out.println("XXXX")的形式; 3) 在_jspService方法中有两个参数request和response, 4) 在方法中生成了如下几个对象: PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; 这就是传说中的内置对象(预定义对象)。 返回给客户端的代码(通过在客户端浏览器可以查看源文件): 登录成功

zhangsan您好,欢迎登录网上书店~

在此文件中看不到任何JSP的代码,而是纯HTML代码。与源文件不同的地方: 【1】源文件中的page指令没有了 【2】源文件中的${sessionScope.userid}没有了,而使用zhangsan代替了原来的 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式。 浏览器把这段HTML代码解析成界面显示给用户。 这就是从你编写的JSP文件到客户端看到的结果的转换过程。 Jsp运行原理 在一个JSP文件第一次被请求时,JSP引擎把该JSP文件转换成为一个Servlet。而这个引擎本身也是一个Servlet。JSP的运行过程如下所示: (1)JSP引擎先把该JSP文件转换成一个Java源文件(Servlet),在转换时如果发现JSP文件有任何语法错误,转换过程将中断,并向服务端和客户端输出出错信息。 (2)如果转换成功,JSP引擎用javac把该Java源文件编译成相应的class文件。 (3)创建一个该Servlet(JSP页面的转换结果)的实例,该Servlet的jspInit()方法被执行,jspInit()方法在Servlet的生命周期中只被执行一次。 (4)jspService()方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行可以大大降低对系统的资源需求,提高系统的并发量及响应时间。但不过也应该注意多线程的编程限制,由于该Servlet始终驻于内存,所以响应是非常快的。 (5)如果.jsp文件被修改了,服务器将根据设置决定是否对该文件重新编译,如果需要重 新编译,则将编译结果取代内存中的Servlet,并继续上述处理过程。 (6)虽然JSP效率很高,但在第一次调用时由于需要转换和编译而有一些轻微的延 迟。此外,在任何时候如果由于系统资源不足的原因,JSP引擎将以某种不确定的方式将Servlet从内存中移去。当这种情况发生时jspDestroy()方法首先被调用。 (7)然后Servlet实例便被标记加入“垃圾收集”处理。可在jspInit()中进行一些初始化工作,如建立与数据库的连接,或建立网络连接,从配置文件中取一些参数等,在jspDestory()中释放相应的资源。 Java Servlet和JSP教程 (这个网站很好)
本文档为【[@] JSP的运行原理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_686908
暂无简介~
格式:doc
大小:54KB
软件:Word
页数:0
分类:
上传时间:2018-02-21
浏览量:10