
【44】
一、JSP的运行原理
(1)WEB容器JSP页面的访问请求时,它将把该访问请求交给JSP引擎去处理。Tomcat中的JSP引擎就是一个Servlet程序,它负责解释和执行JSP页面。
(2)每个JSP页面在第一次被访问时,JSP引擎先将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。
(3)Tomcat 5把为JSP页面创建的Servlet源文件和class类文件放置在“apache-tomcat-5.5.26workCatalinalocalhost<应用程序名>”目录中,Tomcat将JSP页面翻译成的Servlet的包名为org.apache.jsp(即:apache-tomcat-5.5.26workCatalinalocalhostorgapachejsp文件下)

例子:
HelloJSP.jsp:(文件目录:D:apache-tomcat-5.5.26webappstest_jspHelloJSP.jsp)
<span style="font-family:KaiTi_GB2312;font-size:18px;">
<%@pagelanguage="java"import="java.util.*"pageEncoding="gb2312"%>
<html>
<head>
<title>简单JSP页面示例</title>
</head>
<body>
这是一个简单的 JSP页面示例——HelloJSP <br>
</body>
</html></span>HelloJSP.jsp页面被请求时,Web服务器中JSP编译器会编译生成对应的Java文件,如下:
HelloJSP_jsp.java:(文件目录:D:apache-tomcat-5.5.26workCatalinalocalhosttest_jsporgapachejspHelloJSP_jsp.java)
<span style="font-family:KaiTi_GB2312;font-size:18px;">packageorg.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import java.util.*;
public final class HelloJSP_jsp extendsorg.apache.jasper.runtime.HttpJspBase
implementsorg.apache.jasper.runtime.JspSourceDependent {
private static java.util.List _jspx_dependants;
public Object getDependants() {
return _jspx_dependants;
}
public void _jspService(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("rn");
out.write("<html>rn");
out.write("t<head>rn");
out.write(" t<title>简单JSP页面示例</title>rn");
out.write("t</head>rn");
out.write("<body>rn");
out.write("t这是一个简单的JSP页面示例――HelloJSP <br>rn");
out.write("t</body>rn");
out.write("</html>rn");
} 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);
}
}
}</span>上面这段代码就是HelloJSP.jsp编译生成的Java代码,它的路径(我的电脑)为:D:apache-tomcat-5.5.26workCatalinalocalhosttest_jsporgapachejsp中(其中:test_jsp为我的项目名称)。在这个目录下会有两个对应的文件,一个是class文件一个是java
文件如下:

二、JSP的执行过程
JSP的执行过程主要可以分为以下几点:
1)客户端发出请求。
2)Web容器将JSP转译成Servlet源代码。
3)Web容器将产生的源代码进行编译。
4)Web容器加载编译后的代码并执行。
5)把执行结果响应至客户端。

三、总结
JSP执行过程:
1、首先,客户端发出请求(request ),请求访问JSP网页
2、接着,JSP Container将要访问的.JSP文件 转译成Servlet的源代码(.java文件)
3、然后,将产生的Servlet的源代码(.java文件)经过编译,生成.class文件,并加载到内存执行
4、最后把结果响应(response )给客户端
执行JSP网页文件时,需要经过两个时期:转译时期(TranslationTime)和请求时期(RequestTime)。
- 转译时期:JSP转译成Servlet类(.class文件)。
- 请求时期:Servlet类(.class文件)执行后,响应结果至客户端。
转译期间主要做了两件事情:
(1)将JSP网页转译为Servlet源代码(.java),此段称为转译时期(Translation time);
(2)将Servlet源代码(.java)编译成Servlet类(.class),此阶段称为编译时期(Compilation time)。
JSP运行原理与执行过程解析
本文详细介绍了JSP的运行原理,包括当WEB容器接收到JSP页面请求时如何将其转换为Servlet源程序并编译执行。同时阐述了JSP的执行过程,从客户端请求到响应的整个流程,并总结了JSP的本质——其实是一个Servlet。
1427

被折叠的 条评论
为什么被折叠?



