一尘不染

HttpServletRequest重用

tomcat

似乎有些servlet容器在请求之间重用了HttpServletRequest(或更一般而言ServletRequest)实例。

题:

有人可以 Servlet规范 地方这种行为(或这些实例的引用的有效性规则)的 定义


阅读 234

收藏
2020-06-16

共1个答案

一尘不染

Servlet API中未定义它。这是一个实现细节。

在3.11中用于请求对象(对于响应对象则在5.6中)

每个请求对象仅在servlet的service方法的范围内或在过滤器的doFilter方法的范围内有效,除非对该组件启用了异步处理并且在请求对象上调用了startAsync方法。在发生异步处理的情况下,请求对象将保持有效,直到在AsyncContext上调用complete为止。
容器通常回收请求对象,以避免产生请求对象的性能开销。
开发人员必须意识到,不建议维护对未在上述范围之外调用startAsync的请求对象的引用,因为这样做可能会产生不确定的结果

它不是必需的,而是常用的。

规范中的内容(请参阅第2.3.3节)是单线程模型。一个请求,一个线程。这允许清除请求并重新使用。

2020-06-16