Struts Action的多種角色

2021-05-02 11:14:43 字數 1822 閱讀 2208

action類是使用者請求和業務邏輯之間的橋梁。每個action充當使用者的一項業務**。在requestprocessor類預處理請求時,在建立了action的例項後,就呼叫自身的processactionperform()方法,該方法再呼叫action類的execute()方法。action的execute()方法呼叫模型的業務方法,完成使用者請求的業務邏輯,然後根據執行結果把請求**給其他合適的web元件。在實際的應用中,主要有以下幾種比較常見的使用方法:

1.普通的action應用

name="oneform"

input="page.jsp"

actionservlet接收到請求後,取得action類例項,呼叫execute()方法;然後根據返回的actionforward在配置中找forward,forward到指定的uri或action。這樣就沒有form例項被傳入execute()方法,於是execute()必須自己從請求中獲取引數。action可以被forward或者重定向。這種action不能處理通過html form提交的請求,只能處理鏈結式的請求。

4.僅有jsp的action應用

actionservlet接到請求後呼叫forwardaction的execute()方法,execute()根據配置的parameter屬性值來forward到那個uri。這種情況下,沒有任何form被例項化,比較現實的情形可能是form在request更高階別的範圍中定義;或者這個action被用作在應用程式編譯好後充當系統引數,只需要更改這個配置檔案而不需要重新編譯系統。

5.兩個action對應乙個form(和第四種方式部分的action作用相近)

name="oneform"

input="one.jsp"

name="oneform"

input="another.jsp"

這個組合模式可以被用來傳遞form物件,就每個單獨的action來講,處理上並沒有和完整的action有什麼實質的區別。需要注意的是在後乙個action中同樣會呼叫form的reset()和validate()方法,因此我們必須確保form中的資訊不被重寫。這種情況分兩種方式處理:a) 在request中放入乙個指示器表明前乙個action有意向後乙個action傳遞form,從而在後乙個action可以保留那個form中的值,這一方式只能在使用forward時使用。b) 當使用redirect而不是forward時,可以把指示器放在session或更高的級別,在命令鏈的最後一環將這個指示器清除。

6.兩個action對應兩個form

name="oneform"

input="one.jsp"

"name="anotherform"

input="another.jsp"

這個組合方式跟前一種在流程上沒有太大區別,只是我們現在對於兩個action分別提供了form,於是**看上去更加清晰。於是我們可以分別處理web應用程式的輸入和輸出。值得注意的是,後乙個action同樣會嘗試往form中寫入那些引數,不過我們可以這樣處理:a) 在後乙個form中使用另一套屬性名;b) 只提供getter而不提供setter。

基本處理過程:

前乙個action接收輸入、驗證、然後將資料寫入業務層或持久層,重定向到後乙個action,後乙個action手動的從業務層/持久層取出資料,寫入form(通過其他方式),交給前台jsp顯示。這樣做的好處是不必保留輸入form中的值,因此可以使用redirect而不是forward。這樣就降低了兩個action之間的耦合度,同時也避免了不必要的重複提交。

註明:文中所提及的「僅有form」指的是沒有繼承struts提供的action類,而是直接使用了struts自身提供的action類;「僅有action」指的是僅繼承了struts提供的action類而沒有使用form。

介紹Struts Action的多種角色

action類是使用者請求和業務邏輯之間的橋梁。每個action充當使用者的一項業務 在 requestprocessor類預處理請求時,在建立了action的例項後,就呼叫自身的processactionperform 方法,該方 法再呼叫action類的execute 方法。action的exe...

struts Action獲取表單的幾種方式

struts2 的action獲取表單的幾種方式 01.action 直接通過get set方法獲取。public class sysaction extends actionsupport public string getusername public void setusername stri...

lucene的多種搜尋

lucene的搜尋相當強大,它提供了很多輔助查詢類,各自完成一種特殊的查詢,也可以相互組合使用,來完成一些複雜的操作.public class test 按詞條搜尋 public void termsearcher throws ioexception 短語搜尋 public void phrase...