struts2動態方法調用共有三種方式:
1、通過action元素的method屬性指定訪問該action時運行的方法
<package name="action" extends="struts-default" namespace="/user"> <action name="login" class="cn.orlion.action.LoginAction" method="login"> <result name="success">/index.jsp</result> <result name="error">/login.jsp</result> </action> </package>
[
在struts2框架中使用包來管理Action,包的作用和java中的類包是非常類似的,它主要用於管理一組業務功能相關的action。在實際應用中,我們應該把一組業務功能相關的Action放在同一個包下。
(1)name - 配置包時必須指定name屬性,如果其他包要繼承該包,必須通過該屬性進行引用,name屬性值不能有相同 。
(2)namespace - 包的namespace屬性用於定義該包的命名空間。該屬性可以不配置,對本例而言,如果不指定該屬性,默認的命名空間為""(空字符串)。
例:當把namespace設成/user時,訪問的時候必須在action前邊加上/user,即http://localhost:8080/Struts2Demo/login.action => http://localhost:8080/Struts2Demo/user/login.action才能訪問到該action。
(3)extends - 通常每個包都應該繼承struts-default包, struts-default包是由struts內置的,它定義了struts2內部的眾多攔截器和Result類型。
]
如果不指定method屬性則當訪問/user/login.action時會默認執行cn.orlion.action.LoginAction中execute方法。
2、感嘆號方式(官方不建議使用此方法)
先要在struts.xml文件中開啟:<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="user" namespace="/user" extends="struts-default"> <action name="user" class="cn.orlion.user.UserAction"> <result> /login.jsp </result> </action> </package>
訪問http://localhost:8080/Struts2Demo/user/user!login就能訪問到
3、通配符
<package name="actions" namespace="/actions" extends="struts-default"> <action name="student*" class="cn.orlion.actions.StudentsAction" method="{1}"> <result> /login.jsp </result> </action> <action name="*-*" class="cn.orlion.actions.{1}Action" method="{2}"> <result> /login.jsp </result> </action> </package>
如上配置所示,當訪問http://localhost:8080/Struts2Demo/actions/studentlogin的時候就會匹配到student*,從而去執行StudentsAction中的login方法
當訪問http://localhost:8080/Struts2Demo/actions/Teachers-login的時候就會匹配到*-*,從而去執行TeachersAction中的login方法
當訪問http://localhost:8080/Struts2Demo/actions/Students-reg的時候就會匹配到*-*,從而去執行StudentsAction中的reg方法
注意,jsp文件中路徑最好使用絕對路徑以避免命名空間問題!