struts2學習筆記

來源:互聯網
上載者:User
package詳解

1.1. action

A)name action的名稱,是外界反問的唯一性標識

B)class action所對應的類

C)method 在一個action中可能有很多個方法,那麼我們就可以結合這個屬性去訪問 一個action中不同的方法體。

如:在LoginAction中有兩個方法體,分別是login和checkValid,如何訪問呢?

你會發現這兩個action的配置載入了同一個類com.sun.demo.LoginAction,不同的是屬性name和屬性method的區別,在訪問的時候,根據name去訪問到對應的類檔案,然後再根據對應的method去訪問相應的方法體。

DMI【動態調用action的不同方法】:

我們不再根據method屬性來訪問不同的方法了,而是在前台View頁面進行設定:

VIEW:

登入

驗證

用驚嘆號【!】來做標識,依次向下執行,前面為action名稱,後面是方法名。

以上method和DMI的區別在於前者每個方法可以返回不同的結果,且在每個方法中可以使用不同的攔截器,而後者最終的結果都是一樣的,它們使用的攔截器也是一樣的,具體使用那種方式進行設定依據開發的實際需要進行選擇。

在這裡有必要提醒一下:

在設定action屬性method時,其多對用的Action類中的方法名可以為“do方法名”,如:

在com.sun.demo.LoginAction類中對應的方法可以寫成這樣doLogin

萬用字元映射:

* 代表0-N個字元,但是不包括"/"

** 代表0-N個字元,包括"/"

\ 逸出字元

在一個包中可能存在多個action,如:

仔細觀察就會發現,這些action的名稱有些相同的特徵,我們可以通過萬用字元來處理。

當我們訪問addNote時,add欄位就會填補*萬用字元,同時依據預留位置的順序去查詢對應的方法。

對於以上這種action名稱的設定,我們一般是在指明對與什麼表進行操作的情況下,但是當有多個表時,我們的操作就顯得有點麻煩了,現在我們又有了新的設定,如下:

也就是設定多個萬用字元,同時採用預留位置遍曆的方式去訪問各個action中的方法。{0}表示**的整體資訊

注意:在用預留位置去匹配某個Action的時候,得注意首字母的大小寫

萬用字元的變種:

預設action :

........

*號可以匹配任何的字串,所以以上的兩個預設的Action會不會發生錯誤呢?【不會】

總結:

當action的name屬性中沒有任何萬用字元時,其優先順序最高。

只要有萬用字元,不論是什麼萬用字元,一律按順序向下執行。

我們一般依照沒有萬用字元,有萬用字元,沒有匹配的順序進行編寫。

D)Converter

1.2. default-action-ref

"Login"是一個action的引用,在訪問action的時候,如果action不存在,那麼就會訪問預設的action。但是這個必須放在所有action的最前面,另外值得關注的是,這樣的預設處理只是對於action的訪問就行了設定,對於訪問不存在的頁面是無法進行處理的,這就需要在web.xml 中就行設定了。

404/error.jsp

不過這樣的設定有時候會出問題,不是總是正確的,這個得參考一下瀏覽器的進階設定

1.3. default-class-ref

當訪問不到指定的action類時,就會調用這個預設的action類進行處理。

1.4. default-interceptor-ref

當訪問不到指定的interceptor類時,就會調用這個預設的interceptor進行處理。

1.5. global-exception-mappings

設定全域異常轉向,可以被直接存取。

1.6. global-results

設定全域處理結果轉向,可以在action類中進行直接的轉向。

1.7. Interceptors攔截器

在struts2中,許多人都action都有一個共同需要關心的問題,比如對頁面的輸入進行驗證,對上傳的檔案進行預先處理,防止重複提交,在頁面顯示前進行下拉式清單的初始化,“攔截器”使得其變得相應容易些。

攔截器在action被調用前後都會被調用去執行一些code,struts2架構的大部分功能均是通過攔截器來實現的,如防止重複提交,類型轉換,對象封裝,校正,檔案上傳,頁面預裝載等,每個攔截器都是獨立裝載的,我們可以根據需要為每一個action配置其所需要的攔截器,例如:一個action需要來進行類型轉換和檔案上傳,那麼我們就可以為其設定兩個攔截器。

測試一下:

找到xwork.jar包下的com.opensymphony.xwork2.interceptor包下的TimerInterceptor.class.

怎麼配置攔截器:

在某個包下編寫如下代碼:

在該包下的任何一個action中,若想要使用該攔截器,那麼只要在action中添加如下代碼:

然後再去運行專案檔,我們發現報錯了,為什麼呢????

在這裡要特別的提醒一下:

我們之前的項目中,package繼承了struts-default,這其中實現了各種攔截器,是系統預設建立的,在我們自己不去手動設定攔截器時,系統會預設的調用struts-default中的攔截器,而當我們自己手動設定了攔截器後,系統就不再去調用預設的那些配置了,在上面的例子中,我們的攔截器是配置在一個頁面提交的action中的,所以還需要一個參數攔截器,可是我們沒有配置所以報錯了,而在自己不手動設定攔截器的情況下,在struts-default中這些必須的攔截器配置都是有的,懂了吧。但是我們在配置的時候倒是不妨多參考一下其中的各種資訊。

再配置一個攔截器:

在需要傳遞參數的action中引用該攔截器:

當然了,我們也可以在action中引用預設的攔截器:

別的包,子包也可以繼承父包,那麼在父包中定義的攔截器在子包中也可以使用。

當某些action共同使用多個相同的攔截器時,可以將這些重複使用的攔截器放在一個攔截器棧中:

...........

1.8. result-types

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.