SpringMVC自定义拦截器与异常处理

一、自定义拦截器

Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口。

自定义拦截器可分为两步:1.自定义实现类实现 HandlerInterceptor接口;2.在springmvc配置文件中配置相对应的拦截器

1.自定义实现类实现 HandlerInterceptor接口;

创建一个普通类,实现HandlerInterceptor接口,不要忘记加上@Controller注解;实现接口中的方法:

preHandle():该方法在目标方法之前被调用,
若返回值为true,则继续调用后续的拦截器和目标方法
若返回值为false,则不会再调用后续的拦截器和目标方法
可以考虑做权限,日志或者事务等!

postHandle():调用目标方法之后,但渲染视图之前被调用
    可以对请求域中的属性或者视图做出修改!

afterCompletion():渲染视图之后被调用,   
可以在该方法中进行一些资源清理的操作。

2.在springmvc配置文件中配置相对应的拦截器

	<mvc:interceptors>
			<!--配置自定义拦截器 ,所有的路径都拦截 -->
			<bean class="com.neuedu.controller.Myinter"></bean>
			<!-- class为自己创建的实现了 HandlerInterceptor接口类的全类名-->
		</mvc:interceptors>
执行顺序:preHandle方法——请求映射的方法——postHandle方法——afterCompletion方法

     

多拦截器

创建两个类,分别实现HandlerInterceptor接口,不要忘记加上@Controller注解;实现接口中的方法

配置springmvc.xml文件

<mvc:interceptors><!-- 第一层拦截器,拦截所有请求 -->	
		<bean class="com.neuedu.controller.Myinter"></bean>
		<mvc:interceptor ><!-- 第二层拦截器 -->
		<mvc:mapping path="/abc/*"/><!-- mapping 后的path是只拦截该路径 -->
		<mvc:exclude-mapping path="/abc/testInterceptor"/>
		<!-- exclude-mapping 是除了此路径,其他的路径都拦截 。只能与mvc:mapping连用-->
			<bean class="com.neuedu.controller.SecondInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>
执行顺序:


二、SpringMVC的异常处理

springMVC处理事件时,有可能发生异常,这时我们要进行异常处理。

异常处理分为两步:1.配置springmvc.xml文件;2.写异常映射。

1.配置springmvc.xml文件;

在springmvc.xml文件中加入<mvc:annotation-driven>标签;

2.写异常映射:

在当前Handler中定义由@ExceptionHandler注解修饰的方法,用于处理异常信息!

@ExceptionHandler(value={ArithmeticException.class})
	public ModelAndView testException(Exception ex){
		ModelAndView mv=new ModelAndView();
		mv.setViewName("error");
		mv.addObject("cuowu", ex);
		return mv;
	}
注意:
1.@ExceptionHandler方法修饰的入参中可以加入Exception类型的参数,该参数即对应发生的异常信息
2.@ExceptionHandler方法的入参中不能传入Map.若希望把异常信息传到页面上,需要使用ModelAndView作为方法的返回值。
3.@ExceptionHandler 注解定义的方法优先级问题:
例如发 生的是NullPointerException,但是声明的异常有 RuntimeException 和 Exception,
此候会根据异常的最近继承关系找到继承深度最浅的那个@ExceptionHandler 注解方法,即标记了 RuntimeException 的方法

也可以自定义类,要加@ControllerAdvice

@ControllerAdvice
public class HandleException {
	@ExceptionHandler()
	public ModelAndView testException(Exception ex){
		ModelAndView mv=new ModelAndView();
		mv.setViewName("error");
		mv.addObject("cuowu", ex);
		return mv;
	}
}


基于配置的异常处理:

如果希望对所有异常进行统一处理,可以使用 SimpleMappingExceptionResolver,它将异常类名映射为 视图名,即发生异常时使用对应的视图报告异常。

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<!-- exceptionAttribute用于指定异常对象在request域中的键(相当于<String,Object>中的Object),value用于指定用字符串代表键(相当于String) -->
		<property name="exceptionAttribute" value="ex"></property>
		<property name="exceptionMappings">
			<props>
				<!--key:指定异常的全类名,value:出现错误后要转发到的页面!  -->
				<prop key="java.lang.ArithmeticException">error</prop>
			</props>
		</property>
	</bean>


转载于:https://www.cnblogs.com/mazhitao/p/7429447.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值