springMVC拦截器和异常处理

拦截器

  1. perHandle():拦截请求(请求前触发)
  2. postHandle():拦截响应(响应前触发)
  3. 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;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值