拦截器
- perHandle():拦截请求(请求前触发)
- postHandle():拦截响应(响应前触发)
- afterCompletion():当视图渲染结束,会触发
拦截器的使用
配置xml
<mvc:interceptors>
<!-- 将自定义拦截器添加到springMVC IOC容器中 ,默认拦截全部请求-->
<bean class="com.znsd.springmvc.interceptor.ExcetionInterceptor"></bean>
</mvc:interceptors>
如果只想拦截部分,如下:
<mvc:interceptors>
<mvc:interceptor>
<!-- 指定拦截路径,ant风格,拦截全部-->
<mvc:mapping path="/**"/>
<!-- 指定不拦截路径 -->
<mvc:exclude-mapping path="/dateformat"/>
<!-- 将自定义拦截器添加到springMVC IOC容器中 ,默认拦截全部请求-->
<bean class="com.znsd.springmvc.interceptor.ExcetionInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
添加拦截器(实现HandlerInterceptor接口)
public class ExcetionInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("视图渲染完毕");
// TODO Auto-generated method stub
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("请求之前");
// TODO Auto-generated method stub
}
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
// TODO Auto-generated method stub
System.out.println("响应之前");
return true;//true代表拦截之后依然放行,false拦截之后不会放行,请求终止
}
}
异常处理
通过xml配置将异常捕获并跳转到错误页面
<!-- SimpleMappingExceptionResolver:以配置形式,处理异常(针对一些简单的解决异常) -->
<bean id="id" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
//匹配算数异常,将其捕获并跳转到error页面
<prop key="java.lang.ArithmeticException">error</prop>
</props>
</property>
</bean>
@Controller
public class Test {
@RequestMapping(value ="/test1",method = RequestMethod.GET)
public String test1(Integer i) {
int count=10;
count=10/i;
return "test";
}
}
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
//默认错误显示是exception
<h1>${exception}</h1>
</body>
</html>
通过注解捕获异常并跳转到错误页面
@ControllerAdvice
public class Exceptions{
//捕获算数异常(全局)
@ExceptionHandler({ArithmeticException.class})
public ModelAndView ArithmeticException(Exception e) {
ModelAndView mv=new ModelAndView();
//将异常信息放入ModelAndView对象中
mv.addObject("exception",e.getMessage());
//将返回页面放入ModelAndView对象中
mv.setViewName("error");
return mv;
}
}