struts2 result type型別

weixin_33941350發表於2016-06-13

result標籤中type的型別

型別 說明
chain 用於Action鏈式處理
dispatcher 用於整合JSP,是<result>元素預設的型別
freemarket 用來整合FreeMarket
httpheader 用來處理特殊的HTTP行為
redirect 用來重定向到其它檔案
redirectAction 用來重定向到其它Action
stream 用來香瀏覽器返回一個InputStream
velocity 用來整合Velocity
xslt 用來整合XML/XSLT
plainText 用來顯示頁面的原始程式碼

 

 

 

 

 

 

 

 

 

 

 

result的type型別定義在struts-default.xml中,定義如下

<package name="struts-default" abstract="true">
        <result-types>
            <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
            <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
            <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
            <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
            <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
            <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
            <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
            <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
            <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
            <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
            <result-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult" />
        </result-types>

 

1.dispatcher結果型別

  dispatcher結果型別用來表示“轉發”到指定結果資源,它是struts2的預設結果型別

  (1)建一個test.jsp頁面,內容如下:

    <s:form method="post" action="/Login_toLogin">
        <s:textfield name="username" label="使用者名稱"/>
        <s:password name="password" label="密碼"/>
        <s:submit></s:submit>
    </s:form>

  (2)在src/action下建一個類TestAction

package action;

public class TestAction {

    private String username;
    private String password;
    
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String execute(){
        return "success";
    }
}

  TestAction類中封裝了兩個屬性username和password

 

  (3)配置struts.xml檔案中action

    <action name="test" class="action.TestAction">
        <result type="dispatcher">/testSuccess.jsp</result>
    </action>

 

  (4)新建一個testSuccess.jsp

    使用者:<s:property value="username"/><br/>
    密碼:<s:property value="password"/>

輸出結果:

 

  使用dispatcher記過型別是,由於只是將結果轉發到指定資源,所以能夠暴力會請求的資訊,而且在使用瀏覽器地址顯示為test.action而不是testSuccess.jsp

 

2、redirect結果型別

  redirect結果型別用來“重定向”,到指定的結果資源,該資源可以是JSP檔案,也可以action類。使用redirect結果型別時,系統將呼叫HttpServletResponse的sendRedirect()方法。

  還是上面的例子,只是在struts.xml中,修改result元素的結果型別為redirect,程式碼如下:

<action name="test" class="action.TestAction">
        <result type="redirect">/testSuccess.jsp</result>
</action>

  結果在url不在test.action,而是testSuccess.jsp。由於redirect使得瀏覽器再一次發出請求,所有原來的請求資源將不會存在,所以使用<s:property value="username"/>是無法獲取到請求資料的

 

3、stream結果型別

  stream表示流,這種結果型別通常用於實現使用者下載檔案的Action配置中,引數有:

  (1)contentType:用來指定床底給瀏覽器stream型別。預設為text/plain

  (2)contentLength:指定資料了的位元組長度

  (3)contentDiposition:指定檔案下載的處理方式,包括內聯(inline)和附件(attachment)這兩種方式,內聯方式表示瀏覽器會嘗試直接顯示檔案,附件方式會彈出檔案儲存對話方塊,預設值為inline。

  (4)inputName:表示資料了屬性。預設值為inputStream

  (5)bufferSize:表示緩衝區容量。預設為1024

相關文章