标签:cat 乱码 多个 处理器 应用 coding throw ada java
Spring MVC 中的拦截器(Interceptor)类似于 Servlet 中的过滤器(Filter),它主要用于拦截用户请求并做出相应的处理。
过滤器与拦截器的区别:拦截器是AOP思想的具体应用。
过滤器
拦截器
通过实现 HandlerInterceptorAdapter
接口,并向 Spring MVC 注册既可使用自定义拦截器。
HandlerInterceptorAdapter
接口提供了三个方法:
preHandle()
在业务处理器处理请求之前被调用
- 该方法会在 Controller 方法前执行
- 返回值表示是否继续后续操作:
- 返回 true 时,表示继续向下执行;
- 返回 false 时,会中断后续所有操作(包括调用下一个拦截器和 Controller 中的方法执行)。
postHandle()
在业务处理器处理请求执行完成后,生成视图之前执行
- 在 Controller 方法调用之后,且解析视图之前执行。
- 可以通过此方法对模型和视图做出进一步修改。
afterCompletion()
在 DispatcherServlet 完全处理完请求后被调用,可用于清理资源等。
- 该方法会在整个请求完成(即,视图渲染结束)之后执行。
- 可以通过此方法实现一些资源清理、记录日志信息等工作。
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
<mvc:interceptors>
<bean class="com.xu.web.interceptor.MyInterceptor1"/> <!-- 1 -->
<mvc:interceptor> <!-- 2 -->
<mvc:mapping path="/**"/> <!-- 3 -->
<mvc:exclude-mapping path=""/> <!-- 4 -->
<bean class="com.xu.web.interceptor.MyInterceptor2"/> <!-- 5 -->
</mvc:interceptor>
<mvc:interceptor> <!-- 6 -->
<mvc:mapping path="/hello"/> <!-- 7 -->
<bean class="com.xu.web.interceptor.MyInterceptor3"/> <!-- 8 -->
</mvc:interceptor>
</mvc:interceptors>
1
所示,在 interceptors 下注册的拦截器是全局拦截器,会拦截所有请求2 | 6
所示,在 interceptor 下注册的拦截器是局部拦截器,需要明确配置该拦截器拦截哪些请求。3
所示,表示拦截所有路径4
所示,表示在拦截某些请求的前提下,排除/不拦截某些请求7
所示,表示拦截所有以 /hello
开头的路径当设置多个拦截器时,先按顺序调用 preHandle
方法,然后逆序调用每个拦截器的 postHandle
和 afterCompletion
方法,即:
Spring MVC 专门提供了一个 Filter 用于解决 POST 请求乱码问题,只需要在 web.xml 文件中配置使用即可:
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
get 请求,一般可以通过修改 tomcat 配置设置文件解决。
标签:cat 乱码 多个 处理器 应用 coding throw ada java
原文地址:https://www.cnblogs.com/whitespaces/p/12455031.html