struts2总结(自己做项目时遇到的问题加上一些网上的资料)


/********************************
关于配置:
1.package继承struts-default(struts2中已经配置的)
2.当package中abstract属性为true时,下面不能陪action
3.跳转类型(常用的):redirect(默认的),dispatcher,chain,redirect-action
这里要注意的是:一般action传值到页面(例如传userList到显示页面)跳转类型为redirect(也可以为chain.),但当一个action需要验证,传一个error时,跳转必须为dispatcher, 因为验证出错后 会跳转到input视图中,在input视图中要显示错误信息,错误信息又是在request空间中存储的,如果为redirect数据就无法传递

关于拦截器:
1.所有的action里的方法都是在拦截器栈中才能得以实现
2.可以在自己的某个action中,加入一个拦截器,例如timer,这时候必须要注意的是,当你在action中自己加拦截器后,默认的拦截器栈就不会起作用了,需要手动引入
<package name="mypackage" extends="struts-default">
<action name="*user" class="com.tmaic.web.UserAction" method="{1}">
			<result name="success">main.jsp</result>
			<result name="input">index.jsp</result>
                             <interceptor-ref name="timer"></interceptor-ref>
                              <interceptor-ref name="defaultStactk"></interceptor-ref>
		</action>

</package>

3.也可以配置自己的拦截器栈,让所有的action都应用,这时引入的就不再是struts-delault而是自己配置的:
<interceptor-stack name="myInterceptorStack">
				<interceptor-ref name="myMethodInterceptor"></interceptor-ref>
				<interceptor-ref name="myTime"></interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		
		<default-interceptor-ref name="myInterceptorStack"/>

4.如果要写自己的拦截器的话,继承AbstractInterceptor:
package com.kaishengit.util;

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

public class MyTimerInterceptor extends AbstractInterceptor{

	private static final long serialVersionUID = 1L;
	
	
	private String name;

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		long startTime = System.currentTimeMillis();
		String result = invocation.invoke();
		long execute = System.currentTimeMillis() - startTime;
		
		String actionName = invocation.getProxy().getActionName();
		String method = invocation.getProxy().getMethod();
		
		System.out.println("Name:" + name);
		System.out.println("执行"+actionName+"!"+method+"耗时:" + execute + "ms.");
		return result;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	

}

5.这里运用到了代理模式,其中invocation.getProxy()得到的是Action的名字
6.拦截器只能拦截struts2中的action,而过滤器全都过滤(但过滤器耦合http里的程序)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值