源碼下載地址:http://download.csdn.net/detail/zhoujing_0424/9239429
Struts2的核心配置文件struts.xml的基本格式爲:
<struts>
<package name=" " namespace=" " extends="struts-default">
<action name=" " class=" " method="execute">
<result name=" " type=" ">index.jsp</result>
</action>
</package>
</struts>
Action配置的各項默認值爲:1)如果沒有爲action指定class,默認是ActionSupport。
2)如果沒有爲action指定method,默認執行action中的execute()方法。
3)如果沒有爲action指定result,默認值爲success。
Struts2爲result提供了多種轉發類型,常用的有dispatcher、redirect、redirectAction、plainText等。以如下圖所示的項目來分別說明這四種轉發方式。
1.dispatcher:默認值,內部請求轉發
<struts>
<package name="zj" namespace="/control" extends="struts-default">
<action name="helloworld" class="cn.zj.action.HelloWorldAction" method="execute">
<result name="success">/WEB-INF/page/hello.jsp</result>
</action>
</package>
</struts>
如上代碼所示,在瀏覽器地址欄輸入http://localhost:8080/Struts2/control/helloworld,將會轉向WEB-INF目錄底下page文件夾中的hello.jsp,在hello.jsp中可以通過${屬性名}表達式訪問action中的屬性。
2.redirect:請求重定向
<struts>
<package name="zj" namespace="/control" extends="struts-default">
<action name="redirect">
<result type="redirect">/index.jsp</result>
</action>
</package>
</struts>
如上代碼所示,訪問URL爲http://localhost:8080/Struts2/control/redirect,會重定向到http://localhost:8080/Struts2/index.jsp。注意:瀏覽器重定向redirect方式無法訪問WEB-INF下的jsp文件,WEB-INF下的jsp文件只能由服務器的內部請求轉發。
3.redirectAction:重定向到另外一個action
<struts>
<package name="zj" namespace="/control" extends="struts-default">
<action name="helloworld" class="cn.zj.action.HelloWorldAction" method="execute">
<result name="success">/WEB-INF/page/hello.jsp</result>
</action>
<action name="redirectAction">
<result type="redirectAction">helloworld</result><!-- 轉向同一個包內的action -->
</action>
<action name="redirectAction2">
<result type="redirectAction">
<param name="actionName">action2</param><!-- 轉向不同包的action -->
<param name="namespace">/control2</param>
</result>
</action>
</package>
<package name="zj2" namespace="/control2" extends="struts-default">
<action name="action2">
<result type="redirect">/index.jsp</result>
</action>
</package>
</struts>
如上代碼所示,重定向到另外一個action分爲兩種情況,一種是重定向到同一個包中的action,這種情況下直接提供actionName即可;另外一種是重定向到不同包中的action,這種情況下需要使用param來指定namespace和actionName。訪問URL爲http://localhost:8080/Struts2/control/redirectAction會先轉向http://localhost:8080/Struts2/control/helloworld,然後轉向WEB-INF目錄底下page文件夾中的hello.jsp,這裏發生了一次請求重定向和一次內部請求轉發。訪問URL爲http://localhost:8080/Struts2/control/redirectAction2會先轉向http://localhost:8080/Struts2/control2/action2,然後再轉向http://localhost:8080/Struts2/index.jsp,這裏發生了兩次請求重定向。
4.plainText:顯示原始文件內容
<struts>
<package name="zj" namespace="/control" extends="struts-default">
<action name="plainText">
<result type="plainText">/index.jsp</result>
</action>
<action name="plainText2">
<result type="plainText">
<param name="location">/index.jsp</param>
<param name="charSet">UTF-8</param><!-- 指定讀取文件的編碼 -->
</result>
</action>
</package>
</struts>
plainText顯示原始文件內容,例如:當我們需要原樣顯示jsp文件源代碼的時候,我們就可以使用此類型。我們還可以使用param的charSet參數來指定讀取文件的編碼,這可以用於解決亂碼問題。