最近空闲看了下JSP/Servlet,以前只知道用JSP,但是对其运行原理知之甚少,今在此做些笔记,以备查阅。

首先简要描述下其运行过程,然后结合Tomcat源码作简要分析。

JSP运行过程:

第一步:将JSP文件翻译成servlet源代码;

第二步:将servlet源代码编译成字节码文件;

第三步:载入字节码并实例化和初始化;

第四步:调用service方法提供服务;

源码简要分析如下:

1、源码中涉及到的几个重要文件

JspServlet.java、JspServletWrap.java、JspRuntimeContext.java、Compiler.java、JDTCompiler.java(AntCompiler.java)

2、代码详细分析

JspServlet中涉及两重要方法:service方法和serviceJspFile,service方法主要用于获取请求JSP资源路径,serviceJspFile主要用于构建JspServletWrap。

JspRuntimeContext主要提供JspServletWrap的容器(用的是HashMap集合)。

Compiler主要用来翻译JSP文件和将其编译成字节码,具体的字节码产生实现由其子类实现(用到模版方法设计模式)。

JDTCompiler(AntCompiler)主要用来产生字节码文件。

JspServletWrap主要用来实例化Servlet并调用init进行初始化处理,并且调用servlet的service方法进行处理请求。

具体实现细节等进一步探究,今天就先写到这,本人水平有限,如有不妥望指点!

Tomcat之JSP运行原理之小试牛刀的更多相关文章

  1. JavaWeb(二)jsp运行原理,九大内置对象

    JSP运行原理: 每个JSP页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ...

  2. jsp学习--JSP运行原理,九大隐式对象和JSP常用标签

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  3. Unit04: JSP基本语法 、 JSP运行原理

    Unit04: JSP基本语法 . JSP运行原理 hello.jsp <%@page pageEncoding="utf-8"%> <!doctype html ...

  4. JDK+Tomcat搭建JSP运行环境--JSP基础

    一.搭建JSP运行环境之前需要了解的基本知识 配置JSP运行环境之前,我们需要了解JSP的运行机制.只有了解JSP运行机制后,我们才能知道为什么要搭建JSP运行环境?如何去搭建JSP运行环境?为什么要 ...

  5. html、JSP运行原理

    HTML运行原理 1.本地运行      所谓本地运行就是直接用 浏览器打开 2.远程访问的原理示意图: 何为协议?计算机互相通信(网络)的规则.常见的协议有 http .smtp. ftp.pop等 ...

  6. jsp jsp运行原理

    JSP的运行原理  每个jsp页面在第一次被访问时,WEB容器都会把请求交给jsp引擎(一个java程序).Jsp 引擎先将jsp翻译成一个_jspServlet实质上也是一个servlet,然后按照 ...

  7. JSP运行原理以及执行过程源码分析

    我们在开发JavaWeb的过程中,可能有过这样的疑问,当我们编写jsp页面时,不用引用不用创建就可以使用request.session.application对象,当使用浏览器访问JSP页面时,查看页 ...

  8. jsp运行原理及运行过程

    JSP的执行过程主要可以分为以下几点: 1)客户端发出请求. 2)Web容器将JSP转译成Servlet源代码. 3)Web容器将产生的源代码进行编译. 4)Web容器加载编译后的代码并执行. 5)把 ...

  9. Jsp运行原理

    当客户端浏览器向服务器发出访问一个JSP页面的请求时,服务器根据该请求加载相应的JSP页面,并对该页面进行编译,然后执行.JSP页面的执行过程如下图所示: 客户端通过浏览器向服务器发出请求,在该请求中 ...

随机推荐

  1. iOS开发之弹出输入框

    最近项目里有个需求要弹出输入框,GitHub上搜了一圈没发现太合适的轮子,就自个儿撸了一个,传送门在这里https://github.com/wozyao/ZYInputAlert,有需要的同学可以d ...

  2. Solr 数字字符不能搜索的一个问题

    问题一: 测试人员告诉我数字不能被搜索.于是开始找原因: <fields> ***<field name="productName" type="tex ...

  3. Spark history Server配置实用

    Spark history Server产生背景 以standalone运行模式为例,在运行Spark Application的时候,Spark会提供一个WEBUI列出应用程序的运行时信息:但该WEB ...

  4. vue2.0 Hash模式下实现微信分享

    1,通过后台,获取accessToken 和 签名jsApiTicket,并写入浏览器缓存(可以写在app.vue中) <script type="text/ecmascript-6& ...

  5. ubuntu tftp 配置

    1:sudo apt-get install tftp tftpd openbsd-inetd特别指出很多文章里用的是netkit-inetd,但是实际下载时发现这个软件是下不到的,特改用openbs ...

  6. js判断字符是否存在汉字的方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. js用new Object创建json数据

    var str = '';var json = new Object;var arr =new Array(); for(var i =0; i<4;i++){        var jsons ...

  8. iOS cocopods安装使用和安装过程中遇到的问题及解决办法

    在osx 10.11之前cocopods问题不多,但是升级到11之后的版本,之前的cocopods大多用不了,需要重新安装,对于我这种使用测试版系统的技术狂来说,每次都需要重新安装很多东西, 当然,c ...

  9. HttpGet params not being sent httpget.setParams(params)不好使

    错误的代码 HttpClient httpclient = new DefaultHttpClient(); HttpUriRequest request = new HttpGet(uri); Ht ...

  10. JDBC 查询的三大参数 setFetchSize prepareStatement(String sql, int resultSetType, int resultSetConcur)

    JDBC 查询的三大参数 本文转载至 http://blog.csdn.net/turkeyzhou/article/details/5115228 DBC1.0 .JDBC2.0 .JDBC3.0  ...