struts2之action
struts2在配置web.xml時,會指定filter攔截路徑,如*.action。當瀏覽器請求一個action時,默認調用的是該action中的execute()方法。想要調用其他方法,需要為action指定method屬性。
例如以下的struts.xml的配置
<struts> <package name="musicManager" namespace="/" extends="struts-default"> <action name="queryMusic" class="com.pxy.struts.action.MusicManagerAction"method="queryMusic"> <result name="queryMusic">/musicList.jsp</result> </action> </package> </struts>
當一個action中有多個方法需要被調用時,struts.xml文件中的action配置將顯得非常臃腫,為解決這一問題,Struts2提供了動態方法調用。
形如:
<form action="DemoAction!methodName.action">
DemoAction 為struts.xml文件中<action name="">中的值,methodName為action中需要調用的方法。中間用!隔開
相應的struts.xml配置將需要增加動態調用常量,根據配置的<result>信息定向跳轉路徑。
<!--定義常量,以下信息表示Struts2允許動態方法調用--> <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <!--MusicmanagerAction配置信息--> <action name="musicManager" class="com.pxy.struts.action.MusicManagerAction"> <result name="queryMusic">/musicList.jsp</result> <result name="deleteMusic">/musicList.jsp</result> </action>
另一種動態調用:通配符
struts.xml中,<action> 中的name屬性支持通配符,表達一個action定義多個邏輯action
相關的struts.xml配置如下:
<action name="userManager_*" class="包名.UserManagerAction" method="{1}"> <result name="{1}">{1}.jsp</result> </action>
訪問路徑:
http://localhost/struts2/userManager_update.action
userManager_update.action,指定了*中的內容為update,通過{1}表示*中的第一個內容,定向到update.jsp頁面
Struts2之管理結果集:
dispatcher 結果集、redirectAction 結果集
最典型的<result> 配置如下:
<!--為success的邏輯視圖配置result,type屬性指定結果類型--> <result name=“success” type=“dispatcher”> <!--指定該邏輯視圖對應的實際的視圖資源--> <param name=“location”>/index.jsp</param> <param name=“parse”>true</param> </result>
其中,location屬性指定了該邏輯對應的實際視圖資源
parse屬性指定了是否允許在實際視圖中使用ognl表達式,默認為true。
該配置的簡化形式如下:
<action name=“login” class=“com.pxy.struts.action.LoginAction”> <!--為success的邏輯視圖配置result,type屬性指定結果類型--> <result name=“success”type=“dispatcher”>/main.jsp </result> </action>
其中,結果類型也可以省略,<result>name屬性默認為success,type屬性默認為dispatcher
dispatcher結果類型:
實際會轉換為如下的代碼
RequestDispatcher rd=request.getRequestDispatcher("index.jsp");
rd.forward(request,response);
redirectAction結果類型:
當一個Action處理完成後,需要讓另一個Action進行下一步處理,這時就可以使用redirectAction結果類型。
形式如下
<action name="musicManager" class="包名稱.MusicManagerAction"> <result name="queryMusic">/musicList.jsp</result> <result name="addMusic" type="redirectAction"> <param name="actionName">musicManager</param> <param name="method">queryMusic</param> </result> </action>
當執行addMusic後,需要讓歌曲信息重新顯示在頁面上,這裏就需要重定向到musicManager這個action,執行裏面的queryMusic方法
在Action中訪問Servlet API
Struts2提供了一個ServletActionContext類訪問Servlet API。
public String showServletApi(){ HttpServletRequest request= ServletActionContext.getRequest(); //獲取request request.setAttribute("requestKey", "requestValue"); HttpSession session=request.getSession(); //獲取session session.setAttribute("sessionKey", "sessionValue"); ServletContext context=ServletActionContext.getServletContext(); //獲取context context.setAttribute("servletContextKey", "servletContextValue"); HttpServletResponse response=ServletActionContext.getResponse(); //獲取response request.setAttribute("encoding", response.getCharacterEncoding()); return "success"; }
struts2之action