1.spring設置全局異常,它的原理是向上捕獲
spring.xml配置
<!--自定義全局異常處理器--> <bean id="globalExceptionResolver" class="com.data.controller.exception.GlobalExceptionResolver"/>
import com.data.service.email.EmailMessage; import com.data.utils.constant.AliasConstant; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; @Controller public class GlobalExceptionResolver implements HandlerExceptionResolver { @Resource EmailMessage emailMessage; /** * 進行全局異常過濾並處理 * * @param request action 請求 * @param response 服務器響應 * @param handler 發生錯誤的事件句柄 * @param ex 異常情況 * @return 視圖&對象 */ @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { //使用StringBuilder提搞GC回收效率,降低垃圾回收開銷 StringBuilder content = new StringBuilder("<++>AllInOne-busWeb抓捕到異常具體內容信息:<++> \t\n"); String userId = (String) request.getSession().getAttribute(AliasConstant.UserId); content.append("造成該異常的用戶userID為: " + userId + " \t\n"); content.append("爆出異常的類型為: " + ex.getClass() + " \t\n"); content.append("異常發生的位置為: " + handler + " \t\n"); content.append("造成的原因: " + ex.getMessage() + " \t\n"); content.append("造成的詳細原因為:\t\n\n"); StackTraceElement[] trace = ex.getStackTrace(); for (StackTraceElement traceElement : trace) content.append("at\t " + traceElement + "\t\n"); return null; } }