Struts2_拦截器_简单介绍
一、初始介绍:
1. 案例:计算execute运行的时间:
1. 在struts.xml配置文件即将进入action01中时,对事件进行拦截,开始计时
2. 当action中事件执行完成,终止拦截,结束计时
<2>代码执行:
1.所需jar包
asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
commons-chain-1.2.jar
commons-fileupload-1.3.jar
commons-io-2.0.1.jar
commons-lang3-3.1.jar
commons-logging-1.1.3.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar
jcommon-1.0.23.jar
jfreechart-1.0.19.jar
log4j-1.2.17.jar
mysql-connector-java-5.1.8-bin.jar
ognl-3.0.6.jar
struts2-core-2.3.15.3.jar
struts2-jfreechart-plugin-2.3.4.1.jar
struts2-json-plugin-2.3.4.1.jar
xwork-core-2.3.15.3.jar
2.web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 配置核心控制器 -->
<filter>
<filter-name>strutsFilter</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>strutsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3.新建struts.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="day06" extends="struts-default">
<!-- 声明拦截器 -->
<interceptors>
<interceptor name="timeInterceptor" class="interceptor.TimeInterceptor"></interceptor>
<!-- 声明拦截器栈 -->
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="timeInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 全局result 适用于所有的action中配置 -->
<global-results>
<result name="error">/error.jsp</result>
</global-results>
<!-- 全局异常 -->
<global-exception-mappings>
<!-- 如果action类中出现异常 跳转到error字符串对应的页面 -->
<exception-mapping result="error" exception="java.lang.RuntimeException"></exception-mapping>
</global-exception-mappings>
<action name="ac01" class="action.Action01">
<!-- 配置拦截器到需要的action上 -->
<interceptor-ref name="timeInterceptor"></interceptor-ref>
<!--
a.action中 如果没有配置任何拦截器 struts会默认提供一个 defaultStack(默认拦截器栈 params等)
b.一旦你配置了一个拦截器 默认的deufaultStack就不会在提供了 一定要将defaultStack手动配置了
-->
<interceptor-ref name="defaultStack"></interceptor-ref>
<result>/index.jsp</result>
</action>
<action name="ac02" class="action.Action02">
<interceptor-ref name="myStack"></interceptor-ref>
<result>/index.jsp</result>
</action>
</package>
4.编写action类
1. (action01)
package action;
public class Action01 extends BaseAction{
@Override
public String execute() throws Exception {
String s ="";
for(int i=0;i<100000;i++){
s+="a";
}
return SUCCESS;
}
}
2. (action02)
package action;
public class Action02 extends BaseAction{
@Override
public String execute() throws Exception {
StringBuffer buffer = new StringBuffer("");
for(int i=0;i<100000;i++){
buffer.append("a");
}
return SUCCESS;
}
}
5.编写拦截器(interceptor)
package interceptor;
import java.io.FileWriter;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
//计算时间
public class TimeInterceptor extends AbstractInterceptor {
/**
* ActionInvocation:action对象和拦截器对象的调用执行对象
*/
@Override
public String intercept(ActionInvocation invocation) throws Exception {
long start = System.currentTimeMillis();
//调用后续的拦截器或者action对象
//如果action对象被调用 那么result没有意义
//如果action对象没有被调用 那么result标识jsp页面
String result = invocation.invoke();//execute就被调用执行了
long end = System.currentTimeMillis();
long time = end-start;
//获取action类名 方法名 Class
String actionClassName = invocation.getAction().getClass().getSimpleName();
String actionMethodName = invocation.getProxy().getMethod();
String info = "类名:"+actionClassName+",方法名"+actionMethodName+",花了"+time+"毫秒";
System.out.println(info);
//往磁盘文件输出info
FileWriter fw = new FileWriter("d:\\8b.txt",true);
fw.write(info);
fw.close();
return result;
}
}
6.分别访问:
localhost:8080/struts1201/ac01
localhost:8080/struts1201/ac02