struts2 拦截器

Struts2 拦截器


背景:

拦截器是struts中最强大的特性之一,可以使得在action和result之间进行一些处理,作用于页面传递请求,数据封装,国际化,类型转换,上传文件


拦截器意义:

AOP思想

极大程度的解耦

应用于权限控制,日志记录等领域


struts2 通配符


UserAction.java

package action;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
	/*version1.0 2.0 3.0*/
	/*public String add() throws Exception {
		System.out.println("进入到add");
		return "success";
	}
	public String select() throws Exception {
		System.out.println("进入到show");
		return "success";
	}
	public String update() throws Exception {
		System.out.println("进入到update");
		return "success";
}
	public String delete() throws Exception {
		System.out.println("进入到delete");
		return "success";
}*/
	/*version 4.0*/
	public String add() throws Exception {
		System.out.println("进入到add");
		return "User_add";
	}
	public String select() throws Exception {
		System.out.println("进入到show");
		return "User_select";
	}
	public String update() throws Exception {
		System.out.println("进入到update");
		return "User_update";
}
	public String delete() throws Exception {
		System.out.println("进入到delete");
		return "User_delete";
}

	
}



NewsAction.java

package action;

import com.opensymphony.xwork2.ActionSupport;

public class NewsAction extends ActionSupport {
	/*version 1.0 2.0 3.0 4.0*/
	/*public String add() throws Exception{
		
		System.out.println("news add");
		return "success";
	}
	public String select() throws Exception{
			
			System.out.println("news select");
			return "success";
		}
	public String delete() throws Exception{
		
		System.out.println("news delete");
		return "success";
	}
	public String update() throws Exception{
		
		System.out.println("news update");
		return "success";
	}*/
	/*version 4.0*/
	public String add() throws Exception {
		System.out.println("进入到add");
		return "News_add";
	}
	public String select() throws Exception {
		System.out.println("进入到show");
		return "News_select";
	}
	public String update() throws Exception {
		System.out.println("进入到update");
		return "News_update";
}
	public String delete() throws Exception {
		System.out.println("进入到delete");
		return "News_delete";
}
}


<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">struts.xml</span>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>

<package name="action" extends="struts-default">
	<!-- version 1.0 -->
	<!-- <action name="userAction" class="action.UserAction" method="add">
	<result name="success">/index.jsp</result>
	</action>
	<action name="userAction" class="action.UserAction" method="delete">
	<result name="success">/index.jsp</result>
	</action>
	<action name="userAction" class="action.UserAction" method="update">
	<result name="success">/index.jsp</result>
	</action>
	<action name="userAction" class="action.UserAction" method="select">
	<result name="success">/index.jsp</result>
	</action> -->
	
	<!--version 2.0  -->
	<!-- <action name="userAction" class="action.UserAction" method="{*}">
	<result name="success">/index.jsp</result>
	</action>
	<action name="newsAction" class="action.NewsAction" method="{*}">
	<result name="success">/index.jsp</result>
	</action> -->
	<!-- version 3.0 -->
	<!-- <action name="*Action" class="action.{1}Action" method="{*}">
	<result name="success">/index.jsp</result> -->
	
	<!--version 4.0  -->
	<action name="*_*" class="action.{1}Action" method="{2}">
	<result name="{1}_{2}">/{1}_{2}.jsp</result>
	
	
	</action>
	
</package>
</struts>    


拦截器的使用

action.InterceptorAction.java

package action;

import com.opensymphony.xwork2.ActionSupport;

public class InterceptorAction extends ActionSupport {

	@Override
	public String execute() throws Exception {
		System.out.println("进入InterceptorAction");
		return "success";
	}

	
}
interceptor.Interceptor1.java
package interceptor;

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

public class Interceptor1 implements Interceptor {
	String name;
	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}
	@Override
	public void init() {
		System.out.println(name+"初始化拦截器");

	}
	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		
		//让到达拦截器的请求继续前进,到达想要访问的资源
		//作用相当于一个中间件,继续完成请求
		System.out.println("进入拦截器2");
		String returnValue=arg0.invoke();
		System.out.println("穿过拦截器2");
		return returnValue;
	}
}


interceptor.MethodInterceptor.java

package interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
/*
 * 方法拦截器,用于拦截指定的方法
 */
public class MethodInterceptor extends MethodFilterInterceptor {
	@Override
	protected String doIntercept(ActionInvocation arg0) throws Exception {
		System.out.println("进入方法拦截器");
		String url=arg0.invoke();
		System.out.println("穿过方法拦截器");
		return url;
	}

}


interceptor.Interceptor1.java
package interceptor;

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

public class Interceptor2 implements Interceptor{

	@Override
	public void destroy() {
	}

	@Override
	public void init() {	
	}

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		System.out.println("进入拦截器2");
		String returnValue=arg0.invoke();
		System.out.println("穿越拦截器2");
		return returnValue;
	}
}

struts.xml

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



<package name="action" extends="struts-default">
<interceptors>
<interceptor name="interceptor1" class="interceptor.Interceptor1"></interceptor>
<interceptor name="interceptor2" class="interceptor.Interceptor2"></interceptor>

<!--方法拦截器,可以选择拦截指定的方法  -->
<interceptor name="methodInterceptor" class="interceptor.MethodInterceptor">
<param name="includeMethods" >add,delete</param>
<param name="excludeMethods">show</param>
</interceptor>

<!-- 将需要使用到的拦截器包装到一起 -->
<interceptor-stack name="allInterceptor">
	<interceptor-ref name="interceptor1" ></interceptor-ref>
	<interceptor-ref name="interceptor2"></interceptor-ref>
	<interceptor-ref name="defaultStack"></interceptor-ref>
	<interceptor-ref name="methodInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
		<!-- 默认处理方式,对当前的所有action采取同样的处理 -->
	<global-results >
	<result name="error">/error.jsp</result>
	</global-results>

	<action name="interceptorAction" class="action.InterceptorAction" method="{*}">
	<interceptor-ref name="allInterceptor"></interceptor-ref>
	<result name="success">/login.jsp</result>
	</action>
</package>

</struts>    





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值