SpringMVC——异常处理
Spring MVC处理异常方式有以下三种:
1.使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver
2.实现HandlerExceptionResolver
3.使用@ExceptionHandler注解实现异常处理
方法一:使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver
<!--方法一: 全局异常配置 start --> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="java.lang.Exception">error</prop> <!-- 对应异常发生时要跳转的页面 --> <prop key="java.lang.Throwable">error</prop> <prop key="java.lang.RuntimeException">error</prop> <prop key="java.lang.NullPointerException">error</prop><!-- 当发生空指针异常时跳转到此页面 --> </props> </property> </bean> <!-- 全局异常配置 end -->
注意:异常页面获取异常对象的名称默认是exception,也可以自己指定别名。
指定异常的别名叫 "ex",这样jsp页面就可以通过${ex}来获取异常信息。
<property name="exceptionAttribute" value="ex"></property>
JSP页面如下:
<h2>
页面出错误了!
如果指定异常别名:${ex} <br/>
如果不知道异常别名:.${exception }
<br />
</h2>
Controller类中有异常代码:
@Controller
@RequestMapping("/demo")
public class ExceptionController {
@RequestMapping("/ex.action")
public String login(ModelMap model) {
System.out.println("---方法1---");
String s = null;
s.length();
return "success";
}
}
通过地址:http://localhost:8008/spring_exception/demo/ex.action 访问后,得到如下结果

方法二:实现HandlerExceptionResolver接口
1)自定义MyExceptionHandler 实现 HandlerExceptionResolver接口
MyExceptionHandler.java如下
public class MyExceptionHandler implements HandlerExceptionResolver {
public ModelAndView resolveException(HttpServletRequest req,
HttpServletResponse resp, Object handler, Exception ex) {
Map<String, Object> model = new HashMap<String, Object>();
model.put("ex", ex); // jsp页面通过${ex}来获取
return new ModelAndView("error", model);
}
}在applicationContext.xml中进行配置
<bean id="myExceptionHandler" class="com.lydia.web.MyExceptionHandler" />
通过以上操作也可以设置。
方法三:使用@ExceptionHandler注解实现异常处理
编写一个BaseController类,定义如下:
public class BaseController {
@ExceptionHandler
public String execute(HttpServletRequest request, Exception ex) {
request.setAttribute("ex", ex);
return "error";
}
}
然后其他的Controller继承BaseController类即可。
@Controller
@RequestMapping("/demo")
public class ExceptionController3 extends BaseController {
@RequestMapping("/ex3.action")
public String login(ModelMap model){
System.out.println("---方法3---");
try {
String s = "123";
s.length();
s.charAt(5);
} catch (Exception e) {
e.printStackTrace();
// throw new MyException(e.getMessage()+"catch异常");
model.put("msg", e.getMessage()+"---++++");
model.addAttribute("message", e.getMessage()+"+++++++");
return "error";
}
return "success";
}
}
注意:上面的代码中自定义了一个异常类MyException,并使用try..catch..来处理异常。
使用ModelMap的addAttibute()或者put方法向错误页面传值。