您的位置:首页 > 编程语言 > Java开发

SpringMVC异常处理

2017-02-23 16:40 405 查看

SpringMVC异常处理

1、 Spring MVC处理异常有3种方式: 
(1)使用Spring-MVC提供的SimpleMappingExceptionResolver; 

此方法只需要在SpringMVC配置文件中增加异常处理配置即可:

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
    <!--
定义默认的异常处理页面,当该异常类型的注册时使用 -->  
    <property name="defaultErrorView" value="error"></property>  
    <!--
定义异常处理页面用来获取异常信息的变量名,默认名为exception -->  
    <property name="exceptionAttribute" value="ex"></property>  
   <!--
定义需要特殊处理的异常,用类名或完全路径名作为key,异常以页名作为值
-->  
    <property name="exceptionMappings">  
        <props>  
            <!--
创建自己所要自定义的异常类 -->
 <prop key="com.core.exception.BusinessException">business_error</prop>  
 <prop key="com.core.exception.ParameterException">parameter_error</prop>  
<!-- key是我们的自定义异常类全称,值是要跳转的视图
-->
<prop key="cn.bdqn.pojo.UserException">error</prop>
            <!--
还可以继续扩展对不同异常类型的处理 -->  
        </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>
<!--
相当于 catch(Exception ex)中的{ex.getMessage();}-->
${exception.message}
</body>

(2)实现Spring的异常处理接口HandlerExceptionResolver
自定义自己的异常处理器; 
(3)使用@ExceptionHandler注解实现异常处理; 

 

2、 未捕获异常的处理 :
对于Unchecked Exception而言,由于代码不强制捕获,往往被忽略,如果运行期产生了UncheckedException,而代码中又没有进行相应的捕获和处理,则我们可能不得不面对尴尬的404、500……等服务器内部错误提示页面。 

  我们需要一个全面而有效的异常处理机制。目前大多数服务器也都支持在Web.xml中通过<error-page>(Websphere/Weblogic)或者<error-code>(Tomcat)节点配置特定异常情况的显示页面。

 

修改Web.xml文件,示例如下:

<!--
出错页面定义 -->  
<error-page>  
    <exception-type>java.lang.Throwable</exception-type>  
    <location>/500.jsp</location>  
</error-page>  
<error-page>  
    <error-code>500</error-code>  
    <location>/500.jsp</location>  
</error-page>  
<error-page>  
    <error-code>404</error-code>  
    <location>/404.jsp</location>  
</error-page>  
<!--
可继续增加服务器错误号的处理及对应显示页面 -->
 

3、 比较异常处理方式的优缺点:

        Spring MVC集成异常处理3种方式都可以达到统一异常处理的目标。从3种方式的优缺点比较,若只需要简单的集成异常处理,推荐使用SimpleMappingExceptionResolver即可;若需要集成的异常处理能够更具个性化,提供给用户更详细的异常信息,推荐自定义实现HandlerExceptionResolver接口的方式;若不喜欢Spring配置文件或要实现“零配置”,且能接受对原有代码的适当入侵,则建议使用@ExceptionHandler注解方式。 

 

【注:WEB.XML,就是指定error-code和page到指定地址,这也是最传统和常见的做法

而Spring的全局异常捕获功能,这种相对可操作性更强一些,可根据自己的需要做一后善后处理,比如日志记录等。各个方案之间没有依赖关系,可以相互独立使用。】

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息