<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

    Struts 控制器組件負責接受用戶請求、更新模型,以及選擇合適的視圖組件返回給用戶??刂破鹘M件有助于將模型層和視圖層分離,有了這種分離,就可以在同一個模型的基礎上得心應手地開發多種類型的視圖。 Struts 控制器組建主要包括:

    ?

    · ActionServlet 組件:充當 Struts 框架的中央控制器。

    · RequestProcessor 組件:充當每個子應用模塊的請求處理器。

    · Action 組件:負責處理一項具體的業務。

    ?

    Struts 框架采用控制器組件來預處理所有的客戶請求,這種集中控制方式可以滿足 MVC 設計模式的兩大需求:

    ?

    ·首先,控制器在用戶輸入數據和模型之間充當媒介 / 翻譯者的角色,提供一些通用功能,如安全、登入和其他針對具體用戶請求的重要服務,當系統的這些通用功能出現需求變更時,部需要修改整個應用,只需要修改局部的控制器組件即可。

    ·其次,由于所有的請求都經過控制器過濾,因此可以降低視圖組件之間,以及視圖組件和模型組件之間的相互依賴關系,提高每個組件的相對獨立性。由控制器組件來決定把合適的視圖組件返回給用用戶,這可以減少視圖組件之間直接的,錯綜復雜的連接關系,使應用更加靈活,便于維護。

    ?

    Struts 框架采用 ActionServlet RequestProcessor 組件進行集中控制,并采用 Action 組件來處理單項業務。

    ?

    ?

    控制器組件的控制機制

    ?

    Struts 的控制器組件主要完成以下任務:

    ·接受用戶請求

    ·根據用戶請求,調用合適的模型組件來執行相應的業務邏輯。

    ·獲取業務邏輯執行結果。

    ·根據當前狀態以及業務邏輯執行結果,選擇合適的視圖組件返回給用戶。

    ?

    1 Action

    ?

    ?org.apache.struts.action.ActionServlet 類是 Struts 框架的核心控制器組件,所有的用戶請求都先有 ActionServlet 來處理,然后再由 ActionServlet 把請求轉發給其他組件。 Struts 框架只允許在一個應用中配置一個 ActionServlet 類,在應用的生命周期中,僅創建 ActionServlet 類的一個實例,這個 ActionServlet 實例可以同時響應多個用戶請求。

    ?

    <!--[if !supportLists]-->(a)???<!--[endif]-->Struts框架初始化過程

    <!--[if !supportLists]-->(1)???<!--[endif]-->調用initInternal()方法,初始化Struts框架內在的消息資源,如與系統日志相關的同志、警告和錯誤消息。

    <!--[if !supportLists]-->(2)???<!--[endif]-->調用initOther()方法,從web.xml文件中加載ActionServlet的初始化參數,如config參數。

    <!--[if !supportLists]-->(3)???<!--[endif]-->調用initServlet()方法,從web.xml文件中加載ActionServletURL映射信息。此外還會注冊web.xmlStruts配置文件所使用的DTD文件,這些DTD文件用來驗證web.xmlStruts配置文件的語法。

    <!--[if !supportLists]-->(4)???<!--[endif]-->調用initModuleConfig()方法,加載并解析子應用模塊的Struts配置文件;創建ModuleConfig對象,把它存儲在ServletContext中。

    <!--[if !supportLists]-->(5)???<!--[endif]-->調用initModuleMessageResources()方法,加載并初始化默認子應用模塊的消息資源:創建MessageResources對象,把它存儲在ServletContext中。

    <!--[if !supportLists]-->(6)???<!--[endif]-->調用initModuleDataSources()方法,加載并初始化默認子應用模塊的數據源。如果在Struts配置文件中沒有定義<data-sources>元素,就忽略這一流程。

    <!--[if !supportLists]-->(7)???<!--[endif]-->調用InitModulePlugins()方法,加載并初始化默認子應用模塊的所有插件。

    <!--[if !supportLists]-->(8)???<!--[endif]-->當默認子應用模塊被成功地初始化后,如果還包括其他子應用模塊,將重復流程(4)(7),分別對其他子應用模塊進行初始化。

    ?

    <!--[if !supportLists]-->(b)???<!--[endif]-->ActionServletprocess()方法

    ActionServlet 實例接受到 HTTP 請求之后,在 doGet() doPost() 方法都會調用 process() 方法來處理請求。一下是 ActionServlet process() 方法的源代碼:

    ?

    protected voidprocess (HttpServletRequest request, HttpServletResponse response)

    throwIOException, ServletException {

    ?

    ModuleUtils.getInstance().selectModule(request,getServletContext());

    getRequestProcessor(getModuleConfig(request)).process(request,response);

    }

    ?

    process() 方法中,首先調用 org.apache.struts.util.ModuleUtils 類的 selectModule() 方法,這個方法選擇負責處理當前請求的子應用模塊,然后把與子應用模塊相關的 ModuleConfig MessageResources 對象存儲倒 request 范圍中,這使得框架的其余組件可以方便地從 request 范圍中讀取這些對象,從而獲取應用配置信息和消息資源。

    process() 方法的第二步操作為獲得 RequestProcessor 類的實例,然后調用 RequestProcessor 類的 process() 方法,來完成十幾的預處理請求操作。

    ?

    ?

    <!--[if !supportLists]-->(c)???<!--[endif]-->擴展ActionServlet

    Sturts 1.1 之前的版本中, ActionServlet 類本身包含了很多處理請求的代碼。從 Struts 1.1 開始,多數功能被移到 org.apache.struts.action.RequestProcessor 類中,以便減輕 ActionServlet 類的控制負擔。

    ?

    盡管新版本的 Struts 框架允許在應用中創建礦展 ActionServlet 類的子類,但是這在多數情況下沒有必要,因為控制器的多數控制功能位于 RequestProcessor 類中。

    ?

    如果實際應用確實需要創建自己的 ActionServlet 類,則可以創建一個 ActionServlet 的子類,然后在 web.xml 文件中配置這個客戶化 ActionServlet 類。

    ?

    如果覆蓋了 init() 方法,應該確保首先調用 super.init() ,它保證 ActionServlet 的默認初始化操作被執行。除了覆蓋 init() 方法外,事實上,還可以根據十幾需要覆蓋 ActionServlet 的任何其他方法。

    ?

    ?

    2 RequestProcessor

    ?

    ? 對于多應用模塊的 Struts 應用,每個子應用模塊都有各自的 RequestProcessor 實例。在 ActionServlet process() 方法中,一旦選擇了正確的子應用模塊,就會調用子應用模塊的 RequestProcessor 實例的 process() 方法來處理請求。在 ActionServlet 調用這個方法時,會把當前的 request response 對象傳給它。

    Struts 框架只允許應用中存在一個 ActionServlet 類,但是可以存在多個客戶化的 RequestProcessor 類,每個子應用模塊都可以擁有單獨的 RequestProcessor 類。如果想修改 RequestProcessor 類的一些默認功能,可以覆蓋 RequestProcessor 基類中的相關方法。

    ?

    <!--[if !supportLists]-->(a)???<!--[endif]-->RequestProcessor類的process()方法

    RequestProcessor 類的 process() 方法負責實際的預處理請求操作。

    RequestProcessor 類的 process() 方法一次執行一下流程:

    (1) 調用 processMultipart() 方法。如果 HTTP 請求方式為 POST ,并且請求的 contentType 屬性以“ multipart/form-data ”開頭,標準的 HttpServletRequest 對象將被重新包裝,以方便處理“ multipart ”類型的 HTTP 請求。如果請求方式為 GET ,或者 contentType 屬性不是“ multipart ”,就直接返回原始的 HttpServletRequest 對象。

    (2) 調用 processPath() 方法,獲得請求 URI 的路徑,這一信息可用于選擇合適的 Struts Action 組件。

    (3) 調用 processLocale() 方法,當 ControllerConfig 對象的 locale 屬性為 true ,將讀取用戶請求中包含的 Locale 信息,然后把 Locale 實例保存在 session 范圍內。

    (4) 調用 processContent() 方法,讀取 ControllerConfig 對象的 contentType 屬性,然后調用 response.setContentType(contentType) 方法,設置響應結果的文檔類型和字符編碼。

    (5) 調用 processNoCache() 方法,讀取 ControllerConfig 對象的 nocache 屬性,如果 nocache 屬性為 true ,在響應結果中將加入特定的頭參數: Pragma 、 Cache-Control Expires ,防止頁面被存儲在客戶瀏覽器的緩存中。

    (6) 調用 processPreprocess() 方法。該方法不執行任何操作,直接返回 true 。子類可以覆蓋這個方法,執行客戶化的預處理請求操作。

    (7) 調用 processMapping() 方法,尋找和用戶請求的 URI 匹配的 ActionMapping 。如果不存在這樣的 ActionMapping ,則向用戶返回恰當的錯誤消息。

    (8) 調用 processRoles() 方法,先判斷是否為 Action 配置了安全角色,如果配置了安全角色,就調用 isUserRole() 方法判斷當前用戶是否具備必需的角色;如果不具備,就結束請求處理流程,向用戶返回恰當的錯誤消息。

    (9) 調用 processActionForm() 方法,先判斷是否為 ActionMapping 配置了 ActionForm ,如果配置了 ActionForm ,就先從 ActionForm 的存在范圍內尋找該 ActionForm 實例;如果不存在,就創建一個實例。接下來把它保存在合適的范圍中,保存時使用的屬性 key ActionMapping name 屬性。

    (10) 調用 processActionForm() 方法。如果為 ActionMapping 配置了 ActionForm ,就先調用 ActionForm reset() 方法,再把請求中的表單數據組裝到 ActionForm 中。

    (11) 調用 processValidate() 方法,如果為 ActionMapping 配置了 ActionForm ,并且 ActionMapping validate 屬性為 true ,就調用 ActionForm validate() 方法。如果 validate() 方法返回的 ActionErrors 對象中包含 ActionMessage 對象,說明表單驗證失敗,就把 ActionErrors 對象存儲在 request 范圍內,再把請求轉發到 ActionMapping input 屬性指定的 Web 組件。如果 ActionForm validate() 方法執行表單驗證成功,就繼續執行下一步請求處理流程。

    (12) 調用 processForward() 方法,判斷是否在 ActionMapping 中配置了 forward 屬性。如果配置了這個屬性,就調用 RequestDispatcher forward() 方法,請求處理流程結束,否則繼續下一步。

    (13) 調用 processInclude() 方法,判斷是否在 ActionMapping 中配置了 include 屬性。如果配置了這個屬性,就調用 RequestDispatcher include() 方法,請求處理流程結束,否則繼續下一步。

    (14) 調用 processActionCreate() 方法,先判斷是否在 Action 緩存中存在這個 Action 實例,如果不存在,就創建一個 Action 實例,把它保存在 Action 緩存中。

    (15) 調用 processActionPerform() 方法,該方法再調用 Action 實例的 execute() 方法。 execute() 方法位于 try/catch 代碼中,以便捕獲異常。

    (16) 調用 processActionForward() 方法,把 Action execute() 方法返回的 ActionForward 對象作為參數傳給它。 processActionForward() 根據 ActionForward 對象包含的請求轉發信息來執行請求轉發或重定向。

    ?

    <!--[if !supportLists]-->(b)???<!--[endif]-->擴展RequestProcessor

    開發人員可以很方便地創建客戶化的 RequestProcessor 類。

    Struts 配置文件中, <controller> 元素的 processorClass 屬性 RequestProcessor 類。

    ?

    ?

    3 Action

    Action 類是用戶請求和業務邏輯之間的橋梁。每個 Action 充當客戶的一項業務代理。在 RequestProcessor 類預處理請求時,在創建了 Action 的實例后,就調用自身的 processActionPerform() 方法,該方法再調用 Action 類的 execute() 方法。

    Action execute() 方法調用模型的業務方法,完成用戶請求的業務邏輯,然后根據執行結果把請求轉發給其他合適的 Web 組件。

    ?

    <!--[if !supportLists]-->(a)???<!--[endif]-->Action類緩存

    為了確保線程安全 (thread-safe) ,在一個應用的生命周期中, Struts 框架只會為每個 Action 類創建一個 Action 實例。所有的客戶請求共享一個 Action 實例,并且所有請求線程可以同時執行它的 execute() 方法。

    RequestProcessor 類包含一個 HashMap ,作為存放所有 Action 實例的緩存,每個 Action 實例在緩存中存放的屬性 key Action 類名。在 RequestProcessor 類的 processActionCreate() 方法中,首先檢查在 HashMap 中是否存在 Action 實例,如果存在,就返回這個實例;否則,就創建一個新的 Action 實例。創建 Action 實例的代碼位于同步代碼塊中,以保證只有一個線程創建 Action 實例。一旦線程創建了 Action 實例并把它存放到 HashMap 中,以后所有的線程就會直接使用這個緩存中的實例。

    ?

    <!--[if !supportLists]-->(b)???<!--[endif]-->ActionForward

    Action 類的 execute() 方法返回一個 ActionForward 對象。 ActionForward 對象代表了 Web 資源的邏輯抽象,這里的 Web 資源可以是 JSP 頁、 Java Servlet Action 。從 execute() 方法中返回 ActionForward 對象有兩種方法:

    · execute() 方法中動態創建一個 ActionForward 實例

    · Struts 配置文件中配置 <forward> 元素。

    ??? ??? 配置了 <forward> 元素后,在 Struts 框架初始化時就會創建存放 <forward> 元素;

    ?? execute() 方法中只需調用 ActionMapping 實例的 findForward() 方法,來獲取特定的 ActionForward 實例。 findForward() 方法先調用 findForwardConfig() 方法,在 Action 級別(即 <action> 元素內的 <forward> 子元素)尋找匹配的 ActionForward 對象。如果沒有,再在全局級別(即 <global-forwards> 元素內的 <forward> 子元素)中尋找匹配的 ActionForward 對象。如果找到,就返回該 ActionForward 對象。如果 findForward() 方法沒有找到匹配的 ActionForward 對象,它不會拋出異常,而是返回 null 。在瀏覽器端,用戶將收到一個空白頁。

    采用第二種方式,無需在程序中硬編碼來指定轉發資源的無力路徑,而是在配置文件中配置轉發資源,程序中秩序引用轉發資源的邏輯名即可,這提高了應用的靈活性和可維護性。

    ?

    <!--[if !supportLists]-->(c)???<!--[endif]-->創建支持多線程的Action

    Struts 應用的生命周期中,只會為每個 Action 類創建一個實例,所有的客戶請求共享這個實例。因此,必需保證在多線程環境中, Action 也能正常工作。保證線程安全的重要元素是在 Action 類中僅僅使用局部變量,謹慎地使用實例變量。

    如果在 Action execute() 方法中定義了局部變量,對于每個調用 execute() 方法的線程, Java 虛擬機會在每個線程的堆棧中創建局部變量,因此每個線程擁有獨立的局部變量,不會被其他線程共享。當線程執行完 execute() 方法時,它的局部變量就會被銷毀。

    如果在 Action 類中定義了實例變量,那么在 Action 實例的整個生命周期中,這個實例變量被所有的請求線程共享。因此不能在 Action 類中定義代表特定客戶狀態的實例變量。

    Action 類中定義的實例變量代表了可以被所有請求線程訪問的共享資源。為了避免共享資源的競爭,在必要的情況下,需要采用 Java 同步機制對訪問共享資源的代碼塊進行同步。

    ?

    (d)Action 類的安全

    在某些情況下,如果 Action 類執行的功能非常重要,則只允許具有特定權限的用戶才能訪問該 Action 。為了防止未授權的用戶來訪問 Action ,可以在配置 Action 時指定安全角色。

    <action> 元素的 roles 屬性指定訪問這個 Action 的用戶必須具備的安全角色,多個角色之間以逗號隔開。

    RequestProcessor 類在預處理請求時會調用自身的 processRoles() 方法,該方法先檢查在配置文件中是否未 Action 配置了安全角色,如果配置了安全角色,就調用 HttpServletRequest isUserInRole() 方法,來判斷用戶是否具備了必要的安全角色。如果不具備,就直接向客戶端返回錯誤。

    ?

    ?

    ?

    使用內置的 StrutsAction

    ?

    Struts 提供了一些現成的 Action 類,在 Struts 應用中直接使用這些 Action 類可以大大節省開發時間。

    ?

    1 org.apache.struts.actions.ForwardAction

    ? JSP 網頁中,盡管可以直接通過 <jsp:forward> 標簽把請求轉發給其他 Web 組件,但是 Struts 框架提倡先把請求轉發給控制器,再由控制器來負責請求轉發。

    ?

    ? 有控制器來負責請求轉發有以下一些優點:

    ·控制器具有預處理請求功能,它能夠選擇正確的子應用模塊來處理請求,并且把子應用模塊的 ModuleConfig MessageResources 對象存放在 request 范圍內。這樣,請求轉發的目標 Web 組件就可以正常地訪問 ModuleConfig MessageResources 對象。

    ·如果 JSP 頁面中包含 HTML 表單,那么控制器能夠創建和這個表單對應的 ActionForm 對象,把用戶輸入表單數據組裝到 ActionForm 中。如果 <action> 元素的 validate 屬性為 true ,那么還會調用 ActionForm 的表單驗證方法??刂破靼?/span> ActionForm 對象存放在 request session 范圍內,這樣請求轉發的目標 Web 組件也可以訪問 ActionForm 。

    · JSP 網頁之間直接相互轉發違背了 MVC 的分層原則,按照 MVC 設計思想,控制器負責處理所有請求,然后選擇適當的視圖組件返回給用戶,如果直接讓 JSP 相互調用,控制器就失去了流程控制作用。

    ?

    ? 對于用戶自定義的 Action 類,既可以負責請求轉發,還可以充當客戶端的業務代理,如果僅僅需要 Action 類提供請求轉發功能,則可以使用 org.apache.struts.actions.ForwardAction 類。 ForwardAction 類專門用于轉發請求,不執行任何其他業務操作。

    ? ActionServlet 把請求轉發給 ForwardAction , ForwardAction 再把請求轉發給 <action> 元素中 parameter 屬性指定的 Web 組件??傊?,在 Web 組件之間通過 ForwardAction 類來進行請求轉發,可以充分利用 Struts 控制器的預處理請求功能。此外,也可以通過 <action> 元素的 forward 屬性來實現請求轉發。

    ?

    2 org.apache.struts.actions.IncludeAction

    ? JSP 網頁中,盡管可以直接通過 <include> 指令包含另一個 Web 組件,但是 Struts 框架提倡先把請求轉發給控制器,再由控制器來負責包含其他 Web 組件。 IncludeAction 類提供了包含其他 Web 組件的功能。與 ForwardAction 一樣, Web 組件通過 IncludeAction 類來包含另一個 Web 組件,可以充分利用 Struts 控制器的預處理功能。

    <action> paramter 屬性指定需要包含的 Web 組件。此外,也可以通過 <action> 元素的 include 屬性來包含 Web 組件。

    ?

    3 org.apache.struts.actions.DispatchAction

    ? 通常,在一個 Action 類中,只能完成一種業務操作,如果希望在同一個 Action 類中完成一組相關的業務操作,可以使用 DispatchAction 類。

    ? 創建一個擴展 DispatchAction 類的子類,不必覆蓋 execute() 方法,而是創建一些實現實際業務操作的方法,這些業務方法都應該和 execute() 方法具有同樣的方法簽名,即他們的參數和返回類型都應該相同,此外也應該聲明拋出 Exception 。

    ? 在配置 DispatchAction 類時,需要把 parameter 屬性設置為“ method ”。設置之后,當用戶請求訪問 DispatchAction 時,應該提供 method 請求參數。

    ?

    4 org.apache.struts.actions.LookupDispatchAction

    LookupDispatchAction 類是 DispatchAction 的子類,在 LookupDispatchAction 類中也可以定義多個業務方法。通常 LookupDispatchAction 主要應用于在一個表單中有多個提交按鈕,而這些按鈕又有一個共同的名字的場合,這些按鈕的名字和具體的 ActionMapping parameter 屬性值相對應。

    Struts 配置文件中配置 LookUpDispatchAction

    <action> 元素中,設置 parameter 屬性時,需要使它和 <html:submit> 標簽的 property 屬性保持一致。

    ?

    5 org.apache.struts.actions.SwitchAction

    SwitchAction 類用于子應用模塊之間的切換。對于請求訪問 SwitchAction URL ,需要提供兩個參數:

    · prefix :指定子應用模塊的前綴,以“ / ”開頭,默認子應用模塊的前綴為空字符串“”。

    · page :指定被請求 Web 組件的 URI ,只需指定相對于被切換后的子應用模塊的相對路徑。

    ?

    ?

    利用 Token 解決重復提交

    ?

    ? 在某些情況下,如果用戶對同一個 HTML 表單多次提交, Web 應用必需能夠判斷用戶的重復提交行為,以作出相應的處理。

    ? 可以利用同步令牌( Token )機制來解決 Web 應用中重復提交的問題, Struts 也給出了一個參考實現。 org.apache.struuts.action.Action 類中提供了一系列和 Token 相關的方法:

    ? · protected boolean isTokenValid(javax.servlet.http.HttpServletRequestrequest)

    判斷存儲在當前用戶會話中的令牌值和請求參數中的令牌值是否匹配。如果匹配,就返回 true ,否則返回 false 。只要符合一下情況之一,就返回 false

    ·不能存在 HttpSession 對象。

    ·在 session 范圍內沒有保存令牌值。

    ·在請求參數中沒有令牌值

    ·存儲在當前用戶 session 范圍內的令牌值和請求參數中的令牌值不匹配。

    ? · protected voidresetToken(javax.servlet.http.HttpServletRequest request)

    從當前 session 范圍內刪除令牌屬性。

    ? · protected voidsaveToken(javax.servlet.http.HttpServletRequest request)

    創建一個新的令牌,并把它保存在當前 session 范圍內。如果 HttpSession 對象不存在,就首先創建一個 HttpSession 對象。

    ?

    ? 具體的 Token 處理邏輯由 org.apache.struts.util.TokenProcessor 類來完成,它的 generateToken(request) 方法根據用戶會話 ID 和當前系統時間來生成一個唯一的令牌。

    ?

    ?

    實用類

    ?

    ? 在創建 Web 應用時,有許多檢索和處理 HTTP 請求的操作時重復的。為了提高應用代碼的可重用性,減少冗余, Struts 框架提供了一組提供這些通用功能的實用類,它們可以被所有的 Struts 應用共享。

    ?

    1 RequestUtils

    org.apache.struts.util.RequestUtils Struts 控制框架提供了一些處理請求的通用方法。 RequestUtils 類中的所有方法都是線程安全的,在這個類中沒有定義任何實例變量,所有的方法都被聲明為 static 類型。因此,不必創建 RequestUtils 類的實例,可以直接通過類名來訪問這些方法。

    RequestUtils 類的常用方法

    方法

    描述

    absoluteURL(HttpServletRequest request,String utl)

    創建并返回絕對 URL 路徑,參數 path 指定相對于上下文( context-relative )的相對路徑

    createActionForm(HttpServletRequest request, ActionMapping mapping, ModuleConfig moduleConfig, ActionServlet servlet)

    先從 request session 范圍內查找該 ActionForm ,如果存在,就直接將它返回,否則先創建它的實例,把它保存在 request session 范圍內,再把它返回。 mapping 參數包含了 <action> 元素的配置信息,例如它的 scope 屬性指定 ActionForm 的范圍

    populate(Object bean, HttpServletRequest request)

    HTTP 請求中的參數值組裝到指定的 JavaBean 中,請求的參數名和 JavaBean 的屬性名匹配。當 ActionServlet 把用戶輸入的表單數據組裝到 ActionForm 中時,就調用此方法

    ?

    2 TagUtils

    org.apache.struts.taglib.TagUtil 類為 JSP 標簽處理類提供了許多實例方法,如果要使用 TagUtils 類,首先應調用 TagUtils.getInstance() 方法,獲得 TagUtils 類的實例, getInstance() 方法為靜態方法。

    TagUtils 類的常用方法

    方法

    描述

    getInstance()

    返回一個 TagUtils 的實例。該方法為靜態的,如果要在程序中獲得 TagUtils 的實例,可以調用 TagUtils.getInstance() 方法

    getActionMessages(PageContext pageContext, String paramName)

    調用 pageContext.findAttribute(paramName) 方法,從 page, request, session application 范圍內減縮并返回 ActionMessages 對象,參數 paramName 指定檢索 ActionMessages 對象的屬性 key

    getModuleConfig(PageContext pageContext)

    返回 ModuleConfig 對象,如果不存在,就返回 null

    lookup(PageContext pageContext, String name, String scope)

    返回特定范圍內的 JavaBean 。參數 scope 指定 JavaBean 的所在范圍, name 參數指定 JavaBean 在特定范圍內的名字

    message(PageContext pageContext, String bundle, String locale, String key)

    從指定的 Resource Bundle 中返回一條消息文本,參數 locale 指定 Locale ,參數 key 指定消息 key

    write(PageContext pageContext, String text)

    向網頁上輸入特定的文本,參數 text 用于指定文本內容

    ?

    3 ModuleUtils

    org.apache.struts.taglib.ModuleUtils 類提供了處理子應用模塊的實用方法,如果要使用 ModuleUtils 類,首先應該調用 ModuleUtils.getInstance() 方法,獲得 ModuleUtils 類的實例, getInstance() 方法為靜態方法。

    ModuleUtils 類的常用方法

    方法

    描述

    getInstance()

    返回一個 ModuleUtils 的實例。該方法為靜態的,如果要在程序中獲得 ModuleUtils 的實例,可以調用 ModuleUtils.getInstance() 方法。

    getModuleConfig(javax.servlet.http.HttpervletRequest request)

    request 范圍內檢索并返回 ModuleConfig 對象

    getModuleConfig(java.lang.String prefix, javax.servlet.ServletContext context)

    application 范圍內檢索并返回 ModuleConfig 對象,參數 prefix 指定子應用模塊名的前綴

    getModuleName(javax.servlet.http.HttpServletRequest request, javax.servlet.ServletContext context)

    返回請求訪問的子應用模塊的名字

    selectModule(javax.servlet.http.HttpServletRequest request, javax.servlet.ServletContext context)

    選擇請求訪問的子應用模塊,把和子應用模塊相關的 ModuleConfig MessageResources 對象存儲到 request 范圍中

    ?

    4 Globals

    org.apache.struts.Globals 類提供一組公共類型的靜態常量,被用作在特定范圍內存放 JavaBean 的屬性 key 。

    Globals 類中定義的常量

    方法

    描述

    ACTION_SERVLET_KEY

    代表在 application 范圍內存放 ActionServlet 實例的屬性 key

    DATA_SOURCE_KEY

    代表在 application 范圍內存放默認的 DataSource 實例的屬性 key

    ERROR_KEY

    代表在 request 范圍內存放 ActionErrors 實例的屬性 key

    LOCALE_KEY

    代表在 session 范圍內存放 Locale 實例的屬性 key

    MAPPING_KEY

    代表在 request 范圍內存放 ActionMapping 實例的屬性 key

    MESSAGE_KEY

    代表在 request 范圍內存放 ActionMessages 實例的屬性 key

    MESSAGES_KEY

    代表在 application 范圍內存放各個子應用模塊的 MessageResources 實例的屬性 key 的前綴

    MODULE_KEY

    代表在 application 范圍內存放各個子應用模塊的 ModuleConfig 實例的屬性 key 的前綴

    REQUEST_PROCESSOR_KEY

    代表在 application 范圍內存放各個子應用模塊的 RequestProcessor 實例的屬性 key 的前綴



    閱讀材料:《精通Struts:基于MVC的Java Web設計與開發》


    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=372708

    posted on 2006-12-20 16:08 蘆葦 閱讀(415) 評論(0)  編輯  收藏 所屬分類: Struts
    主站蜘蛛池模板: 四虎影视永久免费观看地址| 成人性生交大片免费看无遮挡| 女人18毛片免费观看| 亚洲人成在线观看| 免费看无码特级毛片| 国产精品亚洲精品日韩已方| 曰批全过程免费视频免费看| 卡1卡2卡3卡4卡5免费视频| 亚洲激情视频网站| 中文字幕影片免费在线观看| 亚洲成AV人片久久| 午夜免费不卡毛片完整版| 亚洲色大成网站www永久网站| 性做久久久久久免费观看| 亚洲天堂2017无码中文| 无码人妻精品一二三区免费| 亚洲日本VA中文字幕久久道具| 免费一本色道久久一区| 亚洲熟伦熟女专区hd高清| 女人18毛片免费观看| 最新亚洲人成无码网站| 国产性爱在线观看亚洲黄色一级片| 成人片黄网站色大片免费观看cn | 久久精品国产亚洲AV未满十八| 国产99视频精品免费视频7| 九九九精品视频免费| 亚洲国产成人一区二区精品区| 3d成人免费动漫在线观看 | 精品在线观看免费| 婷婷久久久亚洲欧洲日产国码AV| 无码国产精品一区二区免费| 久久亚洲精品国产精品婷婷| 久久精品国产精品亚洲人人| 精品免费人成视频app| 特级毛片aaaa级毛片免费| 亚洲午夜久久影院| 亚洲精品老司机在线观看| **俄罗斯毛片免费| 国产精品hd免费观看| 亚洲国产无线乱码在线观看| 亚洲VA中文字幕无码毛片|