SpringMVC异常处理
来源:互联网 发布:网络定向监控商品信息 编辑:程序博客网 时间:2024/06/03 05:05
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 UserExceptionextends RuntimeException{
private static final long serialVersionUID = 1L;
public UserException() {
super();
}
public UserException(Stringmessage, Throwable cause,
boolean enableSuppression,boolean writableStackTrace) {
super(message,cause, enableSuppression, writableStackTrace);
}
public UserException(Stringmessage, Throwable cause) {
super(message,cause);
}
public UserException(Stringmessage) {
super(message);
}
public UserException(Throwablecause) {
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的全局异常捕获功能,这种相对可操作性更强一些,可根据自己的需要做一后善后处理,比如日志记录等。各个方案之间没有依赖关系,可以相互独立使用。】
- Springmvc异常处理【Springmvc】
- springMVC异常处理
- SpringMVC中的异常处理
- springmvc 异常处理
- springMVC 全局异常处理
- springMVC之异常处理
- SpringMVC的异常处理
- SpringMVC异常处理
- springMVC的异常处理
- SpringMvc的异常处理
- springMVC全局异常处理
- springMVC之异常处理
- springMVC之异常处理
- SpringMVC-15 异常处理
- SpringMVC 常见异常处理
- SpringMVC 异常处理
- SpringMVC 异常处理
- SpringMVC 异常处理
- Xposed框架的检测
- 289. Game of Life
- Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
- Es6入门之块级作用域
- css设置多行超出变省略号,适用于手机端。
- SpringMVC异常处理
- vim替换剪切
- buildEclipse
- 用两个栈实现队列
- 如何删除MySql服务
- 萌新SQL基础学习1---续
- Python学习之jieba、wordcloud
- 数字全排列生成算法
- Struts 2中的constant配置详解