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

来源:互联网 发布:表格扫描识别软件 编辑:程序博客网 时间:2024/06/06 18:53

/********************************
关于配置:
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;@Overridepublic 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里的程序)

原创粉丝点击