后台系统中应该须要一个功能那就是将每一个请求的url地址和请求的參数log出来,方便系统调试和bug追踪,使用struts2时能够使用struts2的全局拦截器实现此功能:

import java.util.Iterator;
import java.util.Map;
import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor; /**
* 全局方法拦截器,用于log方法调用以及參数信息
*/
public class GloableLogInterceptor extends AbstractInterceptor { private static final long serialVersionUID = 1L; private Logger log = Logger.getLogger(this.getClass()); @Override
public String intercept(ActionInvocation invocation) throws Exception { if (log.isDebugEnabled()) {
HttpServletRequest request = (HttpServletRequest) invocation
.getInvocationContext().get(
ServletActionContext.HTTP_REQUEST);
this.logParameters(request);
} return invocation.invoke();
} /**
*
* @param request
*/
private void logParameters(HttpServletRequest request) { Map<String, String[]> params = request.getParameterMap(); if (null == params || params.size() == 0) {
return;
} Set<String> keys = params.keySet();
Iterator<String> keysIt = keys.iterator(); StringBuffer container = new StringBuffer();
container.append("requestUrl[url:")
.append(request.getRequestURL().toString()).append("]")
.append(",paremeters:["); while (keysIt.hasNext()) { String key = keysIt.next();
String[] values = params.get(key); StringBuffer str = new StringBuffer();
str.append(key).append("="); if (values.length > 1) {
str.append("{"); for (String value : values) {
str.append(value).append(",");
} this.removeLastCharacter(str);
str.append("}");
} else
str.append(values[0]); str.append(",");
container.append(str.toString());
} this.removeLastCharacter(container);
container.append("]");
log.debug(container.toString());
} private void removeLastCharacter(StringBuffer buff) {
int len = buff.length();
buff.replace(len - 1, len, StringUtils.EMPTY);
}
}

这时我们还须要自己定义拦截器链,这样就不须要在每一个package中声明使用此拦截器。仅仅要将须要的package继承我们带有日志拦截功能的拦截器就可以!

		<interceptors>
<!--全局日志拦截器-->
<interceptor name="gloableLogInterceptor" class="gloableLogInterceptor"></interceptor> <interceptor-stack name="defaultStack">
<interceptor-ref name="exception" />
<interceptor-ref name="alias" />
<interceptor-ref name="servletConfig" />
<interceptor-ref name="i18n" />
<interceptor-ref name="prepare" />
<interceptor-ref name="chain" />
<interceptor-ref name="scopedModelDriven" />
<interceptor-ref name="modelDriven" />
<interceptor-ref name="fileUpload" />
<interceptor-ref name="checkbox" />
<interceptor-ref name="multiselect" />
<interceptor-ref name="staticParams" />
<interceptor-ref name="actionMappingParams" />
<interceptor-ref name="params">
<param name="excludeParams">^action:.*,^method:.*</param>
</interceptor-ref>
<!-- 在注入參数后进行拦截 -->
<interceptor-ref name="gloableLogInterceptor"></interceptor-ref>
<interceptor-ref name="tokenInterceptor"></interceptor-ref>
<interceptor-ref name="conversionError" />
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="debugging" />
<interceptor-ref name="deprecation" />
</interceptor-stack>
</interceptors> <default-interceptor-ref name="defaultStack"></default-interceptor-ref>
</package>

最新文章

  1. RMS:不能对生产服务器使用测试清单
  2. jquery.lazyload 实现图片延迟加载jquery插件
  3. ES6(一)ECMAscript6介绍
  4. EF框架中加子类后出现列名 &#39;Discriminator&#39; 无效问题
  5. 使用并行的方法计算斐波那契数列 (Fibonacci)
  6. how-to-install-hyper-v-on-a-virtual-machine-in-hyper-v.aspx
  7. 微软IOC容器Unity简单代码示例2-配置文件方式
  8. TCP/IP详解学习笔记(6)-UDP协议
  9. FileUpload
  10. Sql语句之查询所有学生所有科目分数及总分
  11. wcf客户端 cookie
  12. C#入门经典(2-重置窗体布局,界面介绍,错误列表)
  13. gevent拾遗
  14. Windows系统操作指令汇总
  15. C重定向
  16. TensorFlow简易学习[3]:实现神经网络
  17. TextView的升级版———AutoCompleteTextView
  18. Dynamics 365 启用跟踪及读取跟踪文件工具
  19. 高通 NXP NFC(PN547PN548) 移植流程 android6.0
  20. java 判断元素是否在数组内

热门文章

  1. jq封装插件
  2. linux使用crontab实现PHP执行计划定时任务
  3. vba txt读写的几种方式
  4. CAD如何直接打印,不出现打印对话框?
  5. 【转载】Appium环境搭建(Windows版)
  6. Java:冒泡排序 | 二分查找
  7. python下载网络文件
  8. CCF201703-2 学生排队 java(100分)
  9. python3中post请求里带list报错
  10. 九九乘法表-Java