struts2 自定义异常拦截器配log4j
log4j.rootLogger = debug,stdout,F log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.Encoding = Utf-8
log4j.appender.stdout.Threshold = debug
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n log4j.appender.F = org.apache.log4j.RollingFileAppender
log4j.appender.F.File =d:/log/1111111.txt
log4j.appender.F.Append = true
log4j.appender.F.Threshold = INFO
log4j.appender.F.MaxFileSize = 1
log4j.appender.F.MaxBackupIndex = 5
log4j.appender.F.layout = org.apache.log4j.PatternLayout
log4j.appender.F.layout.ConversionPattern =[%d{yyyy-MM-dd HH\:mm\:ss\:SSS}] [%-5p] [method\:%l]%n%m%n%n log4j.logger.exeception.ExceptionAction=DEBUG, async
log4j.additivity.exeception.ExceptionAction=false
log4j.appender.async=org.apache.log4j.RollingFileAppender
log4j.appender.async.File=d:/logs/async.log
log4j.appender.async.Append=true
log4j.appender.async.MaxFileSize=1GB
log4j.appender.async.MaxBackupIndex=5
log4j.appender.async.layout=org.apache.log4j.PatternLayout
log4j.appender.async.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] [%t] - %m%n
log4j.appender.async.encoding=gbk
<!-- 测试自定义异常 -->
<action name="exceptionAction_*" class="exeception.ExceptionAction" method="{1}">
<result>/hello.jsp</result>
</action>
<package name="all" extends="struts-default">
<interceptors>
<interceptor name="error" class="interception.ErrorInterceptor"></interceptor>
<!-- 配置拦截器栈 -->
<interceptor-stack name="myStacks">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="error" />
</interceptor-stack>
</interceptors>
<!-- 覆盖底层的拦截器栈 对包中的所有action都有效 -->
<default-interceptor-ref name="myStacks"></default-interceptor-ref> <global-results>
<result name="error" type="dispatcher">/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
</package>
package interception; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger;
import org.apache.struts2.StrutsStatics; import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class ErrorInterceptor implements Interceptor { public void init() { } public String intercept(ActionInvocation actioninvocation) { String result = null; // Action的返回值
try {
// 运行被拦截的Action,期间如果发生异常会被catch住
result = actioninvocation.invoke();
return result;
} catch (Exception e) {
/**
* 处理异常
*/
String errorMsg = "出现错误信息,请查看日志!";
//通过instanceof判断到底是什么异常类型
if (e instanceof RuntimeException) {
//未知的运行时异常
RuntimeException re = (RuntimeException) e;
//re.printStackTrace();
errorMsg = re.getMessage().trim();
System.out.println(errorMsg);
}
//把自定义错误信息
HttpServletRequest request = (HttpServletRequest) actioninvocation
.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
/**
* 发送错误消息到页面
*/
request.setAttribute("errorMsg", errorMsg); /**
* log4j记录日志
*/
Logger log = Logger.getLogger(actioninvocation.getAction().getClass());
log.error(errorMsg, e);
return "error";
}// ...end of catch
} public void destroy() { }
}
package exeception;
import com.opensymphony.xwork2.ActionSupport;
public class ExceptionAction extends ActionSupport{
public String testException() {
//throw new RuntimeException("hello exception interceptor!!!");
try {
int i=1/0;
} catch (Exception e) {
System.out.println("测试 11是否执行到这句!!!!");
throw new RuntimeException("出错了!!");
}
return "success";
}
}

struts2 自定义异常拦截器配log4j的更多相关文章
- JavaWeb_(Struts2框架)拦截器interceptor
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- struts2总结六: Struts2的拦截器
一.Struts2的系统结构图
- Struts2使用拦截器完成权限控制示例
http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求: 要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...
- Struts2自定义拦截器Interceptor以及拦截器登录实例
1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...
- struts2之拦截器
1. 为什么需要拦截器 早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足.可扩展性降低, Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于 ...
- Struts2【拦截器】就是这么简单
什么是拦截器 拦截器Interceptor.....拦截器是Struts的概念,它与过滤器是类似的...可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Str ...
- 【struts2】拦截器基础
1)拦截器是什么? 拦截器(Interceptor)是Struts2最强大的特性之一,它是一种可以让你在Action执行之前和Result执行之后进行一些功能处理的机制.来回顾一下官方给出的Strut ...
- JavaWeb框架_Struts2_(三)---->Struts2的拦截器
2. Struts2的拦截器(使用拦截器实现权限控制) 2.1 拦截器的概述 拦截器是Struts2的核心组成部分,它可以动态的拦截Action调用的对象,类似与Servlet中的过滤器.Struts ...
随机推荐
- mysql常用的查询优化
原文链接:https://www.jb51.net/article/39221.htm 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2 ...
- Docker应用
1.tomcat容器创建 docker run -d --name Jdd_tomcat -p 8081:8080 tomcat [root@localhost etc]# docker run - ...
- 近期Freecodecamp问题总结
最近没什么事,刷了freecodecamp的算法题,发现了自己基础的薄弱 1 where are thou 写一个 function,它遍历一个对象数组(第一个参数)并返回一个包含相匹配的属性-值对( ...
- 第 8 章 容器网络 - 065 - 容器在 Weave 中如何通信和隔离?
首先在host2 执行如下命令: weave launch 10.12.31.22 这里必须指定 host1 的 IP 10.12.31.22,这样 host1 和 host2 才能加入到同一个 we ...
- hdoj4871
5 4 21 2 12 3 23 4 34 5 2
- 组件、框架、Packagist、Composer
组件是一组打包的代码,是一系列相关的类.接口和Trait,用于帮助我们解决PHP应用中某个具体问题. 优秀的PHP组件具备以下特性: 作用单一:专注于解决一个问题,而且使用简单的接口封装功能 小型:小 ...
- js css 多个按需要顺序加载
https://github.com/rgrove/lazyload/
- Liblinear and Libsvm-rank训练数据的bash代码
Liblinear and Libsvm-rank训练数据的bash代码: for j in "amazon_mp3" "video_surveillance" ...
- Docker创建Tomcat镜像
1.创建Dockerfile文件 vi Dockerfile Dockerfile内容 FROM debian ADD ./jdk-8u191-linux-x64.tar.gz /usr/local/ ...
- Python connect mariadb(Python连接mysql)
#!/usr/bin/python#coding=utf-8 import MySQLdb # 打开数据库连接db = MySQLdb.connect("192.168.1.250" ...