SpringMVC笔记之HandlerExceptionResolver异常处理

来源:互联网 发布:电脑上下什么软件 编辑:程序博客网 时间:2024/05/16 08:06

转载请标明出处:http://write.blog.csdn.net/postedit/8537938

 

Spring MVC的确很强大,在每一个你想的到和想不到的地方都会留下钩子,来插入自定义的实现,透明替换默认实现,我想用到HandlerExceptionResolver这个东东来处理异常

首先我们实现 HandlerExceptionResolver

package com.qunar.advertisement.exception;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;import org.springframework.web.servlet.HandlerExceptionResolver;import org.springframework.web.servlet.ModelAndView;import com.qunar.advertisement.utils.StringPrintWriter;public class MyExceptionResolver implements HandlerExceptionResolver{    private static Logger logger = Logger.getLogger(MyExceptionResolver.class);    @Override    public ModelAndView resolveException(HttpServletRequest request,            HttpServletResponse response, Object handler, Exception ex) {        logger.error("Catch Exception: ",ex);//把漏网的异常信息记入日志        Map<String,Object> map = new HashMap<String,Object>();        StringPrintWriter strintPrintWriter = new StringPrintWriter();        ex.printStackTrace(strintPrintWriter);        map.put("errorMsg", strintPrintWriter.getString());//将错误信息传递给view        return new ModelAndView("error",map);    }}


 


我们还需要一个辅助的类StringPrintWriter,因为ex.printStackTrace参数只有个PrintWriter类型的,java自带的StringWriter
不可用,所以我们需要自己实现一个装饰器的StringPrintWriter。

 

package com.qunar.advertisement.utils;import java.io.PrintWriter;import java.io.StringWriter;public class StringPrintWriter extends PrintWriter{    public StringPrintWriter(){        super(new StringWriter());    }       public StringPrintWriter(int initialSize) {          super(new StringWriter(initialSize));    }       public String getString() {          flush();          return ((StringWriter) this.out).toString();    }       @Override    public String toString() {        return getString();    }}

 

 

我们只需要在xml中配置一下就可以了:

 

<bean class="com.qunar.advertisement.exception.MyExceptionResolver"></bean>

 

我们在错误页面掩藏区域显示错误信息:


我们在错误页面隐藏区域显示错误信息:我们在错误页面隐藏区域显示错误信息:我们在错误页面隐藏区域显示错误信息:我们在错误页面隐藏区域显示错误信息:

<div style="display:none;">     <c:out value="${errorMsg}"></c:out></div>