学习J2EE时,初步了解了JSP,写过一篇小的总结:J2EE-JSP,当时还不是很了解它的运行机制。

学习DRP时,再次接触了JSP,在原来基础上有了更深的了解,了解了它的执行原理

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)

[java] view plaincopy
  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)

[java] view plaincopy
  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,true, 8192, true);
  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)客户端发出请求。

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

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

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

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。

JSP运行原理及运行过程相关推荐

  1. Linux X Window System运行原理和启动过程

    本文主要说明X Window System的基本运行原理,其启动过程,及常见的跨网络运行X Window System. 一) 基本运行原理 X Window System采用C/S结构,但和我们常见 ...

  2. ASP.NETt运行原理和运行机制

    当一个http请求发送过来并被IIS机收到之后,IIS首先通过你请求的页面类型为其加载相应的dll文件,然后在处理过程中将这条请求发送给能够处理这条请求的模块,而在ASP.NET中这个模块就叫做Htt ...

  3. ASP.NET运行原理和运行机制

    一.ASP.NET运行原理 当一个http(abbr. 超文本传输协议  hypertext transport protocol )请求发送过来并被IIS机收到之后,IIS(IIS 互联网信息服务信 ...

  4. 运行原理_JMeter运行原理

    前几篇我们讲解了JMeter的组成部分, 下面我们来了解JMeter的运行原理. 接触过LoadRunner的读者应该知道, LoadRunner可以选择是以进程方式还是以线程方式来运行, 在JMet ...

  5. 【转载】Python的运行原理(编译过程及执行原理)

    原文链接:https://www.cnblogs.com/stefan-liu/p/5172424.html

  6. flink运行原理_Flink运行架构剖析

    本文主要介绍 Flink Runtime 的作业执行的核心机制.首先介绍 Flink Runtime 的整体架构以及 Job 的基本执行流程,然后介绍Flink 的Standalone运行架构,最后对 ...

  7. 怎么去观察php运行原理,php运行原理如何理解,具体看代码?

    PHP 测试 Hello World'; ?> 这个是一段简单的php代码,文件是hello.php,我通过www.xxx.com/hello.php请求这个页面的时候,php是如何解析数据返回 ...

  8. JSP起源、JSP的运行原理、JSP的执行过程

    JSP起源 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变. 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序 ...

  9. 【JSP】JSP的运行原理

    初次访问JSP页面 JSP同Servlet一样,都运行在Servlet容器中.当用户第一次访问JSP页面时,JSP页面的执行过程可分为五个步骤,各步骤含义如下: 客户向服务器发送JSP页面请求(req ...

最新文章

  1. 高数_解二元方程,复数怎么求出来的?(复数问题)
  2. 搭建Java ME 开发环境
  3. nginx指令(alias、set、proxy_pass、rewrite、upstream)、跨域问题、防盗链、缓存、gzip压缩
  4. 在Ubuntu 16.04 上安装和卸载matlab 2018b(Install and uninstall matlab 2018b on ubuntu)
  5. [html] html和html5有什么区别呢?
  6. Leetcode每日一题:112.path-sum(路经总和)
  7. 47. PHP 魔术方法
  8. 可做fft分析吗_2020速卖通还要做吗?速卖通2020年市场分析!
  9. QT/Embedded 2.3.8 MX21ADS板移植
  10. 众泰Z700导航升级高德地图
  11. Excel单元格锁定及解锁
  12. 无法重命名文件夹,错误0x80004005 未指定的错误
  13. leetcodeOj:66. Plus One
  14. 远程调用报错java.net.UnknownHostException 解决方法
  15. android recyclerview监听滑动状态
  16. vivado与modelsim联合仿真遇到的问题2
  17. 网易视频云资深产品经理钱栩磊:2B产品经理养成记
  18. Ceph 存储集群2-配置:心跳选项、OSD选项、存储池、归置组和 CRUSH 选项
  19. Linux jstack命令
  20. C语言handle对象对应java,c语言和java语言之间的关系到底是怎么样的,两种 体系?还是一种体系的不同阶段?还是其它的什么?...

热门文章

  1. 北上广深杭房价高压下,这也许是软件测试员扎根的唯一出路...
  2. 微信小程序 radio-group(排列) 及事件绑定、点击切换样式
  3. signature=b1b77b4bec74fcda8c0d93bfcce8abe5,你们要的代码我给整理出来了!!!!!
  4. html轮播图下面小点,jq轮播图,一组数据轮播,自动生成小点点
  5. YUV422/YUV420
  6. 人工智能数学基础-线性代数5:行列式求解线性方程组和拉普拉斯定理
  7. ubuntu内核版本降级与切换
  8. 咖啡汪日志——JAVA导出pdf文件加水印 文字+图片、文字
  9. 程序员婚恋那点事(二):程序媛脱单记
  10. mysql导入亿级数据_如何将上亿条大容量数据导入MYSQL