大家好,我們今天繼續學習Struts2。如果對Struts2的創建有問題的朋友請看上一章。
上一章:http://www.cnblogs.com/suxi-blog/articles/6036021.html
下一章:異常處理的配置:http://www.cnblogs.com/suxi-blog/articles/6269880.html
一.配置Action
1.包和命名空間
<package....../>必須指定name(報名)屬性,其他的可選屬性:extends(繼承),namespace(空間名,這個需要注意。),abstract(指定為抽象包)
(實際上所有的Struts2插件文件都會提供一個struts-plugin.xml)
默認的空間名(不使用namespace屬性):可以處理任何空間里的Action請求,前提是他在自己的命名空間里沒有該Action。
根命名空間(namespace="/"):指出里根下的Action請求,如請求/login.action。
2.Action的基本配置
至少指定一個name(通常是用字母和數字組成)屬性作為請求的URL。但通常還需指定class屬性作為Action的實現類,以及邏輯視圖和物理視圖的對應關系<result...../>。
(如果設置struts.enable.SlashesInActionNames常量為true,則可以使用其他字符來作為name)
3.使用Action的動態方法調用(盡量少使用)
action="actionName!methodName"
(注意:這個方法不需到xml文件中配置,只需要把struts.enable.DynamicMethodInvocation設置為true,它是直接調用對應Action的方法,而此方法必須和execute方法一樣的格式)
4.指定method屬性及使用通配符
在Action中加入method屬性調用class處理類的方法
通配符寫在name屬性中,然后在class、method、<result..../>中使用{N}的形式來配備,可以指定method方法,如果不指定使用execute()方法(在這里name最好寫成*.action)
特殊:不做任何處理的直接調轉到其他界面(一般寫在struts.xml的最后,實現簡單的超鏈接。)
<action name="*">
<result>{1}.jsp</result>
</action>
6.配置默認Action
<defualt-action-ref name="....."/>:只是指定默認的處理Action,下面還是要配置其Action。
7.配置Action的默認處理類
<defualt-class-ref class="......."/>
二.配置處理結果
1.struts2提供兩種結果:
局部結果:將<result.../>作為<action.../>的子元素
全局變量:將<result.../>作為<global-results..../>的子元素
(<result.../>常用屬性name、type)
<package name="loginpackage" namespace="/user" extends="struts-default">
<action name="login" class="com.login.LoginAction1">
<result name="success" type="dispatcher">//type還可以指定為location、parse,默認為disoatcher
<param name="location">succees.jsp</param>
//這里的name可以指定兩個值:location指定該邏輯視圖對應的實際的視圖資源,parse可以使用OGNL表達式來作為實際視圖名字,兩個屬性都可不要,默認success
</result>
</action>
</package>
2.struts2支持的結果類型
這里我們先只介紹三個類型,其他的在后面的會詳細介紹的
1.plainText(不常用):只要用來顯示實際資源的代碼。
參數:location:指定實際的視圖資源。charSet:指定輸出界面時的所用到的字符集。一般放在<param.../>中。
2.redirect:將請求重定向到指定的視圖資源。(dispatcher是將請求轉發給視圖資源)
注意:重定向會丟失所有的請求參數、請求屬性、Action的處理結果。不能重定向到WEB-INF路徑下,因為該路徑是被保護的。
參數:location:跳轉地址,parse:是否允許使用表達式
3.redirectAction:功能與redirect一樣,重定向。但這個可以使用ActionMapper
參數:actionName:重定向的Action名,namespace:重定向的Action所占的空間(針對與Action,二redirect針對於具體的資源請求)
3.動態結果:OGNL表達式與通配符連用(借鑒前面的特殊Action)
4.Action屬性值決定物理視圖(這個我也不太懂,有大牛懂得給我說一下)
${屬性名.屬性名........}
5.全局結果(<global-results...../>)
其使用方式和<action.../>幾乎一樣,這個是覆蓋全部的Action,但會被局部的Action所覆蓋。
6.使用PreResultListener
PreResultListener攔截器是在action方法執行后,返回result(即回調before()方法)之前執行的攔截器。要通過ActionInvocation的addPreResultListener()方法完成。
它可以將Action轉入不同的Result,所以它可以作為日志實現方式。
ActionInvocation invocation = ActionContext.getContext().getActionInvocation();
invocation.addPreResultListener(new PreResultListener()
{
public void beforeResult(ActionInvocation invacation, String resultCode)
{
//方法體內寫我們需要處理的監聽器業務邏輯
//上面的形參 resultCode 是前台發送的請求(即 Action 的邏輯名)
}
});
對上面的某些內容的具體代碼:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.il8n.resources" value="mess"/>
<constant name="struts.enale.DynamicMethodInvocation" value="false"/>
<package name="loginpackage" namespace="/user" extends="struts-default">
<action name="login" class="com.login.LoginAction">
<result name="error">/error.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
<package name="registpackage" namespace="/" extends="struts-default">
<action name="MyAction" class="com.login.MyAction">
<result>${target}.jsp</result>
</action>
<action name="*" class="com.login.RegistAction" method="{1}">
<result name="error">/error.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
<package name="Allpackage" extends="struts-default">
<action name="*">
<result>{1}.jsp</result>
</action>
</package>
</struts>
------------------------------------------------------------------------------------------------------------------------------------
內容不是特別詳細,見諒。這只是我的一些見解。有什么錯誤的請指出,謝謝。
上一章:http://www.cnblogs.com/suxi-blog/articles/6036021.html
下一章:異常處理的配置:http://www.cnblogs.com/suxi-blog/articles/6269880.html