1.actionInvocation是什么
ActionInvocation就是Action的调用者。ActionInvocation在Action的执行过程中,负责Interceptor、Action和Result等一系列元素的调度。
理解ActionInvocation你需要对Action的调用过程有一个全面的了解:
http://tech.ddvip.com/2009-01/1232090919106049.html
讲的还是很清楚地!
2.ActionInvocation干什么
Interceptor通过ActionInvocation可以完全的改变Action行为:不让它执行、改变返回值、甚至可以细颗粒的操作Action的方法
查看ActionINvocation 的API,他有getActionProxy(),getResultCode();getActionContext();
ActionProxy在action中用来构建执行环境,ActionProxy提供Action执行的时候一切所需要的配置、参数等等,当然,也要有进行Action调用的入口。
public String intercept(ActionInvocation invocation) throws Exception { Map session=invocation.getInvocationContext().getSession(); String actionName=invocation.getProxy().getActionName(); String methodName=invocation.getProxy().getMethod(); }你写过滤器的时候 有这个方法吧,如果没有你继承extends AbstractInterceptor
示例:
public String intercept(ActionInvocation invocation) throws Exception{
ActionContext ctx = invocation.getInvocationContext();
//如果请求的action在相应范围内存在,则直接return出intercept方法,调用相应action去执行
for(String action:whiteList){
if(ctx.getName().equals(action)){
return invocation.invoke();
}
}
//如果请求的action不在定义的范围内,则查看是否已经登录,是否有权限做这个action的操作
HttpSession session = ServletActionContext.getRequest().getSession();
if(session.getAttribute("SESSION_ADMIN") == null){
session.setAttribute("sessionErrorMessage","请先登录系统!");
return "loginError";
}
//如果请求的action不在相应范围内,但是已经登录,则直接执行该action请求
return invocation.invoke();
}