我怀疑HttpServletRequest
生命对象。 request
对象进入controller
后是否被销毁?
答案 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方法(POST
,PUT
,{{1}}等)。然后请求仍然有效,直到请求 - 响应对在整个过滤器链中循环回来。然后它将被销毁或重置(在用于另一个HTTP请求之前)。