`
tboss
  • 浏览: 46630 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
最近访客 更多访客>>
社区版块
存档分类
最新评论

JSP转译成Servlet详细过程

阅读更多

很多人都会认为JSP的执行性能会和Servlet相差很多,其实执行性能上的差别只在第一次的执行。因为JSP在执行第一次后,会被编译成Servlet的类文件,即.class,当再重复调用执行时,就直接执行第一次所产生的Servlet,而不再重新把JSP编译成Servelt。

因此,除了第一次的编译会花较久的时间之外,之后JSP和Servlet的执行速度就几乎相同了。Web容器处理JSP文件请求的执行过程主要包括以下4个部分:

1.客户端发出Request请求

2.JSP Container 将JSP转译成Servlet的源代码

3.将产生的Servlet源代码经过编译后,并加载到内存执行

4.把结果Response(响应)至客户端

在执行JSP网页时,通常可以分为两个时期:转译时期(Translation Time)和请求时期(Request Time)。

◆转译时期:JSP网页转移成Servlet类。

◆请求时期:Servlet类执行后,响应结果至客户端。

转译期间做了两件事情:

◆转译时期:将JSP网页转移为Servlet源代码 .java.

◆编译时期:将Servlet 源代码 .java编译成 Servlet类 .class.

当JSP网页在执行时,JSP Container会做检查工作,如果发现JSP网页有更新修改时,JSP Container才会再次编译JSP成Servlet; 如果JSP没有更新时,就直接执行前面所产生的Servlet。

  1. (showdate.jsp)     
  2. <%@ page language="java" contentType="text/html;charset=gb2312" import="java.text.*,java.util.*;"%>     
  3. <html>     
  4. <head>     
  5. <title>Show time</title>     
  6. </head>     
  7. <body>      
  8.      Hello :      
  9.      <%     
  10.          SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");     
  11.          String str = format.format(new Date());     
  12.       %>     
  13.       <%=str %>     
  14. </body>     
  15. </html> 

当部署好 showdate.jsp之后,启动Tomcat服务器。

1.在IE浏览器中输入配置好的路径 .... showdate.jsp 请求这个页面。

2.JSP Container 即Tomcat 服务器会将 showdate.jsp 转译成 showdate_jsp.java 源文件。

3.同时将 showdate_jsp.java 源文件编译成 showdate_jsp.class。

4.编译执行showdate_jsp.class 类,处理请求,返回响应,容器将生成的页面返回给客户端显示。

  1. (转移成的java源文件  showdate_jsp.java)  
  2. package org.apache.jsp.ch04;      
  3.      
  4. import javax.servlet.*;      
  5. import javax.servlet.http.*;      
  6. import javax.servlet.jsp.*;      
  7. import java.text.*;      
  8. import java.util.*;;      
  9.      
  10. public final class showdate_jsp extends org.apache.jasper.runtime.HttpJspBase      
  11.     implements org.apache.jasper.runtime.JspSourceDependent {      
  12.      
  13.   private static java.util.List _jspx_dependants;      
  14.      
  15.   public Object getDependants() {      
  16.     return _jspx_dependants;      
  17.   }      
  18.      
  19.   public void _jspService(HttpServletRequest request, HttpServletResponse response)      
  20.         throws java.io.IOException, ServletException {      
  21.      
  22.     JspFactory _jspxFactory = null;      
  23.     PageContext pageContext = null;      
  24.     HttpSession session = null;      
  25.     ServletContext application = null;      
  26.     ServletConfig config = null;      
  27.     JspWriter out = null;      
  28.     Object page = this;      
  29.     JspWriter _jspx_out = null;      
  30.     PageContext _jspx_page_context = null;      
  31.      
  32.     try {      
  33.       _jspxFactory = JspFactory.getDefaultFactory();      
  34.       response.setContentType("text/html;charset=gb2312");      
  35.       pageContext = _jspxFactory.getPageContext(this, request, response,      
  36.                    null, true, 8192, true);      
  37.       _jspx_page_context = pageContext;      
  38.       application = pageContext.getServletContext();      
  39.       config = pageContext.getServletConfig();      
  40.       session = pageContext.getSession();      
  41.       out = pageContext.getOut();      
  42.       _jspx_out = out;      
  43.      
  44.       out.write("\r\n");      
  45.       out.write("<html>\r\n");      
  46.       out.write("<head>\r\n");      
  47.       out.write("<title>Show time</title>\r\n");      
  48.       out.write("</head>\r\n");      
  49.       out.write("<body> \r\n");      
  50.       out.write("\tHello : \r\n");      
  51.       out.write("\t");      
  52.      
  53.          SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");      
  54.          String str = format.format(new Date());      
  55.      
  56.       out.write("\r\n");      
  57.       out.write("\t ");      
  58.       out.print(str );      
  59.       out.write("\r\n");      
  60.       out.write("</body>\r\n");      
  61.       out.write("</html>");      
  62.     } catch (Throwable t) {      
  63.      
  64.       if (!(t instanceof SkipPageException)){      
  65.         out = _jspx_out;      
  66.         if (out != null && out.getBufferSize() != 0)      
  67.           out.clearBuffer();      
  68.         if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);      
  69.       }      
  70.      
  71.     } finally {      
  72.      
  73.       if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);      
  74.     }      
  75.   }      

当JSP页面被转译成Servlet时,内容主要包含三个部分:

  1. public void _jspInit(){ ..}       
  2. -- 当JSP网页一开始执行时,最先执行此方法,执行初始化工作     
  3. public void _jspDestory(){...} – JSP网页最后执行的方法     
  4. public void _jspService(HttpServletRequest request, HttpServletResponse response)     
  5.         throws java.io.IOException, ServletException { 

JSP网页中最主要的程序都是在此执行,将showdate.jsp和showdate_jsp.java做一个简单对比:

第一部分:页面属性的对比

  1. <%@ page language="java" contentType="text/html;charset=gb2312" %> 
  2. response.setContentType("text/html;charset=gb2312");    
  3. //通过 response响应设置返回客户端的页面属性 

第二部分:HTML标签

  1. <html>      
  2. <head>      
  3. <title>Show time</title>      
  4. </head>      
  5. ..      
  6. </html> 
  7.  
  8. out.write("\r\n");  
  9. out.write("<html>\r\n");  
  10. out.write("<head>\r\n");  
  11. out.write("<title>Show time</title>\r\n");  
  12. out.write("</head>\r\n");  
  13. out.write("<body> \r\n");  
  14. out.write("\tHello : \r\n");  
  15. out.write("\t");  
  16. //通过 out对象 向客户端写HTML标签 

第三部分:声明的对象

  1. <%      
  2.          SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");      
  3.          String str = format.format(new Date());      
  4. %> 

在_jspService 方法中声明的局部变量:

  1. SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");      
  2. String str = format.format(new Date());    

第四部分:表达式

  1. <%=str %>      
  2. out.print(str ); //写即打印str变量的值 
分享到:
评论

相关推荐

    动态网页(JSP+Servlet)教程

    ### 动态网页(JSP+Servlet)教程知识点详解 #### 一、J2EE简介 **1.1 简介** J2EE (Java 2 Platform, Enterprise Edition) 是一个由 Sun Microsystems 提出的标准平台,专为开发企业级应用程序而设计。它提供了一...

    Jsp大学实用教程(源代码)

    * 转译(Translation):JSP引擎将JSP页面翻译成Servlet。 * 编译(Compilation):Servlet容器将Servlet编译成可执行文件。 * 初始化(Initialization):Servlet容器初始化Servlet。 * 服务(Service):Servlet...

    JSP程序设计上机实验与综合实训

    在本资源中,"JSP程序设计上机实验与综合实训"是一份全面的教程,旨在帮助学习者深入理解和实践JSP(Java Server Pages)技术。JSP是Java平台上的一个重要组成部分,它允许开发人员创建动态、交互式的Web应用程序。...

    Java Web应用开发:JSP技术基础.pptx

    JSP文件转译而成的Servlet文件位置;JSP基本语法;JSP指令;JSP指令—page指令;page指令用例;Page指令的属性;JSP声明;Java程序片段;JSP中的Java程序片段和模板文本;查看对应的servlet代码;练习;Java表达式;JSP中的注释...

    联合永道java面试题.pdf

    JSP的编译过程主要包括四个部分:客户端发出Request请求、JSPContainer将JSP转译成Servlet的源代码、将产生的Servlet源代码经过编译后,并加载到内存执行、把结果Response(响应)至客户端。在Tomcat中的JSP编译过程...

    Servlet+JSP

    - **执行过程**:JSP页面被请求时,首先会被编译成Servlet,然后由Servlet容器执行该Servlet生成动态内容。 #### 五、JSP语法之脚本元素和指令 - **脚本元素**: - **表达式**:用于输出Java表达式的值。 - **...

    JSP静态导入与动态导入使用详解

     JSP页面第一次被请求时,会被JSP引擎转译成Servlet的Java文件,然后再被编译成字节码文件执行。JSP指令标记为JSP页面转译提供整个页面的相关信息。  include指令用于在JSP页面静态插入一个文件,被插入的文件可以...

    jsp九大内置对象讲解

    在转译时期,JSP网页被转换为Servlet类;在请求时期,Servlet类被执行,响应结果被发送到客户端。 二、JSP九大内置对象 1. request对象(javax.servlet.http.HttpServletRequest) request对象是JSP九大内置对象...

    jsp试题加答案

    9. JSP转译阶段 - JSP在转译阶段会生成一个对应的Servlet源文件,扩展名为.java。 10. JSP特性 - JSP可以处理静态和动态内容,最终编译为Servlet字节码执行。 - JSP中可以使用脚本元素控制HTML标签生成。 - JSP...

    jsp.txt的文档

    1. **JSP 文件转译成 Servlet:** - Web 服务器上的 JSP 引擎将 JSP 文件转换成 Java Servlet 源代码。 - 这个过程包括将 JSP 文件中的 HTML 代码包装到一个输出流中,并将所有的 Java 代码片段合并到一个 Java 类...

    数据库组建动态网站(JSP+Oracle)

    当用户请求 JSP 页面时,服务器会将 JSP 转译为 Servlet,然后执行该 Servlet 生成响应并返回给客户端。JSP 的优点在于它将表现层(HTML)和业务逻辑层(Java 代码)分离,提高了代码的可维护性和可重用性。 Oracle...

    jsp页面

    1. **翻译阶段**:服务器将JSP页面转换为一个Servlet类,这个过程会把JSP中的指令、声明、脚本和动作元素转译成Java代码。 2. **编译阶段**:编译生成的Servlet类为字节码,然后加载到Java虚拟机中。 3. **初始化...

    关于jsp的一些知识总结

    2. 转译阶段:服务器首次接收到JSP请求时,会将JSP转换成一个Servlet类(.java文件)。 3. 编译阶段:然后,这个Servlet类被编译成字节码(.class文件),并加载到Java虚拟机中。 4. 执行阶段:每次用户请求JSP页面...

    jsp技术总结,jdk配置,tomcat配置,jsp语法

    2. **JSP转译**:服务器上的JSP容器接收请求,将JSP文件转换成一个Servlet源文件。 3. **Servlet编译**:JSP容器将Servlet源文件编译成.class文件(字节码文件)。 4. **执行Servlet**:JSP容器加载编译后的Servlet...

    Java Web初级编程:JSP 页面元素.pptx

    Include 指令可以在 JSP 转译时包含一个文件(JSP、HTML、文本和 JAVA 代码等),这个包含过程是静态的(file 属性不能是动态生成的,也不能是一个变量,file 参数后也不能带任何参数)。 JSP 指令的语法格式 JSP ...

    JSP详解OK.pdf

    这一过程确保了JSP页面的高效执行,尤其是在第二次及以后的请求时,由于Servlet已经编译完成,所以响应速度会更快。 #### 三、JSP组成 JSP页面由多个部分组成,主要包括: - **HTML注释**:`&lt;!--客户端可见--&gt;`,...

    完整版Java JSP web开发教程 05_JSP简介(共17页).ppt

    2. **转译**:服务器将JSP页面转换成一个Java源文件(Servlet)。 3. **编译**:服务器编译这个Java源文件,生成字节码。 4. **执行**:执行Servlet,生成HTML响应内容。 5. **响应**:服务器将HTML内容返回给客户端...

    Java Server PagesTM(JSPTM) Authoring

    1. **转译**:JSP 文件被转译成 Java 语言的 Servlet 代码。 2. **编译**:转译后的 Servlet 代码被编译成 Java 字节码。 3. **执行**:编译后的 Java 字节码由 Servlet 容器执行,生成动态内容。 #### 3. JSP 与 ...

    jsp的常用元素。 jsp

    - **转译**:JSP解析器将JSP文件转换为一个Java源代码的Servlet。 - **编译**:使用JDK将生成的Servlet源代码编译为字节码。 3. 如果Servlet已经存在,服务器直接执行该Servlet。 4. Servlet生成响应内容并返回给...

Global site tag (gtag.js) - Google Analytics