十三、struts2使用自定义拦截器

一、接文章十二在struts-demo.xml中,声明拦截器、定义拦截器栈xml配置如下:

<!-- 声明拦截器 -->
		<interceptors>
			<interceptor name="mytime" class="interceptor.MyTimeInterceptor"></interceptor>
			<!-- 定义拦拦截器栈 -->
			<interceptor-stack name="myinterceptorstack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<interceptor-ref name="mytime"></interceptor-ref>
			</interceptor-stack>
		</interceptors>

整体xml文件为:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	<package name="demo" namespace="" extends="base">
		<!-- 声明拦截器 -->
		<interceptors>
			<interceptor name="mytime" class="interceptor.MyTimeInterceptor"></interceptor>
			<!-- 定义拦拦截器栈 -->
			<interceptor-stack name="myinterceptorstack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<interceptor-ref name="mytime"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<action name="date" class="action.DataTypeConvertAction" >
			<result name="ok">/dateType.jsp</result>
		</action>
		<action name="fileup" class="action.FileupAction" >
			<result name="ok">/fileup.jsp</result>
		</action>
		<action name="down" class="action.DownAction" >
			<result name="ok" type="stream">
				<!--有输出中文的时使用 param name="contentType">application/octet-stream;charset=utf-8</param -->
		        <param name="contentType">application/x-msdownload</param>
	            <param name="inputName">tagFile</param>
	            <param name="contentDisposition">filename=${filename}</param>
			</result>
		</action>
	</package>
</struts>
注意:声明拦截器配置必须放在xml最前部分,要定义一个拦截器栈并在栈中将struts2的默认拦截器继承下来因为其他功能都是基于默认拦截器实现的

二、在fileup  action 中引用拦截器栈

<interceptor-ref name="myinterceptorstack"></interceptor-ref>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	<package name="demo" namespace="" extends="base">
		<!-- 声明拦截器 -->
		<interceptors>
			<interceptor name="mytime" class="interceptor.MyTimeInterceptor"></interceptor>
			<!-- 定义拦拦截器栈 -->
			<interceptor-stack name="myinterceptorstack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<interceptor-ref name="mytime"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<action name="date" class="action.DataTypeConvertAction" >
			<result name="ok">/dateType.jsp</result>
		</action>
		<action name="fileup" class="action.FileupAction" >
			<interceptor-ref name="myinterceptorstack"></interceptor-ref>
			<result name="ok">/fileup.jsp</result>
		</action>
		<action name="down" class="action.DownAction" >
			<result name="ok" type="stream">
				<!--有输出中文的时使用 param name="contentType">application/octet-stream;charset=utf-8</param -->
		        <param name="contentType">application/x-msdownload</param>
	            <param name="inputName">tagFile</param>
	            <param name="contentDisposition">filename=${filename}</param>
			</result>
		</action>
	</package>
</struts>

三、根据xml配置 建立拦截器实现类 MyTimeInterceptor.java 该类实现Interceptor接口 代码如下:

package interceptor;

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

public class MyTimeInterceptor implements Interceptor {

	@Override
	public void destroy() {
		System.out.println("自定义拦截器销毁!");

	}

	@Override
	public void init() {
		System.out.println("自定义拦截器初始化!");

	}

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		long star = System.currentTimeMillis();
		String str = invocation.invoke();// 接着调用后续的拦截器或是ACTION
		long end = System.currentTimeMillis();
		System.out.println("拦截器执行时间:" + (end - star));
		return str;
	}

}
项目结构及运行结果如下图:


完成!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值