struts2 学习笔记三----动态方法调用

来源:互联网 发布:云计算对oa系统的影响 编辑:程序博客网 时间:2024/04/30 09:45
动态方法调用
  语法格式如下:
http://ip:port/AppPath/<PackageNamespace>/<ActionName>!<MethodName>.<extension>
举例:
http://localhost:8080/struts2demo/user/admin/view1Action!sayHello1.action
可以通过常量struts.enable.DynamicMethodInvocation关闭动态方法调用。


*通配符


方式1:
<action name="view6*" class="cn.yue.struts2demo.HelloWorldAction" method="{1}">
<result>/WEB-INF/page/{1}.jsp</result>
</action>
方式2:
<action name="view7_*" class="cn.yue.struts2demo.HelloWorldAction" method="{1}">
<result>/WEB-INF/page/{1}.jsp</result>
</action>


找静态资源 FilterDispatcher 
org.apache.struts2.static 
template 


StrutsPrepareAndExecuteFilter的功能
其他的Filter通常要位于StrutsPrepareAndExecuteFilter之前,如果其他的Filter要访问Struts的特性,这时候不要使用StrutsPrepareAndExecuteFilter ,而是使用


StrutsPrepareFilter与StrutsExecuteFilter,并让其他的Filter应位于两者之间。


拦截器
在<action>中使用<interceptor-ref>元素引用拦截器或拦截器栈
在struts-default.xml文件中查看和了解默认包中的默认拦截器栈的配置。
在<package>中使用<interceptors>元素配置<interceptor>或<interceptor-stack>
在<package>中使用<default-interceptor-ref >元素为该包中的所有action配置默认拦截器(defaultStack) ,每个包只能指定一个默认拦截器。一旦为某个action显式指定了某


个拦截器,则所属包中定义的默认 拦截器将不起作用。
 
自定义一个进行性能统计或权限判断的拦截器,性能统计拦截器要实现 com.opensymphony.xwork2.interceptor.Interceptor接口。



权限判断的拦截器
权限判断拦截器继承MethodFilterInterceptor类,这样只对某些方法起作用,而对其他方法不起作用。
public class SecurityCheckInterceptor extends MethodFilterInterceptor {
private static final long serialVersionUID = -3398979969067173401L;
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
HttpSession session=ServletActionContext.getRequest().getSession();
User user=(User) session.getAttribute("user");
if(user==null)
{
return "error";
}
return invocation.invoke();
}
}




对指定方法进行拦截
<interceptor-ref name="defaultStack">
    <!-- 对指定方法进行拦截 -->
    <param name="excludeMethods">sayHello</param>
    </interceptor-ref>


借助AnnotationWorkflowInterceptor用注解方式实现拦截器的功能
<interceptor-ref name="annotationWorkflow"></interceptor-ref>
 顺序是:@Before --@BeforeResult--result--@After 
原创粉丝点击