struts2拦截器[代码备份]

.从ActionSupport继承的基类中,获取全部request值:

public abstract class BaseAction extends BaseAction {		

                //自动注入request的参数,到日志
		Map params = getRequest().getParameterMap();
		if(params!=null && params.size()>0) {
			for(String key : params.keySet()){
				extInfo.put(key,Arrays.toString(params.get(key)));
			}
		}

 

 

2.拦截器,执行后拦截action返回值:

public class DefaultParamInterceptor extends AbstractInterceptor {
     @Override
     public String intercept(ActionInvocation actioninvocation) throws Exception {
		String result = actioninvocation.invoke();
		Object a2 = actioninvocation.getStack().findValue("message");
		System.out.println(a2);
		return result;
	}
}

 

。。这两段用来记日志,当然是比较爽的了,呵呵。

 

3.拦截器里面获取request

HttpServletRequest request = ServletActionContext.getRequest();

这样就不需要绕来绕去了

 

4. ActionInvocation.getAction()也是一个比较有趣的方法, 通过这里拿到当前action的类名,那么我们就可以用规则来匹配,使得拦截器只拦截指定action。

 

 

5. Filter 在Interceptor 之前执行。 因为Filter是servlet规范,对request做处理;而Interceptor只是struts2Action 代理实例之后的方法拦截器。

 

6. Interceptor 分Action执行前拦截,执行后拦截。  执行前拦截比较好理解,Interceptor配置越靠前,就越先执行。

执行后拦截呢???? 留作思考把,呵呵。

 

notice:

7.Interceptors must be stateless and not assume that a new instance will be created for each request or Action. Interceptors may choose to either short-circuit the ActionInvocation execution and return a return code (such as Action.SUCCESS ), or it may choose to do some processing before and/or after delegating the rest of the procesing using ActionInvocation.invoke() .

 

拦截器并不是线程安全的,也不保证每次请求都会实例化新对象,所以一定不要将拦截器做成有状态,简单说,就是不要定义类范围的变量。

你可能感兴趣的:(技术点滴)