SpringMVC 错误处理实现示例,springmvc示例,SpringMVC中可以
分享于 点击 36218 次 点评:270
SpringMVC 错误处理实现示例,springmvc示例,SpringMVC中可以
SpringMVC中可以很方便的设置错误处理,可以通过在SpringMVC配置文件AppServlet-context.xml添加名称为exceptionResolver的bean来实现错误处理,如下bean配置:
<?xml version="1.0" encoding="UTF-8"?><beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <beans:bean id="exceptionResolver" class="cn.outofmemory.web.CommonExceptionResolver"> <beans:property name="defaultErrorView"> <beans:value>error/500</beans:value> </beans:property> <beans:property name="exceptionMappings"> <beans:props> <beans:prop key="java.sql.SQLException">errorDB</beans:prop> <beans:prop key="java.lang.RuntimeException">errorRT</beans:prop> </beans:props> </beans:property> </beans:bean>.....</beans:beans>
上面的配置中我们自定义了cn.outofmemory.web.CommonExceptionResolver
类,这个类从org.springframework.web.servlet.handler.SimpleMappingExceptionResolver
类继承,实现如下:
package cn.outofmemory.web;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.servlet.HandlerExceptionResolver;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;import cn.outofmemory.util.AppUser;import cn.outofmemory.util.Constants;import cn.outofmemory.util.StackTraceUtils;/** * 异常处理类 * @author byrx.net * */public class CommonExceptionResolver extends SimpleMappingExceptionResolver implements HandlerExceptionResolver { private static final Logger logger = LoggerFactory.getLogger(CommonExceptionResolver.class); @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { String stacktrace = StackTraceUtils.getStackTrace(ex); String requestInfo = "URL:" + request.getRequestURI(); requestInfo += " METHOD:" + request.getMethod(); HttpSession session = request.getSession(); if (session != null) { AppUser loginUser = (AppUser) session.getAttribute(Constants.SESSION_KEY_LOGIN_USER); if (loginUser != null) { requestInfo += " loginUser id = " + loginUser.getUserId().toString() + ", userName = " + loginUser.getUserName(); } } logger.error("CommonErrorHandler caught error {} stacktrace {} request {}", ex.getMessage(), stacktrace, requestInfo); return super.getModelAndView("error/500", ex); }}
可以看到在实现中我们记录了异常的信息,请求的信息,和当前的用户信息。
用户点评