Struts2:Action中result的各種轉發類型

 源碼下載地址: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參數來指定讀取文件的編碼,這可以用於解決亂碼問題。



    



發佈了40 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章