每個action在第一次請求的時候初始化,而不是在actonservlet啟動讀取配置的時候初始化。
在web環境中,actioni一旦被初始化就一直存在於容器中,也就是單例模式。如果處理不當會產生併發問題,所以一般不能在action中儲存使用者狀態。
即使在配置中多個path路徑都指向同乙個action類,在記憶體中也只有乙份action,也就是說多個url訪問到的action都是同乙個。
如果要統計action被訪問的次數,則可以利用action的單例性在action中設定乙個屬性來進行統計。
在action的execute()方法中,一般需要返回乙個actionforward物件,但是如果返回null,這時,actionservlet就不會做相應的**處理,而只是簡單的返回。所以如果業務邏輯很簡單的話,也可以在execute()中直接呼叫response.getwriter(),得到printwriter物件,然後和普通servlet一樣,用pw物件輸出響應。
這個例項物件也在action.execute()方法中作為第乙個引數傳遞,所以我們可以在execute()方法中得到這個action的配置資訊。
actionforward類封裝了在標籤中的配置,可以通過邏輯名稱name得到path指向的頁面或者資源路徑。其中的redirect屬性如果為true則指明使用sendredirect方法重定向,否則預設就是請求**。還有個重要的屬性,contextrelative指明了path中的/是站點根目錄context-relative還是應用根目錄module-relative。預設是false指明是應用根目錄。如果不寫 / 的話,就必須是完全絕對路徑,http://...這樣加協議頭的。
生命週期:
檢查action的對映,確定存在對應的action
根據name屬性,查詢formbean的配置資訊
檢查actionform的使用範圍(request or session),確定在此範圍下是否已經存在乙個例項
如果已經存在了這樣乙個formbean,就重用,否則就重新構建乙個formbean物件,並且置入相應的範圍(request or session)中,scope屬性需要在元素中配置,如果不配置scope屬性,預設是session!
呼叫reset方法
呼叫form的set方法為屬性賦值
如果元素中的validate屬性為true,就呼叫formbean的validate方法進行校驗
如果vallidate方法沒有返回錯誤資訊,actionservlet就將formbean作為引數傳給action.execute()方法,否則返回input頁面
注:actionform基類中的reset和validate方法都沒有實際處理能力,需要自己來覆寫來實現功能。
Spring Security的重要元件
securitycontextholder 認證成功後的資訊由holder通過theadlocal機制 當然在不同的場景中,這裡可以切換到別的方式 儲存在securitycontext中。authentication 將使用者提交的認證資訊進行封裝成authentication theauthent...
struts中使用tiles元件
1.在你的struts配置檔案struts config.xml中加入下面的配置 2.生成tiles def.xml檔案 3.生成layout.jsp布局檔案 page contenttype text html charset gbk taglib uri tags struts tiles pr...
struts中使用tiles元件
1.在你的struts配置檔案struts config.xml中加入下面的配置 2.生成tiles def.xml檔案 3.生成layout.jsp布局檔案 page contenttype text html charset gbk taglib uri tags struts tiles pr...