Structs 2

博客主要介绍了Structs2中redirect、redirectaction和chain的区别,如redirect和redirect-action重定向后请求参数和处理结果丢失,chain转发后处理结果不丢失;还提及了Structs2流程以及拦截器,拦截器需继承AbstractInterceptor类,配置文件有固定写法。

1  redirect、redirectaction和chain 的区别

 

当使用type=“redirectAction” 或type=“redirect”提交到一个action并且需要传递一个参数时:

 

使用type=“redirectAction”时,结果就只能写Action的配置名,不能带有后缀:“.action”。

Xml代码

<action name="Login" class="steven.actions.LoginAction">

<result name="success" type="redirectAction">User?u_id=${loginBean.u_id}</result>

</action>

 

使用type=“redirect”时,结果应是action配置名+后缀名

Xml代码

<action name="Login" class="steven.actions.LoginAction">

<result name="success" type="redirect">User.action?u_id=${loginBean.u_id}</result>

</action>

 

redirect:action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失。

redirect-action:action处理完后重定向到一个action,请求参数全部丢失,action处理结果也全部丢失。

chain:action处理完后转发到一个action,请求参数全部丢失,action处理结果不会丢失

 

2 Structs2 流程

 

o_struts1.jpg

 

 

3 Structs 拦截器

 

structs2 拦截器是需要继承AbstractInterceptor 类,在xwork-core.jar 里面。

代码如下:

@Override
	public String intercept(ActionInvocation ai) throws Exception {
		Map session = ai.getInvocationContext().getSession(); 
		Object action = ai.getAction();
		String methodName = ai.getProxy().getMethod();
		if(action instanceof UserAction && "login".equals(methodName)) {
			return ai.invoke();
		}
		User user = (User)session.get(Constants.LOGIN_USER_SESSION);
		if(user == null) {
			return com.opensymphony.xwork2.Action.LOGIN;
		} else {
			ai.invoke();
			return com.opensymphony.xwork2.Action.SUCCESS;
		}
	}

 

这里的return login和success 会返回到配置文件定义的页面、

配置文件:

<interceptors>
			<!-- 定义权限检查拦截器    -->
			<interceptor name="loginInterceptor" class="com.scjx.sysmanage.interceptor.LoginInterceptor"/>
			<!-- 定义一个包含权限检查的拦截器栈 -->
			<interceptor-stack name="myDefaultStack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<interceptor-ref name="loginInterceptor"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>	
 
首先是定义了一个拦截器,然后定义了一个拦截器栈,最后再把拦截器栈注入到默认的拦截器。
拦截器栈的执行顺序是 执行的时候是正着来,action 执行之后回来的时候是反着来。
 
方法过滤拦截器MethodFilterInterceptor,是对某个方法进行拦截。
<interceptor-ref name="myInterceptor3">

<param name="includeMethods">execute</param>

<param name="excludeMethods">execute</param>

</interceptor-ref>

 

其中includeMethods ,excludeMethods是固定写法: includeMethods?包含拦截那些方法,多个方法需要用”,”隔开;?excludeMehtods是排除拦截的那些方法;

参考资料:http://www.open-open.com/lib/view/open1338339244354.html

 

 
 

转载于:https://www.cnblogs.com/brucetie/p/3571933.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值