package
在struts2的配置文件中引入了面向对象思想,使用了分包管理。易于管理动作类。便于模块化开发动作类。
<package name="p1" extends="struts-default" abstract="true" namespace="/hh">
</package>
- name:包名,在struts.xml中不能有相同的包名 包名是唯一的
- extend:继承,固定struts-default(struts2-core.jar/struts-default.xml中)
- abstract:抽象包,被用于继承,一般在抽象包中不声明action
- namespace:命名空间,访问路径,默认为空字符串,可用于模块划分http://localhost:8080/struts2_01/hh/hello
namespace 查找规则: 如命名空间(/h1/h2/h3)先找/h1/h2/h3命名空间 没有再找/h1/h2命名空间 没有再找/h1命名空间 如果找到 在当前名称空间中找对应name的action执行,找不到则在默认名称空间(空)中找action执行
action
配置动作,处理请求路径
<package name="p1" extends="struts-default">
<action name="hello" class="org.ccit.com.web.action.HelloAction" method="sayhello">
<result name="success">/success.jsp</result>
</action>
</package>
action中定义的常量
- name:动作名称
- class:动作类全名
- method:动作中的方法名称。默认是public String execute(){}
方法要求:
1.public 2.返回值必须是String(可以是void 表示不跳转任何页面) 3.没有参数public class HelloAction { public String sayhello() throws Exception { System.out.println("sayhello方法被调用"); return "success";}}
三种Action写法
-
public class HelloAction { public String sayhello() throws Exception { System.out.println("sayhello方法被调用"); return "success";}}
-
写个Action类实现Action接口,然后实现excute方法 在xml文件中不指定method 默认访问excute方法
<action name="login2" class="org.ccit.com.web.action.login02"> <result name="success">/success.jsp</result> </action>
public class login02 implements Action{ @Override public String execute() throws Exception { return SUCCESS; } }
-
写个Action类继承ActionSupport,如果action中没有指定method 在其父类ActionSupport中有execute方法。
<action name="login3" class="org.ccit.com.web.action.login03" method="sayhello"> <result name="success">/success.jsp</result> </action>
public class login03 extends ActionSupport public String sayhello() throws Exception { System.out.println("sayhello方法被调用"); return "success"; } }
默认的action执行类及修改
-
默认的action执行类 如果在action中不指定类处理 默认类为ActionSupport
配置在(struts-default.xml)<default-class-ref class=“com.opensymphony.xwork2.ActionSupport” /><action name="login3" > <result name="success">/success.jsp</result> </action>
修改默认的动作类(在struts.xml中)
<package name="p1" extends="struts-default" <default-action-ref name="login2"></default-action-ref> </package>
通配符使用
public class UserAction extends ActionSupport {
public String add(){
return SUCCESS;
}
public String delete(){
return SUCCESS;
}
public String update(){
return SUCCESS;
}
public String find(){
return SUCCESS;
}
}
未使用:
<package name="p2" extends="struts-default" namespace="/user">
<action name="add" class="org.ccit.com.web.action.UserAction" method="add">
<result name="success">/userJSP/add.jsp</result>
</action>
<action name="find" class="org.ccit.com.web.action.UserAction" method="find">
<result name="success">/userJSP/find.jsp</result>
</action>
<action name="delete" class="org.ccit.com.web.action.UserAction" method="delete">
<result name="success">/userJSP/delete.jsp</result>
</action>
<action name="update" class="org.ccit.com.web.action.UserAction" method="update">
<result name="success">/userJSP/update.jsp</result>
</action>
</package>
使用:
在2.5版本中加<global-allowed-methods>regex:.*</global-allowed-methods>
打开动态方法调用 可以使用多个* 一次类推 {1} {2}
http://localhost:8080/struts2_01/user/add
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<package name="p3" extends="struts-default" namespace="/user">
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="*" class="org.ccit.com.web.action.UserAction" method="{1}">
<result name="success">/userJSP/{1}.jsp</result>
</action>
</package>
http://localhost:8080/struts2_01/user/add_user
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<package name="p3" extends="struts-default" namespace="/">
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="*_*" class="org.ccit.com.web.action.UserAction" method="{1}{2}">
<result name="success">/{2}JSP/{1}.jsp</result>
</action>
</package>
动态方法的调用(不常用)
加!加方法名
http://localhost:8080/struts2_01/user!add
开启动态方法调用
<constant name=“struts.enable.DynamicMethodInvocation” value=“true” />
在高版本中需要规定允许调用的动态方法
<global-allowed-methods>find,add,delete,update</global-allowed-methods>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="p3" extends="struts-default">
<global-allowed-methods>find,add,delete,update</global-allowed-methods>
<action name="user" class="org.ccit.com.web.action.UserAction">
<result name="success">/success.jsp</result>
</action>
</package>