【发布时间】:2014-11-20 02:25:49
【问题描述】:
我对@987654321@ 生命物体有疑问。 request 对象进入controller 后是否被销毁?
【问题讨论】:
我对@987654321@ 生命物体有疑问。 request 对象进入controller 后是否被销毁?
【问题讨论】:
HttpServletRequest 对象的生命周期就是:服务 HTTP Servlet 请求的时间。
它可以在调用 servlet 的doGet()、doPost() 等方法之前创建,之后可能立即被销毁。仅在服务请求期间使用它才有效。
注意:然而 Servlet 容器可能为多个请求重用 HttpServletRequest 对象(通常是这种情况),但它们将被“清理”或重置,因此请求之间不会泄漏任何对象(如参数或属性)。这仅仅是由于性能问题:重置HttpServletRequest 对象比丢弃现有对象并创建新对象要快得多且成本更低。
在一个典型的 Servlet 容器实现中,如果一个 HTTP 请求进来,当请求的 HTTP 输入数据被 Servlet 容器解析时,就会创建一个HttpServletRequest。整个请求可能会被延迟初始化(例如,参数可能只有在真正被访问时才被解析和填充,例如通过getParameter() 方法)。然后这个HttpServletRequest(扩展ServletRequest)通过Servlet过滤器,然后传递给Servlet.service(),它将基于HTTP方法(GET, POST、PUT 等)。然后请求将仍然有效,直到请求-响应对在整个过滤器链中循环返回。然后它将被销毁或重置(在用于另一个 HTTP 请求之前)。
【讨论】:
HttpServletRequest 是通过 spring 的@Async 传递的,在某些时候它是字段在哪里被清除。您的输入 - “但是 Servlet 容器可能会为多个请求重用 HttpServletRequest 对象(通常是这种情况),但它们将被“清理”或重置,因此请求之间不会泄漏任何对象(如参数或属性)”是 绝对正确!。谢谢!