注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

星期五

明天不上班

 
 
 

日志

 
 
关于我

一个特立独行的Java程序员,比较宅,上上网,写博客,听音乐,看电影。

网易考拉推荐

Struts2 拦截器写法  

2013-08-22 13:33:08|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
最近接到一个Test,就是Struts2升级2.3后,项目中Action 执行时间是否提高。
测试Action执行快慢,用拦截器就可以搞定.

关于拦截器 http://struts.apache.org/development/2.x/docs/interceptors.html
拦截器写法 http://struts.apache.org/development/2.x/docs/writing-interceptors.html

下面就是一个测试Action执行时间的拦截器,它将数据写入CSV文件,便于我们导入Execl,进行快速数据分类汇总

package com.hjzheng.gui;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;


public class ActionTimeInterceptor implements Interceptor {

public void destroy() {
System.out.println("ActionTimeInterceptor destroy");
}

public void init() {
System.out.println("ActionTimeInterceptor init");
}

public String intercept(ActionInvocation invocation) throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
String action = request.getRequestURI();


long startTime = System.currentTimeMillis();
String result = invocation.invoke();
long executionTime = System.currentTimeMillis() - startTime;


File file = new File("/opt/hjzheng/data/performance.csv");
if(!file.exists()) file.createNewFile();

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true)));

String s = action + ", " + executionTime + "\n";
out.write(s);
out.close();

return result;
}
}

这样要测试test包下的action的执行时间,所有使用默认拦截器stack, 这样在声明的包下面的所有Action 都会执行actionTime的拦截器
关于如何让拦截器在每个Action都生效 http://struts.apache.org/development/2.x/docs/how-do-we-configure-an-interceptor-to-be-used-with-every-action.html

<package name="test" namespace="/test" extends="struts-default">
<interceptors>
<interceptor name="actionTime" class="com.hjzheng.gui.ActionTimeInterceptor"/>
<interceptor-stack name="myStack">
<interceptor-ref name="actionTime"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"/>
<!-- our action -->

... ...

</package>

然后在项目中加入该拦截器,反复触发web页面,触发Action,然后将所得数据,导入Execl,做分类汇总。也就是group by 求平均。
看来Execl技术,还是挺有用的嘛!
Struts2 拦截器写法 - 星期五 - 星期五

然后再将项目中的struts2升级 (升级到2.3),替换jar包,使用新的filter class在 web.xml

<web-app id="WebApp_9" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.mycompany.myapp.actions</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- ... -->

</web-app>


在测试一遍,又得到一组数据,对两组数据进行比较,作图(我推荐 http://infogr.am/beta/),最后得出的结论是,升级Struts2在我们项目中性能提升不大。

参考资料:
http://struts.apache.org/development/2.x/docs/webxml.html
http://struts.apache.org/release/2.3.x/docs/performance-tuning.html
  评论这张
 
阅读(599)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017