现在的位置: 首页 > 综合 > 正文

拦截器的三种实现方式!

2017年12月25日 ⁄ 综合 ⁄ 共 3773字 ⁄ 字号 评论关闭
拦截器的第一种实现方式:直接实现interceptor

拦截器的第二种实现方式:继承AbstractInterceptor (AbstractInterceptor
实现了
interceptor接口,并对init,destory进行了空实现
public class TheInterceptor1 implements Interceptor {
	public void destroy() {
		System.out.println("destroy invoked !!");
	}
	public void init() {
		System.out.println("init invoked !!!");
	}
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("intercept1 invoked before !!!");
		String value = invocation.invoke();
		System.out.println("intercept1 invoked after !!!");
		return value;
	}
}

拦截器的第三种实现方式:继承MethodsFilterInterceptor (对指定方法进行拦截

public class TheInterceptor3 extends MethodFilterInterceptor {
	
	protected String doIntercept(ActionInvocation invocation) throws Exception {
		invocation.addPreResultListener(new TheListener());
		System.out.println("doIntercept3 invoked before !!!");
		invocation.invoke();
		System.out.println("doIntercept3 invoked after !!!");
		return null;
	}
}
配置文件:struts.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="struts2" extends="struts-default">
		<interceptors>
			<interceptor name="theintercept1" class="db.struts.interceptor.TheInterceptor1">
				<param name="test">init value ~!</param>
			</interceptor>
			<interceptor name="theintercept2" class="db.struts.interceptor.TheInterceptor2"></interceptor>
			<interceptor name="theintercept3" class="db.struts.interceptor.TheInterceptor3"></interceptor>
			<interceptor name="theintercept4" class="db.struts.interceptor.TheInterceptor4"></interceptor>
		</interceptors>
		<global-results>
			<result name="usernameExceptione">/usernameException.jsp</result>
			<result name="passwordException">/passwordException.jsp</result>
		</global-results>
		<global-exception-mappings>
			<exception-mapping result="usernameExceptione"
				exception="UsernameException"></exception-mapping>
			<exception-mapping result="passwordException"
				exception="PasswordException"></exception-mapping>
		</global-exception-mappings>
		<action name="login" class="db.my.struts.loginAction">
			<result name="success">/result.jsp</result>
			<result name="input">/login.jsp</result>
		</action>
		<action name="login2" class="db.my.struts.loginAction2">
			<result name="success">/result.jsp</result>
			<result name="input">/login.jsp</result>
		</action>
		<action name="userAction" class="db.my.struts.UserAction">
			<result name="success">/test2.jsp</result>
		</action>
		<action name="userAction2" class="db.my.struts.UserAction2">
			<result name="success">/test2.jsp</result>
		</action>
		<action name="action1" class="db.my.struts.Action1">
			<result name="success" type="redirectAction">
				<param name="actionName">action2</param>
				<param name="username">${username}</param>
				<param name="password">${password}</param>
				<param name="usernameAndPassword">${usernameAndPassword}</param>
				<param name="kaku">hello world !!!</param>
			</result>
		</action>
		<action name="action2" class="db.my.struts.Action2" method="myExecute">
			<!--
				action 指定了method方法,拦截器就会只拦截指定的这个method方法!
			-->
			<result name="success">/action2.jsp</result>
			<result name="invalid.token">/action3.jsp</result>
			<interceptor-ref name="token"></interceptor-ref>
			<interceptor-ref name="theintercept1"></interceptor-ref>
			<interceptor-ref name="theintercept2"></interceptor-ref>
			<interceptor-ref name="theintercept3">
				<param name="includeMethods">execute,myExecute</param>
				<param name="excludeMethods">myExecute</param>
			</interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
		<action name="moden" class="db.my.struts.ModenAction">
			<result name="success">/ModenAccept.jsp</result>
			<result name="input">/action3.jsp</result>
		</action>
		<action name="action4" class="db.my.struts.action4">
			<result name="success">/ModenAccept.jsp</result>
			<interceptor-ref name="theintercept4">
				<param name="includeMethods">getPassword,execute</param>
			</interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
	</package>
</struts>

抱歉!评论已关闭.