springMVC --全局异常处理(两种方式)

首先看springMVC的配置文件:

<!-- 全局异常配置 start -->
     <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
         <property name="exceptionMappings">
             <props>
                 <prop key="java.lang.Exception">errors/error</prop>
                 <prop key="java.lang.Throwable">errors/err</prop>
             </props>
         </property>
         <property name="statusCodes">
             <props>
                 <prop key="errors/error">500</prop>
                 <prop key="errors/404">404</prop>
             </props>
         </property>
         <!-- 设置日志输出级别,不定义则默认不输出警告等错误日志信息 -->
         <property name="warnLogCategory" value="WARN"></property>
         <!-- 默认错误页面,当找不到上面mappings中指定的异常对应视图时,使用本默认配置 -->
         <property name="defaultErrorView" value="errors/error"></property>
         <!-- 默认HTTP状态码 -->
         <property name="defaultStatusCode" value="500"></property>
     </bean>
     <!-- 全局异常配置 end -->

这里主要的类是SimpleMappingExceptionResolver类,和他的父类AbstractHandlerExceptionResolver类。

可以看到源码中和上述配置对应的属性;

另外要注意的是日志

<span style="font-size:14px;"><property name="warnLogCategory" value="WARN"></property></span>

级别设置为WARN:

也可以实现HandlerExceptionResolver接口或者继承SimpleMappingExceptionResolver,写一个自己的异常处理程序

public class SpringMVCSimpleMappingExceptionResolver extends SimpleMappingExceptionResolver {

	public static final Log log = LogFactory.getLog(SpringMVCSimpleMappingExceptionResolver.class);

	@Override
	protected ModelAndView doResolveException(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex) {
		ModelAndView mv = null;
		String accept = request.getHeader("accept");
        if (accept != null && !(accept.indexOf("application/json") > -1
        		|| (request.getHeader("X-Requested-With") != null
        		&& request.getHeader("X-Requested-With").indexOf("XMLHttpRequest") > -1))) {
            mv = super.doResolveException(request, response, handler, ex);
        } else {
            try {
            	// json 请求返回
                PrintWriter writer = response.getWriter();
                writer.write(Return.failure((ex.getMessage())));
                writer.flush();
            } catch (IOException e) {
            	if (log.isInfoEnabled()) {
            		log.info(StringUtil.getTrace(e));
            	}
            }
        }
        doLog((HandlerMethod) handler, ex);
        return mv;
	}

	/**
	 * 记录异常日志
	 *
	 * @param handler
	 * @param excetpion
	 */
	private void doLog(HandlerMethod handler, Exception excetpion) {
        if (log.isEnabledExceptionDb()) {
        	// 异常信息日志入库
        }
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 01:44:55

springMVC --全局异常处理(两种方式)的相关文章

springmvc和servlet下的文件上传和下载(存文件目录和存数据库Blob两种方式)

项目中涉及了文件的上传和下载,以前在struts2下做过,今天又用springmvc做了一遍,发现springmvc封装的特别好,基本不用几行代码就完成了,下面把代码贴出来: FileUpAndDown.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>using commons Uplo

springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)

参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>using commons Upload to

springMVC两种方式实现多文件上传及效率比较

springMVC实现 多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实 现多文件上传效率上却有着很大的差距,下面我们通过实例来看一下这两种方式的实现方式,同时比较一下在效率上到底存在着多大的差距. 1.下载相关jar包. 需要引入的jar出了springMVC的jar包外,还需要引入 com.springsource.org.apache.commons.fileupload-1.2.0.jar和

SpringMVC文件上传的两种方式

搞JavaWEB的应该或多或少都做过文件上传,之前也做过简单的上传,但是如下的需求也确实把我为难了一把: 1.上传需要异步, 2.需要把上传后文件的地址返回来, 3.需要进度条显示上传进度. 项目使用SpringMVC架构+easyUI,初步分析,进度条可以使用easyui自带的进度条,上传可以使用ajaxFileUpload或者ajaxForm.文件传上去,然后把路径带回来是没问题的,关键是上传进度怎么获取.最终,两种方式都实现啦. 首先,不管哪种方式,后台对文件处理都是必须的.文件处理: 1

SpringMVC 控制器默认支持GET和POST两种方式

在SpringMVC的controller中,@RequestMapping只写路径,不包含RequetMethod.GET和RequetMethod.POST,HttpServletRequest的getParameter("*")方法同时支持这两种方式. 1 @RequestMapping("savedata") 2 public @ResponseBody void savedata(HttpServletRequest req, HttpServletRes

菜鸟学习Spring——SpringMVC注解版前台向后台传值的两种方式

一.概述. 在很多企业的开法中常常用到SpringMVC+Spring+Hibernate(mybatis)这样的架构,SpringMVC相当于Struts是页面到Contorller直接的交互的框架也是界面把信息传输到Contorller层的一种架构,通过这个架构可以让我们把页面和Contorller层解耦,使得开发人员的分工更加明确. 二.代码演示. 1.首先配置SpringMVC环境. 1.1导入jar. 值得注意的是红色标记的commons-logging这个jar包一定得引入进去不然会

(01)Spring MVC之处理异常的两种方式及优先级

项目开发中异常需要统一处理,总的来说有两种方式,一种是实现HandlerExceptionResolver接口,一种是使用@ExceptionHandler注解的方式.其中Spring已经为我们提供了一个实现了HandlerExceptionResolver接口的类SimpleMappingExceptionResolver,有人把它单独列为一种方式,不过我认为方式越少越好,哈哈哈哈哈,下面记录一下Spring MVC处理异常的这两种方式. 1.实现HandlerExceptionResolve

jQuery开发插件的两种方式

最近挺多人写jQuery的,都是关于jQuery扩展方面的,使用方面的讲的比较多,但是关于详细的一个基础的过程讲的比较少一点,做web开发的基本上都会用到jQuery,本人就根据jQuery的使用经验讲讲插件开发.jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数是属于jQuery命名空间的函数),如果将jQuery看成一个类,那么就相当于给jQuery类本身添加方法.第二种是对象扩展的方式开发插件,即jQuery对象添加方法. 类扩展

java中设置代理的两种方式

1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式.直接上代码. 2 采用设置系统属性 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 import jav

jQuery中开发插件的两种方式(附Demo)

做web开发的基本上都会用到jQuery,jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数是属于jQuery命名空间的函数),如果将jQuery看成一个类,那么就相当于给jQuery类本身添加方法.第二种是对象扩展的方式开发插件,即jQuery对象添加方法. 类扩展的插件 类扩展的插件开发最直接的理解就是给jQuery类添加类方法,可以理解为添加静态方法.典型的例子就是$.AJAX()这个函数,将函数定义于jQuery的命名空间中.关