zoukankan      html  css  js  c++  java
  • 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 去处理它。

  • 相关阅读:
    将博客搬至CSDN
    05 Python字符串的通用操作
    02 Shell变量
    01 Shell脚本编程入门知识
    windows10安装Python环境
    03 Python数值类型及数字类型详解
    02 变量和语句
    01 交互解释器
    poi.jar处理excel表
    (41)java并发包中的线程池种类及特性介绍
  • 原文地址:https://www.cnblogs.com/gaoxiangde/p/4338817.html
Copyright © 2011-2022 走看看