1.部署一个struts项目的步骤:
a,在WEB-INF下的lib文件夹下粘贴struts开发包;
b,在WEB-INF下的web.xml下添加filter和filter-mapping节点。方法也是复制粘贴。
c,在src目录下粘贴struts.xml文件(名字和位置是固定的)。
2. namespace决定了action的访问路径,默认为"",表示任意路径,namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action,/xxx/index.action,或者/xxx/yyy/index.action。
如果为"",则/x/index.action与/x/y/index.action都可以访问名为index的action。namespace为""的作用是处理其它package处理不了的action。
3. name的作用同Java的包的作用,是为了区别不同的类防止重名以及条理化,与访问的url无关。name通常命名为模块的名字,比如用户管理写为user。
4.struts.xml中的result不写name属性,默认是"success";action不写class默认是ActionSupport;action不写method默认调用execute()方法
5.struts三种接受参数的方法:属性接受、DomainModel、DTO+ModelDriver,其中ModelDriver不需要set/get方法,域模型在jsp页面要带对象的名字,比如user.name。
6.action三种写法:一种是什么都不继承,一种是继承ActionSupport,一种是实现Action接口
7.默认action(空或找不到action的时候调用的action)调用方法
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index"></default-action-ref>
<action name="index"><!--调用ActionSupport的execute方法-->
<result>/default.jsp</result>
</action>
</package>
8.模块包含
<struts>
<constant name="struts.devMode" value="true" />
<include file="login.xml" />
</struts>
9.result的type属性
a:dispacher服务器端跳转(forward),默认值
b:redirect客户端跳转
以上两个只能跳转到视图,不能跳转到action
c:chain可以跳转到action(forward到action),不加斜杠
d:redirectAction(redirect到action)
以上四个最常用
还有:freemarker,httpheader,stream,velocity,xslt,plaintext,tiles
10.<global-results>全局结果集、extends关键字
<package name="user" namespace="/user" extends="struts-default">
<global-results>
<result name="mainpage">/main.jsp</result>
</global-results>
<action name="index">
<result>/index.jsp</result>
</action>
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_success.jsp</result>
<result name="error">/user_error.jsp</result>
</action>
</package>
<package name="admin" namespace="/admin" extends="user">
<action name="admin" class="com.bjsxt.struts2.user.action.AdminAction">
<result>/admin.jsp</result>
</action>
</package>
11.动态结果
struts配置:
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>${r}</result>
</action>
UserAction中的代码:
public String execute() throws Exception {
if(type == 1) r="/user_success.jsp";
else if (type == 2) r="/user_error.jsp";
return "success";
}
注:UserAction要声明type和r成员变量并加set/get方法。一般在客户端跳转时用到,用来加参数。
12.result类型是redirect时向jsp传递参数
<package name="user" namespace="/user" extends="struts-default">
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result type="redirect">/user_success.jsp?t=${type}</result>
</action>
</package>
user_success.jsp中显示参数:
<s:property value="#parameters.t"/>
注:UserAction中要定义type成员变量,并加上set/get方法。
13.struts通配符配置示例
<struts>
<constant name="struts.devMode" value="true" />
<package name="actions" extends="struts-default" namespace="/actions">
<action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">
<result>/Student{1}_success.jsp</result>
</action>
<action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">
<result>/{1}_{2}_success.jsp</result>
<!-- {0}_success.jsp -->
</action>
</package>
</struts>