区别 | 过滤器(Filter) | 拦截器(Interceptor) |
---|---|---|
使用范围 | Servlet规范中的一部分,任何Java Web工程都可以使用 | SpringMVC框架自己的,只有集成了SpringMVC框架的工程才能使用 |
拦截范围 | 在url-pattern中配置了/*之后,可以对所有要访问的资源拦截 | 在<mvc:mapping path=“”/>中配置了/**之后,也可以对所有资源进行拦截,但是可以通过<mvc:exclude-mapping path=“”/>标签排除不需要拦截的资源 |
public class myInterceptor implements HandlerInterceptor {
// 在目标方法之前执行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle 执行目标方法之前执行");
return true;// 如果该处返回false,那么往后的操作都将被拦截无法进行下一步操作
}
// 在目标方法执行后 视图对象返回前执行
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle 在目标方法执行后 视图对象返回前执行");
}
// 在流程都执行完毕后执行
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion 在流程都执行完毕后执行");
}
}
<mvc:interceptors>
<!-- 设置一个拦截器 -->
<mvc:interceptor>
<mvc:mapping path="/**"/><!-- 拦截资源文件地址 -->
<bean class="com.DemoTestNode.myInterceptor"></bean><!-- 指定拦截器类 -->
</mvc:interceptor>
</mvc:interceptors>
<!-- 配置简单异常处理器-->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="error(视图.jsp)"></property>
<property name="exceptionMappings">
<map>
<entry key="java.lang.NullPointerException" value="404error(视图.jsp)"></entry>
</map>
</property>
</bean>