tomcat 是如何处理jsp和servlet请求

我们以一个具体的例子,来跟踪TOMCAT, 看看它是如何把Request一层一层地递交给下一个容器, 并最后交给Wrapper来处理的。

以http://localhost:8080/web/login.jsp为例子

主要分为3个部分: 前期, 中期, 和末期。

前期:讲解了在浏览器里面输入一个URL,是怎么被tomcat抓住的。

中期:讲解了被tomcat抓住后,又是怎么在各个容器里面穿梭, 最后到达最后的处理地点。

末期:讲解到达最后的处理地点后,又是怎么具体处理的。

2、  前期 Request的born.

在这里我先简单讲一下request这个东西。

我们先看着这个URL:http://localhost:8080/web/login.jsp  它是动用了8080端口来进行socket通讯的。

我们知道, 通过

InputStream in = socket.getInputStream() 和

OutputStream out = socket.getOutputStream()

就可以实现消息的来来往往了。

但是如果把Stream给应用层看,显然操作起来不方便。

所以,在tomcat 的Connector里面, socket被封装成了Request和Response这两个对象。

我们可以简单地把Request看成管发到服务器来的数据,把Response看成想发出服务器的数据。

8080端口传过来由httpd协议封装的数据,解析成Request和Response对象。

把Request适配成实现了ServletRequest和HttpServletRequest接口的CoyoteRequest.

中期。 在各个容器间的穿梭。

Request在各个容器里面的穿梭大致是这样一种方式:

每个容器里面都有一个管道(pipline), 专门用来传送Request用的。

管道里面又有好几个阀门(valve), 专门用来过滤Request用的。

在管道的低部通常都会放上一个默认的阀们。 这个阀们至少会做一件事情,就是把Request交给子容器。

。。。。得更新一下这个用户的session,由manager更新一下用户的session信息

具体的Context 容器去继续处理Request

末期。 不同的需求是怎么处理的.

StandardWrapper

之前对Wrapper没有做过讲解,其实它是这样一种东西。

我们在处理Request的时候,可以分成3种。

处理静态的: org.apache.catalina.servlets.DefaultServlet

处理jsp的: org.apache.jasper.servlet.JspServlet

处理servlet的: org.apache.catalina.servlets.InvokerServlet

不同的request就用这3种不同的servlet去处理。

Wrapper就是对它们的一种简单的封装,有了Wrapper后,我们就可以轻松地拦截每次的Request。也可以容易地调用servlet的init()和destroy()方法, 便于管理

具体情况是:

如果request是找jsp文件,StandardWrapper里面就会封装一个org.apache.jasper.servlet.JspServlet去处理它。

如果request是找 静态资源 ,StandardWrapper里面就会封装一个org.apache.jasper.servlet.DefaultServlet  去处理它。

如果request是找servlet ,StandardWrapper里面就会封装一个org.apache.jasper.servlet.InvokerServlet 去处理它。

时间: 2024-10-28 15:16:01

tomcat 是如何处理jsp和servlet请求的相关文章

Tomcat手工搭建Jsp和Servlet程序

要执行J2EE的程序,就必须安装相关的容器.而怎样选择JSP+Servlet模式.Tomcat是非常重要的选择之中的一个,是世界上最为广泛的Servlet和JSP容器. 下载: 1. URL: http://tomcat.apache.org/  Tomcat 7.0.52 2. 单击左面"Tomcat 7.0",进入Tomcat 7.0.52页面 3. 单击Binary Distributions以下的,操作系统匹配的ZIP文件. 配置: 1. 将下载后的文件解压缩到D:\apach

Tomcat下JSP、Servlet和JavaBean环境的配置

经常看到jsp的初学者问tomcat下如何配置jsp.servlet和bean的问题,于是总结了一下如何tomcat下配置jsp.servlet和ben,希望对那些初学者有所帮助. 第一步:下载j2sdk和tomcat:到sun官方站点(http://java.sun.com/j2se/1.4.2/download.html)下载j2sdk,注意下载版本为Windows Offline Installation的SDK,同时最好下载J2SE 1.4.2 Documentation,然后到tomc

Tomcat6.0下的jsp、servlet和javabean的配置

第一步:下载jdk和tomcat: 第二步:安装和配置你的jdk和tomcat:执行jdk和tomcat的安装程序,然后设置按照路径进行安装即可.1.安装jdk以后,需要配置一下环境变量,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的jdk安装在C:\Program Files\Java): JAVA_HOME=C:\Program Files\Java\jdk1.6.0_10 classpath=.;%JAVA_HOME%\lib\dt.jar;%

从0开始学Java——JSP和Servlet——Tomcat和Apache的区别

从<JSP & Servlet 学习笔记>的第一章,了解到web容器:“Web容器是Servlet/jsp唯一认得的http服务器”. 在Java中,容器的类型有多种,这里要说的是Web容器,他在整个servlet请求路线上的位置如下: 做java开发的人一般都在用tomcat来作为web服务器,但是从上图可以看到这里其实http服务器和web容器之间是有区别的,那么tomcat算是一个http服务器还是web容器呢?假如tomcat只是一个web容器,那么在他的链条上对应的http服

servlet,jsp,tomcat,jdk对应版本关系,如何查看jsp和servlet版本信息

Servlet和JSP规范版本对应关系: Servlet规范版本 JSP版本 JSF版本 JAVA EE版本 Servlet2.3 JSP1.2.JSP1.1   J2EE1.3 Servlet2.4 JSP2.0 JSF1.1 J2EE1.4 Servlet2.5 JSP2.1 JSF1.2.JSF2.0 Java EE5 Servlet3.0 JSP2.2   Java EE6 Tomcat所对应的Servlet/JSP规范和JDK版本: Servlet/JSP Spec Apache To

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验. 1.说一说Servlet生命周期(非常重要) Servlet生命周期包括三部分: 初始化:Web容器加载servlet,调用init()方法 只执行一次 处理请求:当请求到达时,运行其service()方法.service()自动调用与请求相对应的doXXX

Jsp与Servlet面试题

一.jsp有哪些内置对象作用分别是什么  答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): request  用户端请求,此请求会包含来自GET/POST请求的参数  response  网页传回服务器端的回应  pageContext  网页的属性是在这里管理  session  与请求有关的会话期  application  服务器启动时创建,服务器关闭时停止,为多个应用程序保存信息  out  用来传送回应的输出  config  servlet的构架部件  page

JSP和Servlet面试题

1.讲下servlet的执行流程. Servlet的执行流程也就是servlet的生命周期,当服务器启动的时候生命周期开始,然后通过init()<启动顺序根据web.xml里的startup-on-load来确定加载顺序>方法初始化servlet,再根据不同请求调用doGet或doPost方法,最后再通过destroy()方法进行销毁. 2.Get和Post的区别 在页面提交数据时,get的数据大小有限制4k,post没有限制,get请求提交的数据会在地址栏显示,post不显示,所以post比

(转载)关于JSP和Servlet乱码处理

JSP和Servlet的中文乱码处理 前几天学习了JSP和Servlet中有关中文乱码的一些问题,写成了博客,今天进行更新一下.应该是可以解决日常的乱码问题了.现在作以下总结希望对需要的人有所帮助.我也是刚学,所以有不足之处希望谅解. 一.表单提交时出现乱码: 在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式.所以请求的时候便有get请求和post请求.以前我一直以为get请求和post请求方式出现的乱码的解决方式是一