`
113.com
  • 浏览: 81203 次
  • 来自: 广州
社区版块
存档分类
最新评论

jsp 在tomcat中的处理流程的一小部分

    博客分类:
  • JSP
 
阅读更多

1.在Tomcat的公共设定中
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
........................
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
可以看出*.jsp文件都是请求org.apache.jasper.servlet.JspServlet得。

2.下面再看看org.apache.jasper.servlet.JspServlet中做什么。
从源代码中可以看出,这个类是继承HttpServlet类,并覆盖了主要方法
public void service (HttpServletRequest request, 
HttpServletResponse response)
throws ServletException, IOException {
在这个方法中找到jsp文件的路径jspUri,并执行方法serviceJspFile
接着在方法serviceJspFile中我们看到它新创建了一个类JspServletWrapper的实例,并执行了这个类实例的service方法。

3.接下来,我们再看看这个类org.apache.jasper.servlet.JspServletWrapper
在这个类中
我们可以看到在初始化的时候,创建了一个新的对象
ctxt = new JspCompilationContext(jspUri, tagInfo, options,
servletContext, this, rctxt,
tagFileJarUrl);
找到方法
public void service(HttpServletRequest request, 
HttpServletResponse response,
boolean precompile)
throws ServletException, IOException, FileNotFoundException
这里,使用了ctxt.compile(),对jsp文件进行了编译,
再调用方法getServlet();给Servlet类型对象theServlet赋值,
最后,调用theServlet的service方法。
由于从jsp转换来的java继承类HttpJspBase,我们可以从类HttpJspBase 中看到servcie方法又调用了_jspService方法,

这样最终调用了由jsp转换来的java中的_jspService方法

在这最底部的阀门里,其实就主要做了两件事:
 
   一是启动过滤器,让request在N个过滤器里面筛一通,如果OK! 那就PASS。 否则就跳到其他地方去了。
 
   二是servlet.service((HttpServletRequest) request,(HttpServletResponse) response); 这个方法.
 
     如果是JspServlet, 那么先把jsp文件编译成servlet_xxx, 再invoke servlet_xxx的servie()方法。
 
     如果是DefaultServlet, 就直接找到静态资源,取出内容, 发送出去。
 
     如果是InvokerServlet, 就调用那个具体的servlet的service()方法。
 
   ok! 完毕。


从功能的角度将Tomcat源代码分成5个子模块,它们分别是:

  1. Jsper子模块:这个子模块负责jsp页面的解析、jsp属性的验证,同时也负责将jsp页面动态转换为java代码并编译成class文件。在Tomcat源代码中,凡是属于org.apache.jasper包及其子包中的源代码都属于这个子模块;
  2. Servlet和Jsp规范的实现模块:这个子模块的源代码属于javax.servlet包及其子包,如我们非常熟悉的javax.servlet.Servlet接口、javax.servet.http.HttpServlet类及javax.servlet.jsp.HttpJspPage就位于这个子模块中;
  3. Catalina子模块:这个子模块包含了所有以org.apache.catalina开头的java源代码。该子模块的任务是规范了Tomcat的总体架构,定义了Server、Service、Host、Connector、Context、Session及Cluster等关键组件及这些组件的实现,这个子模块大量运用了Composite设计模式。同时也规范了Catalina的启动及停止等事件的执行流程。从代码阅读的角度看,这个子模块应该是我们阅读和学习的重点。
  4. Connectors子模块:如果说上面三个子模块实现了Tomcat应用服务器的话,那么这个子模块就是Web服务器的实现。所谓连接器(Connector)就是一个连接客户和应用服务器的桥梁,它接收用户的请求,并把用户请求包装成标准的Http请求(包含协议名称,请求头Head,请求方法是Get还是Post等等)。同时,这个子模块还按照标准的Http协议,负责给客户端发送响应页面,比如在请求页面未发现时,connector就会给客户端浏览器发送标准的Http 404错误响应页面。
  5. Resource子模块:这个子模块包含一些资源文件,如Server.xml及Web.xml配置文件。严格说来,这个子模块不包含java源代码,但是它还是Tomcat编译运行所必需的。

2.2 Tomcat运行流程

 

 

图2-2 tomcat运行流程

假设来自客户的请求为:http://localhost:8080/test/index.jsp

  1. 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
  2. Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应
  3. Engine获得请求localhost:8080/test/index.jsp,匹配它所有虚拟主机Host
  4. Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
  5. localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context
  6. Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
  7. path="/test"的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet
  8. Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
  9. 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet.service()方法,service ()中调用 doGet或doPost方法
  10. Context把执行完了之后的HttpServletResponse对象返回给Host
  11. Host把HttpServletResponse对象返回给Engine
  12. Engine把HttpServletResponse对象返回给Connector
  13. Connector把HttpServletResponse对象返回给客户browser
  • 大小: 14.2 KB
分享到:
评论

相关推荐

    jsp+tomcat开发的小论坛

    在【标签】"jsp+tomcat开发的小论坛"中,我们可以推断出项目的重点在于JSP和Tomcat的整合应用。这包括但不限于如何配置Tomcat服务器以运行JSP页面,如何使用JSP动作元素(如&lt;jsp:include&gt;,&lt;jsp:forward&gt;等)和脚本...

    jsp+tomcat的wap源码

    【标题】"jsp+tomcat的wap源码" 涉及的知识点主要集中在使用Java Server Pages (JSP) 技术与Apache Tomcat服务器来开发无线应用协议(WAP)的应用程序。JSP是Java EE平台的一部分,它允许开发者创建动态、数据驱动的...

    jsp-tomcat安装包-8.5.94

    在【压缩包子文件的文件名称列表】中,"apache-tomcat-8.5.94"是Tomcat服务器的核心组件,包含了运行JSP应用所需的全部文件。这个压缩包通常会包含以下主要部分: 1. **bin** 目录:包含启动和停止Tomcat服务器的...

    jsp,tomcat,开发的源码网站

    JSP(JavaServer Pages)是Java平台上的动态网页技术,而Tomcat则是一个开源的Java Servlet容器,常常用于部署和运行JSP应用程序。 【JSP】:JSP是一种服务器端脚本语言,允许开发者在HTML或XML文档中嵌入Java代码...

    《JSP+Servlet+Tomcat应用开发从零开始学》PDF

    《JSP+Servlet+Tomcat应用开发从零开始学》这本书是针对初学者设计的一本教程,旨在帮助读者从零基础开始学习如何使用JavaServer Pages(JSP)、Servlet和Apache Tomcat服务器进行Web应用程序的开发。JSP、Servlet和...

    JSP+tomcat+mysql 一键启动

    在JSP+Tomcat环境中,Tomcat负责解析和执行JSP文件,将它们转化为Servlet并处理HTTP请求。 【MySQL】 MySQL是一款流行的开源关系型数据库管理系统(RDBMS),以其快速、可靠和易用性而著称。在JSP应用中,MySQL常...

    Servlet JSP深入详解 基于Tomcat的Web开发

    Servlet和JSP是Java Web开发中的核心技术,它们与Tomcat服务器紧密相连,共同构成了Web应用程序的基础。本篇文章将深入探讨这三个关键概念,并介绍如何利用它们进行基于Tomcat的Web开发。 **Servlet概述** Servlet...

    tomcat+jsp内幕详解

    项目中的一个核心项目,主要处理Java Servlet和JavaServer Pages(JSP)的运行。Tomcat以其轻量级、高效和易于管理的特性,在小型到中型企业应用中广泛使用。 **Tomcat目录结构** Tomcat的目录结构对于理解和管理...

    JSP网络论坛 JSP Tomcat

    Tomcat提供了对JSP和Servlet的全面支持,使得开发者能够在不依赖商业应用服务器的情况下,轻松部署和运行JSP应用程序,如我们的JSP网络论坛。Tomcat以其轻量级、高效能和易管理性而广受欢迎,尤其适合小型到中型的...

    以Tomcat服务器为核心的3种配置JSP环境.,tomcat的配置

    在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,它允许开发者将Java代码嵌入到HTML页面中,实现服务器端的业务逻辑处理。而Tomcat是一款开源的、轻量级的Java应用服务器,特别适合部署JSP和...

    北大青鸟,第二学期s2,jsp tomcat 服务器

    【标题】北大青鸟的第二学期S2课程主要聚焦于JSP与Tomcat服务器的...通过北大青鸟S2课程的学习,学生不仅可以掌握JSP和Tomcat的基本操作,还能了解到Web应用开发的完整流程,为将来在IT行业的职业生涯打下坚实基础。

    jsp开发中的tomcat

    **标题与描述解析** 标题"jsp开发中的tomcat"指出我们关注的...综上,Tomcat在JSP开发中扮演着核心角色,提供了一个运行和调试JSP应用的平台。了解和掌握Tomcat的配置、管理以及优化技巧,对于JSP开发者来说至关重要。

    jsp+tomcat+mysql+sevlet+javabean.rar_java mysql tomcat_jsp javaB

    在IT行业中,构建基于Web的应用程序常常涉及到多种技术的整合,如Java的JSP(JavaServer Pages)、Servlet、JavaBean,以及服务器端的Tomcat和数据库管理系统的MySQL。本资料"jsp+tomcat+mysql+sevlet+javabean.rar...

    JSP+TOMCAT+access图书馆里系统精简版

    在这个图书馆管理系统中,Tomcat扮演了运行环境的角色,负责解析并执行JSP页面,处理HTTP请求,以及管理应用程序的生命周期。 **Access**是Microsoft开发的一种关系型数据库管理系统,以其易用性和灵活性而受到欢迎...

    JSP.rar_jsp mysql_jsp mysql tomcat_jsp 新闻发布系统_mysql java 新闻_新闻发布

    在本项目"JSP.rar"中,JSP被用作后端服务器端的技术,负责处理用户的请求和返回数据。 【MySQL】是流行的开源关系型数据库管理系统,广泛用于存储和管理网站的数据。在这个新闻发布系统中,MySQL用于存储新闻的相关...

    jsp的博客系统,tomcat+sql2000

    【标题】:“jsp的博客系统,tomcat+sql2000”指的是一个基于Java Server Pages(JSP)技术构建的博客平台,该平台运行在Apache Tomcat服务器上,并使用SQL Server 2000作为数据库管理系统。 【知识点详解】 1. ...

    班费管理系统IEDA+Jsp+Tomcat+Servlet.zip

    综上所述,这个项目涵盖了Java Web开发中的多个重要组成部分,通过IDEA提供的便利开发环境,结合JSP的动态网页特性,Servlet的服务器端处理能力,以及Tomcat的Web服务支持,实现了一个完整的班费管理解决方案。...

    JSP tomcat6.0.14.

    Tomcat 6.0.14是Apache软件基金会的开源项目,是一个流行的Java Servlet和JSP容器,也是Java EE Web应用程序的标准实现之一。Tomcat 6.0.14版本是针对Java EE 5规范的,支持Servlet 2.5和JSP 2.1标准。这个版本提供...

    bbs_MYSQL_jsp_Tomcat

    总结来说,"bbs_MYSQL_jsp_Tomcat"是一个综合运用了JSP、MySQL和Tomcat技术的论坛系统实例,它展示了如何在Web环境中构建一个可管理的讨论平台,对于学习和理解Web开发具有很高的参考价值。通过深入学习和实践这个...

    简单的 Java + Servlet + JSP + Tomcat + MySQL的活动管理系统.zip

    在本项目中,我们探索的是一个基于Java Web技术的简单活动管理系统。这个系统结合了Java、Servlet、JSP、Tomcat服务器以及MySQL数据库,适用于学习和完成毕业设计或课程设计任务。下面将详细介绍这些关键技术和它们...

Global site tag (gtag.js) - Google Analytics