我需要在Java代码中获取请求对象.出于某些原因,我无法将此对象传递给我的代码.有什么办法,我可以这样说:getCurrentHTTPServletRequest?
我可以安全地假设我处于Servlet环境中.
Jon*_*eet 18
那么你应该把它传下来,如果你需要的话.你做的任何其他事情都会变得很丑陋.
您可以使用ThreadLocal变量 - 在获取请求时基本上为该特定线程设置上下文,然后稍后再获取它.只要您只需要处理正在处理它的线程中的请求,并且只要您不执行任何时髦的异步请求处理,这将起作用.然而,这很脆弱,正是出于这些原因.
但是,我强烈建议您明确说明您的依赖项.要么传递servlet请求,要么只传递你需要的位.
假设您无法将请求对象传递给调用堆栈,则需要某种共享机制,这不是理想的,但有时是必要的.
Spring为此提供了RequestContextFilter.它使用ThreadLocal,并允许代码通过RequestContextHolder获取当前请求.请注意,此过滤器不要求您使用Spring的任何其他部分:
Servlet 2.3通过LocaleContextHolder和RequestContextHolder将请求公开给当前线程的过滤器.要在web.xml中注册为过滤器.
此过滤器主要用于第三方servlet,例如JSF FacesServlet.在Spring自己的Web支持中,DispatcherServlet的处理就足够了.
如果您打算使用ThreadLocal,那么最好使用现有的,有效的解决方案,而不是冒险陷入困境,哪些ThreadLocal代码容易出错.
| 归档时间: |
|
| 查看次数: |
30624 次 |
| 最近记录: |