HttpServletRequest对象的生命是什么?

时间:2014-09-25 10:36:52

标签: java servlets request

我怀疑HttpServletRequest生命对象。 request对象进入controller后是否被销毁?

1 个答案:

答案 0 :(得分:7)

HttpServletRequest对象的生命周期就是:提供HTTP Servlet请求的时间。

可以在调用servlet的doGet()doPost()等方法之前创建它,并且可能在此之后被销毁。只有在提供请求时使用它才有效。

注意:然而,Servlet容器可能会重复使用HttpServletRequest个对象来处理多个请求(通常就是这种情况),但它们会被“清理”或重置,因此请求之间不会泄漏任何对象(如参数或属性)。这仅仅是由于性能问题:重置HttpServletRequest对象比抛弃现有对象并创建新对象更快更便宜。

在典型的Servlet容器实现中,如果HTTP请求进入,则在Servlet容器解析请求的HTTP输入数据时立即创建HttpServletRequest。整个请求可能会被懒惰地初始化(例如,如果真的只能通过getParameter()方法访问参数,则只能解析和填充参数)。然后,此HttpServletRequest(扩展ServletRequest)将通过Servlet过滤器传递,然后传递给Servlet.service()doGet()会将调用分派给doPost()GET等基于HTTP方法(POSTPUT,{{1}}等)。然后请求仍然有效,直到请求 - 响应对在整个过滤器链中循环回来。然后它将被销毁或重置(在用于另一个HTTP请求之前)。