JSP运行原理及运行过程

转自http://blog.csdn.net/hanxuemin12345/article/details/23831645

JSP运行原理及运行过程

1JSP的运行原理

1WEB容器JSP页面的访问请求时,它将把该访问请求交给JSP引擎去处理。Tomcat中的JSP引擎就是一个Servlet程序,它负责解释和执行JSP页面。

2)每个JSP页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着把这个Servlet源程序编译成Servletclass类文件,然后再由WEB容器像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。

3Tomcat 5把为JSP页面创建的Servlet源文件和class类文件放置在“apache-tomcat-5.5.26\work\Catalina\localhost\<应用程序名>\”目录中,TomcatJSP页面翻译成的Servlet的包名为org.apache.jsp(即:apache-tomcat-5.5.26\work\Catalina\localhost\org\apache\jsp\文件下)

例子:

HelloJSP.jsp:(文件目录:D:\apache-tomcat-5.5.26\webapps\test_jsp\HelloJSP.jsp

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><%@pagelanguage="java"import="java.util.*"pageEncoding="gb2312"%>  
  2. <html>  
  3. <head>  
  4.           <title>简单JSP页面示例</title>  
  5. </head>  
  6. <body>  
  7. 这是一个简单的 JSP页面示例——HelloJSP <br>  
  8. </body>  
  9. </html></span>  

HelloJSP.jsp页面被请求时,Web服务器中JSP编译器会编译生成对应的Java文件,如下:

 

HelloJSP_jsp.java:(文件目录:D:\apache-tomcat-5.5.26\work\Catalina\localhost\test_jsp\org\apache\jsp\HelloJSP_jsp.java)

 

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;">packageorg.apache.jsp;  
  2. import javax.servlet.*;  
  3. import javax.servlet.http.*;  
  4. import javax.servlet.jsp.*;  
  5. import java.util.*;  
  6. public final class HelloJSP_jsp extendsorg.apache.jasper.runtime.HttpJspBase  
  7.     implementsorg.apache.jasper.runtime.JspSourceDependent {  
  8. private static java.util.List _jspx_dependants;  
  9. public Object getDependants() {  
  10.     return _jspx_dependants;  
  11.   }  
  12. public void _jspService(HttpServletRequest request,HttpServletResponse response)  
  13.         throws java.io.IOException,ServletException {  
  14. JspFactory _jspxFactory = null;  
  15.     PageContext pageContext =null;  
  16.     HttpSession session =null;  
  17.     ServletContext application =null;  
  18.     ServletConfig config =null;  
  19.     JspWriter out = null;  
  20.     Object page = this;  
  21.     JspWriter _jspx_out =null;  
  22.     PageContext _jspx_page_context =null;  
  23. try {  
  24.       _jspxFactory =JspFactory.getDefaultFactory();  
  25.      response.setContentType("text/html;charset=gb2312");  
  26.       pageContext =_jspxFactory.getPageContext(this, request, response,  
  27.                              null,true8192true);  
  28.       _jspx_page_context =pageContext;  
  29.       application =pageContext.getServletContext();  
  30.       config =pageContext.getServletConfig();  
  31.       session =pageContext.getSession();  
  32.       out = pageContext.getOut();  
  33.       _jspx_out = out;  
  34. out.write("\r\n");  
  35.      out.write("<html>\r\n");  
  36.      out.write("\t<head>\r\n");  
  37.       out.write("   \t<title>简单JSP页面示例</title>\r\n");  
  38.      out.write("\t</head>\r\n");  
  39.      out.write("<body>\r\n");  
  40.       out.write("\t这是一个简单的JSP页面示例――HelloJSP <br>\r\n");  
  41.       out.write("\t</body>\r\n");  
  42.      out.write("</html>\r\n");  
  43.     } catch (Throwable t) {  
  44.       if (!(t instanceof SkipPageException)){  
  45.         out = _jspx_out;  
  46.         if (out != null &&out.getBufferSize() != 0)  
  47.           out.clearBuffer();  
  48.         if (_jspx_page_context != null)_jspx_page_context.handlePageException(t);  
  49.       }  
  50.     } finally {  
  51.       if (_jspxFactory != null)_jspxFactory.releasePageContext(_jspx_page_context);  
  52.     }  
  53.   }  
  54. }</span>  


上面这段代码就是HelloJSP.jsp编译生成的Java代码它的路径(我的电脑)为:D:\apache-tomcat-5.5.26\work\Catalina\localhost\test_jsp\org\apache\jsp(其中:test_jsp为我的项目名称)。在这个目录下有两个对应的文件,一个是class文件一个是java

文件如下:


2JSP的执行过程

JSP的执行过程主要可以分为以下几点:

1)客户端发出请求。

2Web容器将JSP转译成Servlet源代码。

3Web容器将产生的源代码进行编译。

4Web容器加载编译后的代码并执行。

5)把执行结果响应至客户端。


3,总结

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就是一个Servlet。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值