`
fw0124
  • 浏览: 5555 次
文章分类
社区版块
存档分类
最新评论

Spring MVC 系统异常处理方式

 
阅读更多

原文 -》http://my.oschina.net/CandyDesire/blog/333340?fromerr=K0XjF7nO


大部分公司所用的Spring框架版本是3.1版本以下,所以今天暂时总结3.1版本的Spring-MVC异常处理方式。

一、Spring MVC处理异常有3种方式:
(1)使用Spring-MVC提供的SimpleMappingExceptionResolver;
(2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器;
(3)使用@ExceptionHandler注解实现异常处理;

二、分别介绍这三种异常处理的实现方式:

(1)使用SimpleMappingExceptionResolver实现异常处理

只需要在Spring的配置文件applicationContext.xml中增加以下内容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<beanclass="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!--定义默认的异常处理页面,当该异常类型的注册时使用-->
<propertyname="defaultErrorView"value="error"></property>
<!--定义异常处理页面用来获取异常信息的变量名,默认名为exception-->
<propertyname="exceptionAttribute"value="ex"></property>
<!--定义需要特殊处理的异常,用类名或完全路径名作为key,异常以页名作为值-->
<propertyname="exceptionMappings">
<props>
<!--创建自己所要自定义的异常类-->
<propkey="com.core.exception.BusinessException">business_error</prop>
<propkey="com.core.exception.ParameterException">parameter_error</prop>
<!--还可以继续扩展对不同异常类型的处理-->
</props>
</property>
</bean>


(2)实现HandlerExceptionResolver 接口自定义异常处理器

首先增加HandlerExceptionResolver 接口的实现类MyExceptionHandler,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
publicclassMyExceptionHandlerimplementsHandlerExceptionResolver{
publicModelAndViewresolveException(HttpServletRequestrequest,HttpServletResponseresponse,
Objecthandler,Exceptionex){
Map<String,Object>model=newHashMap<String,Object>();
model.put("ex",ex);
//根据不同错误转向不同页面
if(exinstanceofBusinessException){
returnnewModelAndView("business_error",model);
}elseif(exinstanceofParameterException){
returnnewModelAndView("parameter_error",model);
}else{
returnnewModelAndView("error",model);
}
}
}


然后在Spring的配置文件applicationContext.xml中增加以下内容:

?
1
<beanid="exceptionHandler"class="com.core.exception.MyExceptionHandler"/>


(3)使用@ExceptionHandler注解实现异常处理

首先要增加BaseController类,并在类中使用@ExceptionHandler注解声明异常处理,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
publicclassBaseController{
/**基于@ExceptionHandler异常处理*/
@ExceptionHandler
publicStringexp(HttpServletRequestrequest,Exceptionex){
request.setAttribute("ex",ex);
//根据不同错误转向不同页面
if(exinstanceofBusinessException){
return"business_error";
}elseif(exinstanceofParameterException){
return"parameter_error";
}else{
return"error";
}
}
}


然后需要修改现有代码,使所有需要异常处理的Controller都继承该类,如下所示:

?
1
publicclassTestControllerextendsBaseController

三、未捕获异常的处理:
对于Unchecked Exception而言,由于代码不强制捕获,往往被忽略,如果运行期产生了UncheckedException,而代码中又没有进行相应的捕获和处理,则我们可能不得不面对尴尬的404、500……等服务器内部错误提示页面。
我们需要一个全面而有效的异常处理机制。目前大多数服务器也都支持在Web.xml中通过<error-page>(Websphere/Weblogic)或者<error-code>(Tomcat)节点配置特定异常情况的显示页面。

实现方式如下:

修改web.xml文件,增加以下内容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!--出错页面定义-->
<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>
<!--可继续增加服务器错误号的处理及对应显示页面-->


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

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


分享到:
评论

相关推荐

    springmvc 异常统一处理的三种方式详解.docx

    那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的。下面将介绍使用Spring MVC统一处理异常的解决和实现过程。

    Spring MVC 员工管理系统

    Spring MVC框架围绕DispatcherServlet这个核心展开,DispatcherServlet的作用是截获请求并组织一系列组件共同完成请求的处理工作。 JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它...

    基于SpringMvc+Spring图书信息管理系统

    用SpringMvc+Spring编写简单的图书信息管理系统,包含数据库信息

    基于Springboot+Mybatis+ SpringMvc+springsecrity+Redis完整网站后台管理系统

    对各种不同异常进行了全局统一处理 使用lombok简化java代码,让源码更简洁,可读性高 mybatis未进行二次封装,原滋原味,简单sql采用注解,复杂sql采用Mapper.xml配置 使用了layui的弹出层、菜单、文件上传、富...

    毕业设计管理系统java服务端,采用spring mvc.zip

    例如,Java不支持goto语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不...

    spring-boot-ssm:springboot-ssm 是一个基于Spring Boot & Spring & Spring MVC & MyBatis的简单通用的项目,用于快速构建中小型API的后端服务系统

    spring-boot-ssm 是一个基于Spring Boot & Spring & Spring MVC & MyBatis的简单通用的项目,用于快速构建中小型API的后端服务系统. 可以做为一个种子项目,进行改造升级. 另外,还有个对应的Vue+ElementUI的前端项目,...

    基于springmvc高并发秒杀系统

    技术描述:基于SpringMVC,Spring,MyBatis实现的高并发秒杀系统。代码设计风格基于RESTful,以c3p0作为连接池,Redis数据库为媒介实现高并发技术。其中,对于相关的DAO,Service操作,均添加了Junit单元测试实例。 ...

    基于SSM的商城系统附带视频教程

    异常处理和日志记录机制 单元测试和系统集成测试 项目部署和性能优化技巧 安全性考虑,如XSS和CSRF防护 版本控制和团队协作开发流程 适用人群 初学者和有一定Java基础的开发者,希望系统学习Java Web开发 对Spring, ...

    SpringMVC统一异常处理三种方法详解

    这篇文章主要介绍了SpringMVC-统一异常处理三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在 Spring MVC 应用的开发中,不管是对底层数据库操作...

    基于SSM图书管理系统(源码+演示视频+数据库文件+工具+联系方式)

    知识收获:SSM拦截器、异常处理、事务管理的实战经验、Bootstrap应用、Bean生命周期管理、Session、Cookie等使用场景、静态资源处理、多角色的数据库设计、SQL语句设计 使用建议:先根据演示视频顺利搭建系统,学会...

    Spring.3.x企业应用开发实战(完整版).part2

    15.7.3 异常处理 15.8 小结 第5篇 测试及实战 第16章 实战型单元测试 16.1 单元测试概述 16.1.1 为什么需要单元测试 16.1.2 单元测试之误解 16.1.3 单元测试之困境 16.1.4 单元测试基本概念 16.2 JUnit 4快速进阶 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    8.1.4 异常处理 247 8.2 Spring Data JPA 248 8.2.1 点睛Spring Data JPA 248 8.2.2 Spring Boot 的支持 258 8.2.3 实战 260 8.3 Spring Data REST 284 8.3.1 点睛Spring Data REST 284 8.3.2 Spring Boot 的支持 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    8.1.4 异常处理 247 8.2 Spring Data JPA 248 8.2.1 点睛Spring Data JPA 248 8.2.2 Spring Boot 的支持 258 8.2.3 实战 260 8.3 Spring Data REST 284 8.3.1 点睛Spring Data REST 284 8.3.2 Spring Boot 的支持 ...

    SpringBoot

    JavaEE开发的颠覆者:Spring Boot实战从Spring 基础、Spring MVC 基础讲起,从而无难度地引入Spring Boot 的学习。涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制、...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    8.1.4 异常处理 247 8.2 Spring Data JPA 248 8.2.1 点睛Spring Data JPA 248 8.2.2 Spring Boot 的支持 258 8.2.3 实战 260 8.3 Spring Data REST 284 8.3.1 点睛Spring Data REST 284 8.3.2 Spring Boot 的支持 ...

    计算机毕业设计-JavaSmart系统-系统框架设计与开发(源代码+论文)

    此外,系统还可能集成缓存机制、安全框架、日志记录和异常处理模块,以提高性能和稳定性。系统框架的设计与开发旨在提供高度可重用的组件和模板,简化开发流程,缩短开发周期,并支持后续的扩展和维护。JavaSmart...

    Spring面试71题与答案

    1.什么是spring? Spring是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,... 异常处理:Spring提供方便的API把具体技术相关的异常(比如由JDBC,HibernateorJDO抛出的)转化为一致的unchecked异常。

    基于Spring-Boot的外卖点餐

    项目描述: 外卖点餐系统是一个基于Spring Boot的Web应用程序,旨在提供用户方便快捷的外卖点餐服务。该系统结合了自定义注解日志...后端开发: 使用Spring Boot框架进行后端开发,利用Spring MVC处理请求和构建RESTful

    Spring攻略(第二版 中文高清版).part1

    14.1 用Spring Portlet MVC开发一个简单的Portlet 544 14.1.1 问题 544 14.1.2 解决方案 545 14.1.3 工作原理 546 14.2 将Portlet请求映射到处理程序 553 14.2.1 问题 553 14.2.2 解决方案 553 14.2.3...

    [计算机毕业设计]基于SSM的学校小卖部收银系统(源码+部署说明+演示视频+包运行).zip

    这是一个基于SSM(Spring+Spring MVC+MyBatis)技术的学校小卖部收银系统毕业设计项目。本项目旨在为学校小卖部提供一个便捷、高效的收银管理系统,实现商品销售、库存管理、统计分析等功能。以下是关于这个项目的详细...

Global site tag (gtag.js) - Google Analytics