学习淘淘商城第五十二课(全局异常处理)
来源:互联网 发布:nuitka python 编辑:程序博客网 时间:2024/05/22 15:42
我们知道项目运行过程中肯定会出现一些问题,当出现异常的时候,我们往往在Controller层捕获并处理了,但这样做不利于我们统一管理。
我们这节课便来学习下全局异常处理器,让它来管理项目所有的异常,如下图所示。当请求过来时先经过前端控制器,前端控制器将请求交给Controller,Controller将请求交给Service,Service将请求交给Dao,当Dao处理完请求之后,将处理结果返回给Service,Service再将返回结果返回给Controller,Controller再将返回结果返回给前端控制器。同理,如果出现异常,最终都会传到前端控制器。我们便在前端控制器对异常进行统一处理。
’
我们需要在前端工程来添加全局异常处理器,在taotao-search-web工程新建一个包com.taotao.search.exception并在该包下新建全局异常处理器类GlobalExceptionResolver,如下图所示。我们还需要在src/main/resources目录下放置log4j.properties文件。
类的内容如下:
package com.taotao.search.exception;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.servlet.HandlerExceptionResolver;import org.springframework.web.servlet.ModelAndView;public class GlobalExceptioResolver implements HandlerExceptionResolver {//获取loggerprivate static final Logger logger = LoggerFactory.getLogger(GlobalExceptioResolver.class);@Overridepublic ModelAndView resolveException(HttpServletRequest rquest, HttpServletResponse response, Object handler,Exception e) {logger.info("进入全局异常处理器。。。");logger.debug("测试handler的类型:"+handler.getClass());//控制台打印异常e.printStackTrace();//向日志文件中写入异常logger.error("系统发生异常", e);//发邮件(采用jmail客户端进行发送) //发短信//展示错误页面ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("message", "当前网络出现故障,请稍后重试!");//返回逻辑视图,这样回去访问error目录下的error.jspmodelAndView.setViewName("error/exception");return modelAndView;}}
上面的代码中用到了Logger,这个Logger我们使用的是slf4j包下的Logger,因为slf4j是一个平台,它可以处理各种日志处理文件,比如log4j。我们在src/main/resources目录下放置log4j.properties文件(最好名字就叫log4j.properties,这样lo4j会自动加载,不用配置,如果叫别的名字还需要配置)。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"/> <!-- 配置注解驱动 --><mvc:annotation-driven /><!-- 视图解析器 --><beanclass="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.GlobalExceptioResolver"/><!-- 配置包扫描器,扫描@Controller注解的类 --><context:component-scan base-package="com.taotao.search.controller"/><!-- 引用dubbo服务 --><dubbo:application name="taotao-search-web"/><dubbo:registry protocol="zookeeper" address="192.168.156.14:2181"/> <dubbo:reference interface="com.taotao.search.service.SearchService" id="searchService" /> </beans>
下面我们人为抛一个异常,我们把SearchController的search方法的try catch去掉,直接往外抛异常,然后人为设置一个异常(1/0肯定会报异常)。
下面我们重启taotao-search-web工程,然后访问淘淘商城首页,在搜索框中输入搜索条件并进行搜索,便会看到如下图所示的异常页面,可以看到该页面的异常提示信息就是我们刚才定义的信息。
我们找到logs目录,在它下面有server.log文件,打开它,可以看到我们刚才人为设置的异常信息。
- 学习淘淘商城第五十二课(全局异常处理)
- 学习淘淘商城第三十二课(Redis集群测试)
- 学习淘淘商城第八十二课(SSO工程搭建)
- 淘淘商城系列——全局异常处理
- 学习淘淘商城第五课(安装SVN服务器)
- 学习淘淘商城第五十四课(为何引入ActiveMQ)
- 学习淘淘商城第五十五课(ActiveMQ的安装)
- 学习淘淘商城第五十七课(接收Queue消息)
- 学习淘淘商城第四十二课(导入商品数据-service层)
- 学习淘淘商城第七十二课(网页静态化-业务逻辑及测试)
- 学习淘淘商城第九十二课(用户注册页面实现)
- 学习淘淘商城第五十一课(搜索功能切换到集群)
- 学习淘淘商城第五十三课(使用JMail来发送邮件)
- 学习淘淘商城第五十六课(ActiveMQ发送queue消息)
- 学习淘淘商城第五十八课(ActiveMQ发送topic消息和接收topic消息)
- 学习淘淘商城第五十九课(ActiveMQ持久化Topic消息)
- 学习淘淘商城第一课
- 学习淘淘商城第一课
- mssql提权
- hdu2059 转载 学习
- 数据访问层
- 对卷积层dilation膨胀的作用的理解,caffe-ssd dilation Hole算法解析
- 数据库优化---水平分区和垂直分区和读写分离
- 学习淘淘商城第五十二课(全局异常处理)
- get获取网络方法
- rabbitmq笔记
- 08.ldap网络帐号
- SAP HANA条件控制语句
- scikit-learn的基本用法(二)——数据集的使用
- 山东省第四届ACM大学生程序设计竞赛 Alice and Bob
- 让你的站点也支持MarkDown
- Android 杀死process进程(自杀和他杀)