JSP的运行原理

本文详细解析了JSP的工作机制,包括如何通过Tomcat将JSP文件转化为Servlet,以及整个请求处理流程。揭示了JSP在首次访问时的编译过程及后续请求的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

奋斗

1,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.26\work\Catalina\localhost\<应用程序名>\”目录中,Tomcat将JSP页面翻译成的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
2
3
4
5
6
7
<%@ pagelanguage= "java" import = "java.util.*" pageEncoding= "gb2312" %>
           <title>简单JSP页面示例</title>
这是一个简单的 JSP页面示例——HelloJSP <br>

 

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<pre class = "brush:java;" > package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import java.util.*;
public final class HelloJSP_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.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( "\r\n" );
      out.write( "\r\n" );
      out.write( "\t\r\n" );
      out.write( "    \t<title>简单JSP页面示例</title>\r\n" );
      out.write( "\t\r\n" );
      out.write( "\r\n" );
      out.write( "\t这是一个简单的 JSP页面示例――HelloJSP <br>\r\n" );
      out.write( "\t\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);
    }
  }
}</pre>
<pre class = "brush:java;" ></pre>
<p></p>
<p><br>
</p>
<p>上面这段代码就是HelloJSP.jsp编译生成的Java代码,它的路径(我的电脑)为:D:\apache-tomcat- 5.5 . 26 \work\Catalina\localhost\test_jsp\org\apache\jsp中(其中:test_jsp为我的项目名称)。在这个目录下会有两个对应的文件,一个是 class 文件一个是java</p>
<p>文件如下:</p>
<p><img style= "width: 164px; height: 42px; display: inline;" alt= "\" src=" http: //www.2cto.com/uploadfile/Collfiles/20140417/20140417092148150.png"><br>
</p>
<p><br>
</p>
<h1><strong> 2 </strong><strong>,<喎� "http://www.2cto.com/kf/ware/vc/" target= "_blank" class = "keylink" >vc3Ryb25nPjxzdHJvbmc+SlNQPC9zdHJvbmc+PHN0cm9uZz61xNa00NC5/bPMPC9zdHJvbmc+PC9oMT4KPHA+SlNQtcTWtNDQuf2zzNb30qq/ydLUt9bOqtLUz8K8uLXjo7o8L3A+CjxwPjGjqb/Nu6e2y7eis/bH68fzoaM8L3A+CjxwPjKjqVdlYsjdxve9q0pTUNeq0uuzyVNlcnZsZXTUtLT6wuuhozwvcD4KPHA+M6OpV2ViyN3G972rsvrJ+rXE1LS0+sLrvfjQ0LHg0uuhozwvcD4KPHA+NKOpV2ViyN3G97zT1Nix4NLruvO1xLT6wuuyota00NChozwvcD4KPHA+NaOpsNHWtNDQveG5+ 8 /s06bWwb/Nu6e2y6GjPC9wPgo8cD48aW1nIHNyYz0= "http://www.2cto.com/uploadfile/Collfiles/20140417/20140417092148152.jpg" alt= "" ><br>
<p></p>
<p><br>
</p>
</strong></h1><strong><h1> 3 ,总结</h1>
<strong>JSP执行过程:</strong>
<p> 1 )首先,客户端发出请求(request ),请求访问JSP网页</p>
<p> 2 )接着,JSP Container将要访问的.JSP文件 转译成Servlet的源代码(.java文件)</p>
<p> 3 )然后,将产生的Servlet的源代码(.java文件)经过编译,生成. class 文件,并加载到内存执行</p>
<p> 4 )最后把结果响应(response )给客户端</p>
<p>   执行JSP网页文件时,需要经过两个时期转译时期(Translation Time)和请求时期(Request
Time)。</p>
<p>   转译时期:JSP转译成Servlet类(. class 文件)。</p>
<p>   请求时期:Servlet类(. class 文件)执行后,响应结果至客户端。</p>
<p><br>
</p>
<p>   转译期间主要做了两件事情:</p>
<p>   ( 1 )将JSP网页转译为Servlet源代码(.java),此段称为转译时期(Translation
time);</p>
<p>   ( 2 )将Servlet源代码(.java)编译成Servlet类(. class ),此阶段称为编译时期(Compilation
time)。</p>
<p></p>
<p>其实,JSP就是一个Servlet。</p>
<br>
<p><br>
</p>                        </strong>

 

再见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值