【问题标题】:What's the difference between a Handler, a Resolver and an Interceptor in Spring MVC?Spring MVC 中的 Handler、Resolver 和 Interceptor 有什么区别?
【发布时间】:2011-09-22 15:19:59
【问题描述】:

Spring MVC 中的 Handler、Resolver 和 Interceptor 似乎都在做类似的事情——即提供在请求到达控制器之前对其进行预处理的能力?

这三者有何区别?

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    它们不一样,而且据我所知,解析器并没有真正参与预处理请求。拦截器在处理程序之前开火。来自Spring MVC docs

    拦截器:

    Spring 的处理程序映射机制具有处理程序拦截器的概念,当您想将特定功能应用于某些请求(例如检查主体)时,它非常有用。 位于处理程序映射中的拦截器必须实现 org.springframework.web.servlet 包中的 HandlerInterceptor。该接口定义了三种方法,一种在实际处理程序执行前调用,一种在处理程序执行后调用,另一种在请求完成后调用。这三种方法应该提供足够的灵活性来进行各种预处理和后处理。

    处理程序:

    一个 DispatcherServlet,它将请求分派给处理程序,具有可配置的处理程序映射、视图分辨率、区域设置和主题分辨率以及对上传文件的支持。默认处理程序基于@Controller 和@RequestMapping 注解,提供范围广泛的灵活处理方法。

    解析器:

    • 视图解析器:视图解析器是能够将视图名称解析为视图的组件
    • 语言环境解析器:语言环境解析器是一个能够解析客户端正在使用的语言环境的组件,以便能够提供国际化视图
    • 主题解析器:主题解析器能够解析您的 Web 应用程序可以使用的主题,例如,提供个性化布局
    • 多部分文件解析器:多部分文件解析器提供处理从 HTML 表单上传文件的功能
    • 处理程序异常解析器:处理程序异常解析器提供将异常映射到视图或实现其他更复杂的异常处理代码的功能

    【讨论】:

    • 是否可以修改这些组件的执行顺序。假设我希望在调用视图解析器之前调用拦截器。这可能吗?
    猜你喜欢
    • 1970-01-01
    • 2014-06-12
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 2014-02-07
    • 2015-09-25
    相关资源
    最近更新 更多