您的位置:首页 > 理论基础 > 计算机网络

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学习笔记》

如果有什么说的不对的,还希望各位能不吝指导,祝大家好运!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐