Struts2 中拦截器的 invoke(); 和invokeActionOnly()的区别

/

为了进一步的了解Struts2拦截器的工作流程想自己来控制器栈的流程,问题于是就出来

发现当我在使用 invoke(); 后如果再有拦截需要执行使用如果在那里也使用了 invoke(); 方法后。 将导致先执行的invoke()后面的代码对值栈的操作无效。

这个时候需要用到invokeActionOnly(); 这样对数据的操作是会有效的。 但是带来了新的问题是, invokeActionOnly(); 无法得到值。

于是看了看 API 发现ActionMappingParametersInteceptor 这个还可以用于是还得自己手动调用

于是就将类的继承体系进步详细化 于是把拦截改为了 extends ActionMappingParametersInteceptor

不难看出ActionMappingParametersInteceptor 也是 MethodInterceptor的子类了

看了这两个图就晓得 Struts2 拦截器和SpringMVC的差别了。 Struts2的拦截器真心是多额。

而SpringMVC 中HandlerInterceptor 只有3个子类,有的扯开了,这时候需要自己将数据手动压入值栈顶部。通过

setParameters(invocation.getAction(), invocation.getStack(), invocation.getInvocationContext().getParameters());

Struts2 同时也提供了一些可以选择拦截器栈。 用自己最合适的就行, 当然在不了解前用 default 拦截就行

转载请注明作者和出处,并添加本页链接。
原文链接: //xiaochun.zrlog.com/72.html