淘淘商城系列——全局异常处理
来源:互联网 发布:管家婆软件多少钱 编辑:程序博客网 时间:2024/06/05 11:05
我们知道项目运行过程中肯定会出现一些问题,当出现异常的时候,我们往往在Controller层捕获并处理了,但这样做不利于我们统一管理。本文我们便来学习下全局异常处理器,让它来管理项目中所有的异常,如下图所示。
当请求过来时先经过前端控制器,前端控制器将请求交给Controller,Controller将请求交给Service,Service将请求交给Dao,当Dao处理完请求之后,将处理结果返回给Service,Service再将返回结果返回给Controller,Controller再将返回结果返回给前端控制器。同理,如果出现异常,最终都会传到前端控制器,我们便在前端控制器中对异常进行统一处理。
下面我们需要在搜索系统工程来添加全局异常处理器。在taotao-search-web工程下新建一个com.taotao.search.exception包,并在该包下新建一个GlobalExceptionResolver全局异常处理器类,如下图所示。此外,我们还需要在src/main/resources目录下放置一个log4j.properties日志文件。
为方便大家复制,现将GlobalExceptionResolver全局异常处理器类的代码贴出。
/** * 全局异常处理器 * <p>Title: GlobalExceptionResolver</p> * <p>Description: </p> * <p>Company: www.itcast.cn</p> * @version 1.0 */public class GlobalExceptionResolver implements HandlerExceptionResolver { private static Logger logger = Logger.getLogger(GlobalExceptionResolver.class); @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e) { // 写日志文件 logger.error("运行时异常", e); // 发短信、发邮件 // 发短信:调用第三方运营商服务;发邮件使用jmail包 // 跳转到友好地错误页面 ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("error/exception"); modelAndView.addObject("message", "您的网络异常,请稍后重试。。。。。"); return modelAndView; }}
上面的代码中用到了Logger类,这个Logger类我们使用的是slf4j包下的Logger类,因为slf4j是一个平台,它可以处理各种日志处理文件,比如log4j。我们在src/main/resources目录下放置一个log4j.properties文件(最好名字就叫log4j.properties,这样slf4j会自动加载,不用配置,如果叫别的名字还需要配置)。log4j.properties文件的内容如下,可以看到我们把日志的级别调整为INFO级别,这样可以少很多输出信息。A3级别对日志输出做了配置,指定将日志信息写入到logs目录下的server.log文件当中,当文件大小达到1M的时候会重新生成一个文件接着写日志。STDOUT级别是指将日志输出到控制台。
log4j.rootLogger=INFO,A3,STDOUTlog4j.appender.STDOUT=org.apache.log4j.ConsoleAppenderlog4j.appender.STDOUT.layout=org.apache.log4j.PatternLayoutlog4j.appender.STDOUT.layout.ConversionPattern=[%p] [%l] %10.10c - %m%nlog4j.appender.A3=org.apache.log4j.RollingFileAppenderlog4j.appender.A3.file=logs/server.loglog4j.appender.A3.MaxFileSize=1024KBlog4j.appender.A3.MaxBackupIndex=10log4j.appender.A3.layout=org.apache.log4j.PatternLayoutlog4j.appender.A3.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n
下面我们需要在springmvc.xml文件中加载全局异常处理器,如下图所示。
为方便大家复制,现将springmvc.xml文件的内容贴出。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <!-- 加载属性文件 --> <context:property-placeholder location="classpath:resource/resource.properties" /> <context:component-scan base-package="com.taotao.search.controller" /> <mvc:annotation-driven /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 全局异常处理器 --> <bean class="com.taotao.search.exception.GlobalExceptionResolver" /> <!-- 引用dubbo服务 --> <dubbo:application name="taotao-search-web"/> <dubbo:registry protocol="zookeeper" address="192.168.25.128:2181"/> <dubbo:reference interface="com.taotao.search.service.SearchService" id="searchService" /></beans>
下面我们人为抛一个异常,在SearchController的searchItem方法中人为设置一个异常(1/0肯定会报异常)。
下面我们重启taotao-search-web工程,然后访问淘淘商城首页,在搜索框中输入搜索条件并进行搜索,便会看到如下图所示的友好错误页面,可以看到该页面的异常提示信息就是我们刚才定义的信息。
这时我们刷新taotao-search-web工程,就能找到logs目录,在它下面有server.log文件,打开它,便可以看到我们刚才人为设置的异常信息。
- 淘淘商城系列——全局异常处理
- 学习淘淘商城第五十二课(全局异常处理)
- 淘淘商城系列——内容管理
- 淘淘商城系列——初始SolrCloud
- 淘淘商城系列——freemarker入门
- 淘淘商城系列——freemarker语法
- 淘淘商城系列——SSO系统分析
- 淘淘商城系列——生成订单
- 淘淘商城系列——使用maven构建工程
- 淘淘商城系列——zookeeper单机版安装
- 淘淘商城系列——发布dubbo服务
- 淘淘商城系列——引用dubbo服务
- 淘淘商城系列——服务调用测试
- 淘淘商城系列——展示后台管理页面
- 淘淘商城系列——dubbo监控中心
- 淘淘商城系列——maven工程debug调试
- 淘淘商城系列——商品类目选择的实现
- 淘淘商城系列——分布式文件系统FastDFS
- 铺砖问题(状态压缩DP)
- python:模拟内置函数map的实现
- 对比线程安全和可重入函数
- Python图像处理库(2)
- 搜索总结
- 淘淘商城系列——全局异常处理
- 每天学一点Swift----面向对象下(五)
- Java swing 实现angrybird
- PAT (Advanced Level) Practise 1110 Complete Binary Tree (25)
- Sum of Different Primes——素数表+dp
- Java_log2000_框架概念介绍
- 前端之页面加速
- noauth authentication required redis
- cookie技术