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 去处理它。

  • 相关阅读:
    第四周查漏补缺20165307
    第四周作业 20165307
    第三周作业 20165307
    20165307 第一次测试总结
    20165307 预备作业3 Linux安装及学习
    20165307 学习基础和C语言基础调查
    20165307 我期望的师生关系
    第十周课下补做
    20165336 2016-2017-2 《Java程序设计》第9周学习总结
    20165336 实验三 敏捷开发与XP实践
  • 原文地址:https://www.cnblogs.com/gaoxiangde/p/4338817.html
Copyright © 2011-2022 走看看