SpringMVC异常处理

来源:互联网 发布:php在线运行测试 编辑:程序博客网 时间:2024/05/16 18:21

常用的SringMVC异常处理主要有三种:

1.使用系统定义好的异常处理器SimpleMappingExceptionResolver

2.使用自定义异常处理器

3.使用异常处理注解

1.1 SimpleMappingExceptionResolver

该方式只需要SpringMVC配置文件中注册该异常处理器Bean即可。该Bean比较特殊,没有id属性,无需显式调用或被注入给其它<bean/>,当异常发生时会自动执行该类。

1)自定义异常

public class NameException extends StudentException {    public NameException() {    }    public NameException(String message) {        super(message);    }}
2)配置xml

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">    <property name="exceptionMappings">        <props>            <prop key="com.mh.springmvc.exception.NameException">/errors/error1.jsp</prop>        </props>    </property>    <property name="defaultErrorView" value="/errors/defaulterror.jsp"/>    <property name="exceptionAttribute" value="e"/></bean>
3)测试

@RequestMapping("/register.do")public ModelAndView simpleException(HttpServletRequest request, HttpServletResponse response) throws NameException {    ModelAndView mv = new ModelAndView("/index1.jsp");    String name = request.getParameter("name");    if(!"Lucy".equalsIgnoreCase(name)){            throw new NameException("姓名不正确");    }    mv.addObject("message","successfully");    return mv;

2.1 自定义异常处理器HandlerExceptionResolver

     使用SpringMVC定义好的SimpleMappingExceptionResolver异常处理器,可以实现发生指定异常后的跳转。但若要实现在捕获到指定异常后,执行一些操作目的,它是完成不了的。此时,就需要自定义异常处理器了。

     自定义异常处理器,需要实现HandlerExceptionResolver接口,并且该类需要在SpringMVC配置文件中进行注册。

1)定义异常处理器

当一个类实现了HandlerExceptionResolver接口后,无论发生什么异常后,都会自动执行接口方法resolveException()。

public class MyHandlerExceptionResolver implements HandlerExceptionResolver {    @Override    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) {        ModelAndView mv = new ModelAndView();        String contextPath = request.getContextPath();        mv.addObject("e",e);        mv.setViewName(contextPath + "/errors/defaulterror.jsp");        if(e instanceof NameException){            mv.setViewName(contextPath + "/errors/error1.jsp");        }        return  mv;    }}
2)xml中配置异常处理器

<bean class="com.mh.springmvc.exception.MyHandlerExceptionResolver" />

3)测试

@RequestMapping("/register.do")public ModelAndView simpleException(HttpServletRequest request, HttpServletResponse response) throws NameException {    ModelAndView mv = new ModelAndView("/index1.jsp");    String name = request.getParameter("name");    if(!"Lucy".equalsIgnoreCase(name)){            throw new NameException("姓名不正确");    }    mv.addObject("message","successfully");    return mv;


3.1 异常处理注解@ExceptionHandler

    使用注解@ExceptonHandler可以将一个方法指定为异常处理方法。该注解只有一个可选属性value,为一个Class<?>数组,用于指定该注解的方法所要处理异常类,即所要匹配的异常。

    而被注解的方法,其返回值可以是ModelAndView、String或void,方法名随意,方法参数可以是Exception及其子类对象、HttpServletRequest、HttpServletResponse等。系统会自动为这些方法参数赋值。

@ExceptionHandler(NameException.class)public ModelAndView exceptionHandler(HttpServletRequest request, HttpServletResponse response,Exception e){    ModelAndView mv = new ModelAndView(request.getContextPath()+"/errors/error1.jsp");    mv.addObject("e",e);    return mv;}







0 0
原创粉丝点击