springMVC三种异常处理方式

Spring MVC处理异常有3种方式: 
(1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver; 
(2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器;

(3)使用@ExceptionHandler注解实现异常处理。

SimpleMappingExceptionResolver:

springMVC-servlet.xml

<beanclass="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
  定义默认的异常处理页面,当该异常类型的注册时使用
  <property name="defaultErrorView" value="error">
  </property>
  定义异常处理页面用来获取异常信息的变量名,默认名为exception
  <propertyname="exceptionAttribute"value="ex"></property>
  定义需要特殊处理的异常,用类名或完全路径名作为key,异常也页名作为值
  <property name="exceptionMappings">
  <props>
  <propkey="etc.exception.MyException">error-my</prop>
  这里还可以继续扩展对不同异常类型的处理
  </props>
  </property>
 </bean> 


HandlerExceptionResolver :

public class MyExceptionHandler{
	
	@ExceptionHandler
	public ModelAndView resolveException(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex) {
		Map<String, Exception> map = new HashMap<String, Exception>();
		map.put("ex",ex);
		
		// 根据获取的Exception参数进行view跳转
		if (ex instanceof MyException) {
			return new ModelAndView("error-my",map);
		} else {
			return new ModelAndView("error",map);
		}
	}
}
定义了这样一个异常处理器之后就要在springMVC-servlet.xml中定义这样一个bean对象,如
<bean id="myExceptionHandler" class="com.tiantian.xxx.web.handler.myExceptionHandler"/>

使用@ExceptionHandler进行处理:

使用@ExceptionHandler进行处理有一个不好的地方是进行异常处理的方法必须与出错的方法在同一个Controller里面

如:

import org.springframework.stereotype.Controller;   
import org.springframework.web.bind.annotation.ExceptionHandler;   
import org.springframework.web.bind.annotation.RequestMapping;   
  
import com.tiantian.blog.web.servlet.MyException;   
  
@Controller  
public class GlobalController {   
  
       
    /**  
     * 用于处理异常的  
     * @return  
     */  
    @ExceptionHandler({MyException.class})   
    public String exception(MyException e) {   
        System.out.println(e.getMessage());   
        e.printStackTrace();   
        return "exception";   
    }   
       
    @RequestMapping("test")   
    public void test() {   
        throw new MyException("出错了!");   
    }   
       
       
}  

这里在页面上访问test方法的时候就会报错,而拥有该test方法的Controller又拥有一个处理该异常的方法,这个时候处理异常的方法就会被调用

当发生异常的时候,上述两种方式都使用了的时候,第一种方式会将第二种方式覆盖




  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值