Java——处理HTTP请求时,Web容器做了什么?
2017-12-13 14:10
447 查看
这篇文章记录的是个人之前在学习Servlet/JSP没注意到的知识。
这里所用到的Web容器是Tomcat
从抽象层面来看,Web容器是Servlet/JSP唯一认得的HTTP服务器。所以得知道在这种抽象层面下,Web容器如何生成、管理请求/响应对象,为何有这样的架构。也是这篇文章的价值所在!
要注意的是 Tomcat 主要提供了 Web 容器的主要功能,却不是 HTTP服务器的功能,Tomcat附带的HTTP服务器功能太过简单,仅仅是为了给开发者提供便利而已。
我们先来看看从请求到 Servlet 处理的关系如下:
浏览器<—>实体服务器<—>HTTP服务器程序<—>Web容器<—>Servlet
当请求来到了HTTP服务器,服务器会转交给Web容器,此时容器会创建一个代表当前的请求的 HttpServletRequest 对象,并将请求相关信息设置给该对象。同样也会创建一个响应的对象 HttpServletResponse,作为之后要对客户端进行响应的 Java 对象。
接着,容器会读取我们编写 Servlet 中的 @WebServlet 标注或者 web.xml 配置,找到能处理该请求的 Servlet。将 HttpServletRequest 对象、 HttpServletResponse 对象作为参数传入service() 方法中,该方法会根据HTTP的请求方式,调用对应的 doXXX() 方法。
接着在doGet() / doPost() 中,使用 getParameter() 取得请求参数;使用 getWriter() 取得输出用的 PrintWriter 对象,并进行各项响应处理。
对 PrintWriter 做的输出操作,最后通过 Web 容器转换为 HTTP 响应,再由 HTTP 服务器对浏览器进行响应。
最后容器将该次的 HttpServletRequest 对象、 HttpServletResponse 对象销毁回收。
So,总的来说,如果没有Web容器
HttpServletRequest 对象、 HttpServletResponse 对象的创建
输出 HTTP 响应的转换
HttpServletRequest 对象、 HttpServletResponse 对象的销毁与回收
以上这些,都得自己动手去完成,可以想象一下得有多麻烦!
PS:参考书目《JSP/Servlet学习笔记》
如果有什么说的不对的,还希望各位能不吝指导,祝大家好运!
这里所用到的Web容器是Tomcat
从抽象层面来看,Web容器是Servlet/JSP唯一认得的HTTP服务器。所以得知道在这种抽象层面下,Web容器如何生成、管理请求/响应对象,为何有这样的架构。也是这篇文章的价值所在!
要注意的是 Tomcat 主要提供了 Web 容器的主要功能,却不是 HTTP服务器的功能,Tomcat附带的HTTP服务器功能太过简单,仅仅是为了给开发者提供便利而已。
我们先来看看从请求到 Servlet 处理的关系如下:
浏览器<—>实体服务器<—>HTTP服务器程序<—>Web容器<—>Servlet
当请求来到了HTTP服务器,服务器会转交给Web容器,此时容器会创建一个代表当前的请求的 HttpServletRequest 对象,并将请求相关信息设置给该对象。同样也会创建一个响应的对象 HttpServletResponse,作为之后要对客户端进行响应的 Java 对象。
接着,容器会读取我们编写 Servlet 中的 @WebServlet 标注或者 web.xml 配置,找到能处理该请求的 Servlet。将 HttpServletRequest 对象、 HttpServletResponse 对象作为参数传入service() 方法中,该方法会根据HTTP的请求方式,调用对应的 doXXX() 方法。
接着在doGet() / doPost() 中,使用 getParameter() 取得请求参数;使用 getWriter() 取得输出用的 PrintWriter 对象,并进行各项响应处理。
对 PrintWriter 做的输出操作,最后通过 Web 容器转换为 HTTP 响应,再由 HTTP 服务器对浏览器进行响应。
最后容器将该次的 HttpServletRequest 对象、 HttpServletResponse 对象销毁回收。
So,总的来说,如果没有Web容器
HttpServletRequest 对象、 HttpServletResponse 对象的创建
输出 HTTP 响应的转换
HttpServletRequest 对象、 HttpServletResponse 对象的销毁与回收
以上这些,都得自己动手去完成,可以想象一下得有多麻烦!
PS:参考书目《JSP/Servlet学习笔记》
如果有什么说的不对的,还希望各位能不吝指导,祝大家好运!
相关文章推荐
- java1.6的httpServer。可直接获取和处理http请求
- HttpClient(apache) 与 java.net.URL ---处理http请求
- HTTP头部详解及使用Java套接字处理HTTP请求
- JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
- 【Java面试题】22 JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
- JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
- HTTP头部详解及使用Java套接字处理HTTP请求
- JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
- Web容器自己主动对HTTP请求中參数进行URLDecode处理
- HTTP头部详解及使用Java套接字处理HTTP请求
- HTTP头部详解及使用Java套接字处理HTTP请求
- 请描述Java中异常处理机制的简单原理和应用,并说明Error与Exception有什么区别?
- java里面的web容器是指什么
- Java实现Http请求参数对特殊字符的处理办法
- Java服务端使用HttpServer处理Http请求
- JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
- JAVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally 分别代表什么意义?在 try 块中可以抛出异常吗?
- 什么叫事务?Java如何处理事务呢?
- HTTP头部详解及使用Java套接字处理HTTP请求
- 牛客网Java刷题知识点之什么是异常、异常处理的原理是什么、为什么要使用异常、异常体系、运行时异常、普通异常、自定义异常、异常链