我们以一个具体的例子,来跟踪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 去处理它。

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

  1. Tomcat容器、JSP和Servlet

    目录 JSP Tomcat.JSP和Servlet JSP JSP全名为Java Server Pages,其根本是一个简化的Servlet设计.JSP技术有点类似ASP技术,它是在传统的HTML网页 ...

  2. Tomcat手工搭建Jsp和Servlet程序

    要执行J2EE的程序,就必须安装相关的容器.而怎样选择JSP+Servlet模式.Tomcat是非常重要的选择之中的一个,是世界上最为广泛的Servlet和JSP容器. 下载: 1. URL: htt ...

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

    经常看到jsp的初学者问tomcat下如何配置jsp.servlet和bean的问题,于是总结了一下如何tomcat下配置jsp.servlet和ben,希望对那些初学者有所帮助. 第一步:下载j2s ...

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

    第一步:下载jdk和tomcat: 第二步:安装和配置你的jdk和tomcat:执行jdk和tomcat的安装程序,然后设置按照路径进行安装即可.1.安装jdk以后,需要配置一下环境变量,在我的电脑- ...

  5. JSP和Servlet及浏览器与tomcat交互过程

    JSP与SERVLET区别 JSP在本质上就是Servlet,但是两者的创建方式不一样. JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.因此在实际应用中采用Servlet来控制业务流程 ...

  6. servlet及jsp之间的请求转发

    1.servlet间的请求转发 <dependencies> <dependency> <groupId>javax.servlet</groupId> ...

  7. Jsp与Servlet面试题

    一.jsp有哪些内置对象作用分别是什么  答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): request  用户端请求,此请求会包含来自GET/POST请求的参数  respo ...

  8. JSP和Servlet面试题

    1.讲下servlet的执行流程. Servlet的执行流程也就是servlet的生命周期,当服务器启动的时候生命周期开始,然后通过init()<启动顺序根据web.xml里的startup-o ...

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

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

随机推荐

  1. cocoa pods 升级遇到的问题

    1. cocoa pods 升级遇到的问题 运行 sudo gem update --system 报错 Updating rubygems-update ERROR: While executing ...

  2. CCNA2.0笔记_ACL

    要点: 1.按顺序执行,一旦某条语句匹配,后续语句不再处理. 2.默认ACL 结尾语句是deny any,所以你要记住的是在ACL 里至少要有1 条permit 语句. 3.记得创建了ACL 后要把它 ...

  3. spring mvc中拦截器配置mvc:interceptors

    其实在mvc:interceptors标签中,有两种类型的配置,一种直接配置一个bean(bean和ref归为一类),另一种还要配置上拦截的路径和排除的路径.直接配置的bean那就代表对所有的请求进行 ...

  4. Unix系统编程()main函数的命令行参数

    命令行参数输入双引号是什么效果? 好像可以去空格化.

  5. java 搭建web项目

    从git到maven都是莫名其妙的装上了.... 然后看了下报错,是数据的事,把链接字符串一改,数据库一建,ok,跑起来了 基本上没任何问题,唯一的问题就是我的网速太慢,maven了一夜的样子....

  6. 消耗资源的SQL的定位方法;

    解答:select sql_text from v$sql where disk_reads > 1000 or (executions > 0 and buffer_gets/execu ...

  7. 简单说明什么是递归?什么情况会使用?并使用java实现一个简单的递归程序。

    解答: 1)递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象. 2)递归算法一般用于解决三类问题: a.数据的定义是按递归定义的.(Fib ...

  8. ParseChat应用源代码ios版

    ParseChat是一个全然原生的iPhone应用程序.用于创建实时的.基于文本的Parse聊天室.功能:支持多台设备之间的实时聊天,可动态加入新的聊天室,支持基本配置,可发送和接收音效以及随意大小的 ...

  9. jquery如何判断表格同一列不同行input数据是否重复

    function hasRepeat(objId,columnIndex){ var arr = []; $("#"+objId+" tbody tr").ea ...

  10. DB水平切换要点

    分区健选择 数据应该怎样拆分,依照什么纬度来拆分 节点路由 应用程序写死/客户端(TDDL,cobar-client)/中间层(cobar-server) 固定分配/动态分配/混合 分片数据均衡 某些 ...