1、 Spring MVC处理异常有3种方式:
(1)使用Spring-MVC提供的SimpleMappingExceptionResolver;
此方法只需要在SpringMVC配置文件中增加异常处理配置即可:
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="error">property>
<property name="exceptionAttribute" value="ex">property>
<property name="exceptionMappings">
<props>
<prop key="com.core.exception.BusinessException">business_errorprop>
<prop key="com.core.exception.ParameterException">parameter_errorprop>
<prop key="cn.bdqn.pojo.UserException">errorprop>
props>
property>
bean>
附上一个自定义异常类的代码:
public class UserException extends RuntimeException{
private static final long serialVersionUID = 1L;
public UserException() {
super();
}
public UserException(String message, Throwable cause,
boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public UserException(String message, Throwable cause) {
super(message, cause);
}
public UserException(String message) {
super(message);
}
public UserException(Throwable cause) {
super(cause);
}
}
异常处理Controller:
@RequestMapping(value="/login",method=RequestMethod.POST)
public String login(String userName,String password,HttpSession session){
if(!userList.containsKey(userName)){
throw new UserException("用户名不存在!");
}
User _user = userList.get(userName);
if(!_user.getPassword().equals(password)){
throw new UserException("密码不正确!");
}
session.setAttribute("loginUser", _user);
return "redirect:/user/userlist";
}
异常页面调用显示信息:
<body>
${exception.message}
body>
(2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器;
(3)使用@ExceptionHandler注解实现异常处理;
2、 未捕获异常的处理 :
对于Unchecked Exception而言,由于代码不强制捕获,往往被忽略,如果运行期产生了UncheckedException,而代码中又没有进行相应的捕获和处理,则我们可能不得不面对尴尬的404、500……等服务器内部错误提示页面。
我们需要一个全面而有效的异常处理机制。目前大多数服务器也都支持在Web.xml中通过
修改Web.xml文件,示例如下:
<error-page>
<exception-type>java.lang.Throwableexception-type>
<location>/500.jsplocation>
error-page>
<error-page>
<error-code>500error-code>
<location>/500.jsplocation>
error-page>
<error-page>
<error-code>404error-code>
<location>/404.jsplocation>
error-page>
3、 比较异常处理方式的优缺点:
Spring MVC集成异常处理3种方式都可以达到统一异常处理的目标。从3种方式的优缺点比较,若只需要简单的集成异常处理,推荐使用SimpleMappingExceptionResolver即可;若需要集成的异常处理能够更具个性化,提供给用户更详细的异常信息,推荐自定义实现HandlerExceptionResolver接口的方式;若不喜欢Spring配置文件或要实现“零配置”,且能接受对原有代码的适当入侵,则建议使用@ExceptionHandler注解方式。
【注:WEB.XML,就是指定error-code和page到指定地址,这也是最传统和常见的做法
而Spring的全局异常捕获功能,这种相对可操作性更强一些,可根据自己的需要做一后善后处理,比如日志记录等。各个方案之间没有依赖关系,可以相互独立使用。】