Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HandlerInterceptor和WebRequestInterceptor之间的区别?_Java_Spring_Spring Mvc_Servlet 3.0 - Fatal编程技术网

Java HandlerInterceptor和WebRequestInterceptor之间的区别?

Java HandlerInterceptor和WebRequestInterceptor之间的区别?,java,spring,spring-mvc,servlet-3.0,Java,Spring,Spring Mvc,Servlet 3.0,在为我的应用程序编写拦截器时,我注意到HandlerInterceptor和WebRequestInterceptor 我注意到,HandlerInterceptor的方法采用了HttpServletRequest、HttpServletResponse、对象(handler)和其他参数 而WebRequestInterceptortakeWebRequest(HttpServletRequest的包装) 但我不知道这两个拦截器之间有什么区别 虽然看到了SpringAPI,但我可以猜测WebRe

在为我的应用程序编写拦截器时,我注意到
HandlerInterceptor
WebRequestInterceptor

我注意到,
HandlerInterceptor
的方法采用了
HttpServletRequest
HttpServletResponse
对象(handler)和其他参数
而
WebRequestInterceptor
take
WebRequest
(HttpServletRequest的包装)

但我不知道这两个拦截器之间有什么区别


虽然看到了SpringAPI,但我可以猜测
WebRequestInterceptor
不能提交响应,而
HandlerInterceptor
可以这样做。如果我错了,请在此更正。

使用
手柄拦截器
可以:

  • 更改
    preHandle
    方法中的
    HttpServletResponse
  • 基于
    处理程序
    对象应用筛选器。例如,您可以根据
    HandlerMethod
  • 通过在
    preHandle
    方法中返回
    false
    来禁止执行处理程序
HandlerInterceptor
可用于大量预处理方面,例如用于授权检查,或常见的处理程序行为,如区域设置、主题更改或添加
缓存控制
头。它的主要目的是允许分解出重复的处理程序代码

WebRequestInterceptor
的一个典型用例是准备上下文资源(例如Hibernate
会话
),并将它们作为请求属性或线程本地对象公开。此外,您还可以在成功执行处理程序后修改这些上下文资源(例如,刷新Hibernate
会话
)。例如,
openentitymanagerinviewsinterceptor
将JPA
EntityManager
绑定到线程,以完成请求的整个处理

虽然看到了SpringAPI,但我猜WebRequestInterceptor可以 不提交响应,而HandlerInterceptor可以这样做。请 如果我错了,请纠正我


WebRequestInterceptor
接口刻意简化,以尽可能减少通用请求拦截器的依赖性。如果您需要更改响应,您应该使用
HandlerIntercepter
Filter
s.

是的,我在这里也看到了这一点:。但我的意思是,这仅仅是为了这些目的吗?在
WebRequestInterceptor
中,您可以直接修改模型而不响应这就是我要问的,这就是为什么它的方法签名中没有任何响应参数(HttpServletResponse),如果您需要更改为响应,使用
handler拦截器
过滤器