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

当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. out.write("\r\n");
  8. out.write("<html>\r\n");
  9. out.write("<head>\r\n");
  10. out.write("<title>Show time</title>\r\n");
  11. out.write("</head>\r\n");
  12. out.write("<body> \r\n");
  13. out.write("\tHello : \r\n");
  14. out.write("\t");
  15. //通过 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变量的值

转载于:https://www.cnblogs.com/Seachal/p/5407131.html

JSP转译成Servlet详细过程相关推荐

  1. jsp简单的导包详细过程

    导包的过程 首先是下载,下载虽然很快,但是要下对版本啊! 我就选用了 请不要注意细节,这个已删除,是因为已经导进软件了^_^. 在此之前我出现了两种情况: 1. 这个是因为放错了位置! 2.还出现了一 ...

  2. 经常忘记的--jsp被转成servlet放在哪个目录下呢 2、日志路径3、AdminServer.lok

    1.页面:myJsp.jsp 报错:at jsp_servlet.__myJsp._jspService(__myJsp.java:205) 路径:E:\JavaInstall\Weblogic\We ...

  3. java jsp常见问题_jsp和servlet常见问题总结

    四.jsp/servlet部分 1.Tomcat的优化经验 去掉对web.xml的监视,把jsp提前编辑成Servlet. 有富余物理内存的情况,加大tomcat使用的jvm的内存 2.Tomcat根 ...

  4. JSP编译成Servlet(四)JSP与Java行关系映射

    我们知道java虚拟机只认识class文件,要在虚拟机上运行就必须要遵守class文件格式,所以JSP编译成servlet后还需要进一步编译成class文件,但从JSP文件到java文件再到class ...

  5. Tomcat(三):tomcat处理连接的详细过程

    tomcat可以处理静态资源的请求,也可以通过servlet处理动态资源的请求.处理jsp动态资源时,先通过jasper组件(具体的是JspServlet)将jsp翻译成java源代码并编译成clas ...

  6. 网站渗透测试原理及详细过程

    渗透测试实战 site:baidu.com 渗透测试思路 site:baidu.com 带你入门渗透测试的5个项目:https://www.jianshu.com/p/5b82e42ae346 渗透测 ...

  7. JSP基础(一)JSP介绍,文件结构及执行过程

    JSP基础(一)JSP介绍,文件结构及执行过程 JSP Java Server Pages (JSP)  Java服务器端的页面. 在传统的网页HTML文件(*.htm, *.html)中加入Java ...

  8. 库存物资管理系统代码,详细过程和总结

    库存物资管理系统实验要求如下: 1.背景资料 1.有一个存放商品的仓库,每天都有商品出库和入库. 2.每种商品都有名称.生产厂家.型号.规格等. 3.出入库时必须填写出入库单据,单据包括商品名称.生产 ...

  9. 只用jsp实现同样的Servlet功能

    Jsp最终都会转化成java形式的Servlet执行,因此也可以说Jsp的本质就是Servlet,在jsp执行后,会在服务器上(例如tomcat中)生成.java以及.class文件.具体执行过程如下 ...

  10. Apache Hive 2.1.1 安装配置超详细过程,配置hive、beeline、hwi、HCatalog、WebHCat等组件...

    2019独角兽企业重金招聘Python工程师标准>>> 在Docker环境成功搭建了Apache Hadoop 2.8 分布式集群,并实现了NameNode HA.ResourceM ...

最新文章

  1. python多页网站目录_python 爬取页面所有的url
  2. 乾坤 微前端_微前端架构初探以及我的前端技术盘点
  3. Module Zero概览
  4. Java基本流程控制语句
  5. mysql中如何把两个查询结果列数不同并成一张表_MySQL
  6. 嵌套的SQL另外一种写法
  7. 「陶哲軒實分析」 習題 3.5.1
  8. 世界杯正在成为鸡肋!球迷越来越像傻瓜!
  9. 13到21年蓝桥杯真题及解析
  10. 怎么用PS为一寸证件照更换底色背景色
  11. Android View事件传递机制
  12. IP获取方法二:太平洋网络IP地址查询Web接口
  13. 中年男人,你如何自我救赎
  14. 【社会相关】:大神写的考研政治复习攻略
  15. 手脱FSG压缩壳及问题处理
  16. 为什么Flutter是跨平台开发的终极之选,这篇文章可以满足你80%日常工作
  17. 搜狐 Hive SQL 血缘关系解析与应用
  18. springMVC消息转换器HttpMessageConverter
  19. 阿里云Intel Xeon Platinum 8269CY(Cascade Lake)服务器CPU性能评测
  20. 【Python爬虫】爬取2022软科全国大学排行榜

热门文章

  1. 送你一份有态度的红包封面!
  2. 自学鄙视链顶端的王者
  3. 福利 | 简历模板大放送
  4. 从0开始学习 GitHub 系列之「06.团队合作利器 Branch」
  5. *第八周*数据结构实践项目一【建设顺序串算法库】
  6. GC类型以及不同类型GC的搭配 1
  7. Rem实现自适应初体验
  8. Java基础知识强化54:经典排序之插入排序(InsertSort)
  9. 【转】Add a user/Administrator to Windows Server 2008
  10. jQuery.extend函数详细用法![转]