三期必出特 HTML标签 1. &lt

  c?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. } 76. }   当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 方法中声明的局部变量:  第四部分:表达式 <%=str %> out.print(str ); //写即打印str变量的值