ace*_*es. 63 spring spring-mvc interceptor servlet-filters
Spring中的HandlerInterceptor现在可以配置为仅在某些URL上使用调用<mvc:interceptors>.
Servlet过滤器可以实现相同的功能(日志记录,安全性等).那应该用哪一个?
我认为使用Interceptors,可以使用ModelAndView对象与模型一起工作,因此它具有更多优势.任何人都可以提出过滤器或拦截器比另一个有优势的场景吗?
Ral*_*lph 58
该org.springframework.web.servlet.HanderInterceptor接口的JavaDoc本身有两个段落讨论这个问题:
HandlerInterceptor基本上类似于Servlet 2.3 Filter,但与后者相反,它只允许自定义预处理,禁止执行处理程序本身,以及自定义后处理.过滤器功能更强大,例如,它们允许交换传递链中的请求和响应对象.请注意,过滤器在web.xml中配置,web.xml是应用程序上下文中的HandlerInterceptor.
作为基本准则,细粒度处理程序相关的预处理任务是HandlerInterceptor实现的候选者,尤其是分解出来的公共处理程序代码和授权检查.另一方面,过滤器非常适合请求内容和视图内容处理,如多部分表单和GZIP压缩.这通常表示何时需要将过滤器映射到某些内容类型(例如图像)或所有请求.
ska*_*man 25
Spring Handler拦截器允许您挂钩请求生命周期的更多部分,并在此过程中访问更多信息.与过滤器相比,它们通常与请求/响应周期更紧密地耦合.
将请求/响应视为黑匣子系统时,过滤器更适合.无论servlet如何实现,它们都可以工作.
如果您正在使用Spring MVC,那么没有理由将新逻辑编写为servlet过滤器.所有过滤器都可以做到,拦截器可以更轻松,更优雅地完成.
还要记住,servlet过滤器比拦截器存在的时间要长得多.
Servlet Filter:
顾名思义,过滤器是由 servlet 容器针对每个传入的 http 请求和每个 http 响应执行的 Java 类。通过这种方式,可以在 HTTP 传入请求到达资源(例如 JSP 页面、servlet 或简单的静态页面)之前对其进行管理;以同样的方式可以在资源执行后管理 HTTP 出站响应。
此行为允许实现在许多不同上下文中重用的通用功能。
如上图所示,过滤器在Web容器中运行,因此其定义也将包含在web.xml文件中。
过滤器主要包括三种方法:
Interceptor:
Spring 拦截器与 Servlet 过滤器类似,但它们在 Spring 上下文中运行,因此在管理 HTTP 请求和响应方面功能强大,但它们可以实现更复杂的行为,因为可以访问所有 Spring 上下文。
Spring拦截器在SpringMVC上下文中执行,因此它们已在rest-servlet.xml文件中定义:
拦截器主要包括三个方法:
使用 Spring 拦截器,您可以访问可能有用的 Handler。此外,使用 Spring 拦截器,您可以在视图呈现之前和视图呈现之后访问执行逻辑。
| 归档时间: |
|
| 查看次数: |
65111 次 |
| 最近记录: |