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个子模块,它们分别是:
- Jsper子模块:这个子模块负责jsp页面的解析、jsp属性的验证,同时也负责将jsp页面动态转换为java代码并编译成class文件。在Tomcat源代码中,凡是属于org.apache.jasper包及其子包中的源代码都属于这个子模块;
- Servlet和Jsp规范的实现模块:这个子模块的源代码属于javax.servlet包及其子包,如我们非常熟悉的javax.servlet.Servlet接口、javax.servet.http.HttpServlet类及javax.servlet.jsp.HttpJspPage就位于这个子模块中;
- Catalina子模块:这个子模块包含了所有以org.apache.catalina开头的java源代码。该子模块的任务是规范了Tomcat的总体架构,定义了Server、Service、Host、Connector、Context、Session及Cluster等关键组件及这些组件的实现,这个子模块大量运用了Composite设计模式。同时也规范了Catalina的启动及停止等事件的执行流程。从代码阅读的角度看,这个子模块应该是我们阅读和学习的重点。
- Connectors子模块:如果说上面三个子模块实现了Tomcat应用服务器的话,那么这个子模块就是Web服务器的实现。所谓连接器(Connector)就是一个连接客户和应用服务器的桥梁,它接收用户的请求,并把用户请求包装成标准的Http请求(包含协议名称,请求头Head,请求方法是Get还是Post等等)。同时,这个子模块还按照标准的Http协议,负责给客户端发送响应页面,比如在请求页面未发现时,connector就会给客户端浏览器发送标准的Http 404错误响应页面。
- Resource子模块:这个子模块包含一些资源文件,如Server.xml及Web.xml配置文件。严格说来,这个子模块不包含java源代码,但是它还是Tomcat编译运行所必需的。
2.2 Tomcat运行流程
图2-2 tomcat运行流程
假设来自客户的请求为:http://localhost:8080/test/index.jsp
- 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
- Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应
- Engine获得请求localhost:8080/test/index.jsp,匹配它所有虚拟主机Host
- Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
- localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context
- Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
- path="/test"的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet
- Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
- 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet.service()方法,service ()中调用 doGet或doPost方法
- Context把执行完了之后的HttpServletResponse对象返回给Host
- Host把HttpServletResponse对象返回给Engine
- Engine把HttpServletResponse对象返回给Connector
- Connector把HttpServletResponse对象返回给客户browser
相关推荐
在【标签】"jsp+tomcat开发的小论坛"中,我们可以推断出项目的重点在于JSP和Tomcat的整合应用。这包括但不限于如何配置Tomcat服务器以运行JSP页面,如何使用JSP动作元素(如<jsp:include>,<jsp:forward>等)和脚本...
【标题】"jsp+tomcat的wap源码" 涉及的知识点主要集中在使用Java Server Pages (JSP) 技术与Apache Tomcat服务器来开发无线应用协议(WAP)的应用程序。JSP是Java EE平台的一部分,它允许开发者创建动态、数据驱动的...
在【压缩包子文件的文件名称列表】中,"apache-tomcat-8.5.94"是Tomcat服务器的核心组件,包含了运行JSP应用所需的全部文件。这个压缩包通常会包含以下主要部分: 1. **bin** 目录:包含启动和停止Tomcat服务器的...
JSP(JavaServer Pages)是Java平台上的动态网页技术,而Tomcat则是一个开源的Java Servlet容器,常常用于部署和运行JSP应用程序。 【JSP】:JSP是一种服务器端脚本语言,允许开发者在HTML或XML文档中嵌入Java代码...
《JSP+Servlet+Tomcat应用开发从零开始学》这本书是针对初学者设计的一本教程,旨在帮助读者从零基础开始学习如何使用JavaServer Pages(JSP)、Servlet和Apache Tomcat服务器进行Web应用程序的开发。JSP、Servlet和...
在JSP+Tomcat环境中,Tomcat负责解析和执行JSP文件,将它们转化为Servlet并处理HTTP请求。 【MySQL】 MySQL是一款流行的开源关系型数据库管理系统(RDBMS),以其快速、可靠和易用性而著称。在JSP应用中,MySQL常...
Servlet和JSP是Java Web开发中的核心技术,它们与Tomcat服务器紧密相连,共同构成了Web应用程序的基础。本篇文章将深入探讨这三个关键概念,并介绍如何利用它们进行基于Tomcat的Web开发。 **Servlet概述** Servlet...
项目中的一个核心项目,主要处理Java Servlet和JavaServer Pages(JSP)的运行。Tomcat以其轻量级、高效和易于管理的特性,在小型到中型企业应用中广泛使用。 **Tomcat目录结构** Tomcat的目录结构对于理解和管理...
Tomcat提供了对JSP和Servlet的全面支持,使得开发者能够在不依赖商业应用服务器的情况下,轻松部署和运行JSP应用程序,如我们的JSP网络论坛。Tomcat以其轻量级、高效能和易管理性而广受欢迎,尤其适合小型到中型的...
在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,它允许开发者将Java代码嵌入到HTML页面中,实现服务器端的业务逻辑处理。而Tomcat是一款开源的、轻量级的Java应用服务器,特别适合部署JSP和...
【标题】北大青鸟的第二学期S2课程主要聚焦于JSP与Tomcat服务器的...通过北大青鸟S2课程的学习,学生不仅可以掌握JSP和Tomcat的基本操作,还能了解到Web应用开发的完整流程,为将来在IT行业的职业生涯打下坚实基础。
**标题与描述解析** 标题"jsp开发中的tomcat"指出我们关注的...综上,Tomcat在JSP开发中扮演着核心角色,提供了一个运行和调试JSP应用的平台。了解和掌握Tomcat的配置、管理以及优化技巧,对于JSP开发者来说至关重要。
在IT行业中,构建基于Web的应用程序常常涉及到多种技术的整合,如Java的JSP(JavaServer Pages)、Servlet、JavaBean,以及服务器端的Tomcat和数据库管理系统的MySQL。本资料"jsp+tomcat+mysql+sevlet+javabean.rar...
在这个图书馆管理系统中,Tomcat扮演了运行环境的角色,负责解析并执行JSP页面,处理HTTP请求,以及管理应用程序的生命周期。 **Access**是Microsoft开发的一种关系型数据库管理系统,以其易用性和灵活性而受到欢迎...
在本项目"JSP.rar"中,JSP被用作后端服务器端的技术,负责处理用户的请求和返回数据。 【MySQL】是流行的开源关系型数据库管理系统,广泛用于存储和管理网站的数据。在这个新闻发布系统中,MySQL用于存储新闻的相关...
【标题】:“jsp的博客系统,tomcat+sql2000”指的是一个基于Java Server Pages(JSP)技术构建的博客平台,该平台运行在Apache Tomcat服务器上,并使用SQL Server 2000作为数据库管理系统。 【知识点详解】 1. ...
综上所述,这个项目涵盖了Java Web开发中的多个重要组成部分,通过IDEA提供的便利开发环境,结合JSP的动态网页特性,Servlet的服务器端处理能力,以及Tomcat的Web服务支持,实现了一个完整的班费管理解决方案。...
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"是一个综合运用了JSP、MySQL和Tomcat技术的论坛系统实例,它展示了如何在Web环境中构建一个可管理的讨论平台,对于学习和理解Web开发具有很高的参考价值。通过深入学习和实践这个...
在本项目中,我们探索的是一个基于Java Web技术的简单活动管理系统。这个系统结合了Java、Servlet、JSP、Tomcat服务器以及MySQL数据库,适用于学习和完成毕业设计或课程设计任务。下面将详细介绍这些关键技术和它们...