程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Unmi的Struts2學習筆記(四)

Unmi的Struts2學習筆記(四)

編輯:關於JAVA

在這個陌生的城市裡,的確承受著巨大的壓力。房東的驅趕與無理的加價,想 置個家電須顧及到搬遷。也開始學會了算計著過活,兩塊五與三塊的公交,寧願 等待與擁擠,就連省下一頓飯錢都能暗自慶幸。周末了,老老實實呆在家裡吧!

1. 按這個順序加載 Struts2 的常量,struts-default.xml、struts- plugin.xml、struts.xml、web.xml;後加載的會覆蓋前面的同名常量。強烈不推 薦在 web.xml 中配置 Struts2 常量。

2. Struts1 中有一種 Action 類型是 ForwardAction,而在 Struts2 中相應 的配置方式是 <action name="Showcase"><result>/showcase.jsp</result></actio n>,Showcase.action 直接映射到 /showcase.jsp。

3. struts.xml 中 <package ../> 的 namespace (命名空間) 相當於 Struts1 的模塊的概念,但比 Struts1 的模塊間切換要便。例如,對於以下的配 置

<package name="get" extends="struts-default" namespace="/book">

<action name="GetBooks" class="...">

因 action GetBooks 所在的包指定了命名空間,所以 URL 就需要 /book/GetBooks.action 與它映射了。

如果未指定命名空間或指定為 "" 就是默認命名空間,指定 "/" 就是根命名 空間,URL 就應該是 /GetBooks.action。配置在默認命名空間中的 Action 相當 於全局的,即類似於 Struts1 的 <global-action .../>。也就是說當找 不到指定命名空間(例如 /barspace/bar.action) 中的 Action (bar.action) 時 ,就會嘗試去默認命名空間 ("") 裡去找。

4. 系統不會嚴格區分 Action 裡哪個屬性是用於封裝請求參數的屬性,那個 屬性是封裝處理結果的屬性。對系統而言,封裝請求參數的屬性和封裝處理結果 的屬性是完全平等的。

5. Struts2 的 Action 可以是一個 POJO,可以實現 Action 接口,也可以繼 承 ActionSupport。實際上 ActionSupport 類是 Struts2 默認的 Action 處理 類,就是說,配置 Action 時未指定 class 屬性時,系統自動指定為 ActionSupport 類。

6. Struts2 中要訪問 Servlet API 必須借助於 ActionContext 類,其中有 訪問對 HttpServletRequest(request),HttpSession(session), ServletContext(application) 進行操作的方法 (操作的是各自的 attribute 屬 性),不過還沒發現如何操作 HttpServletResponse(response) 對象。注意,這 些方法都轉換成了對 Map 實例的操作,而非真實的 Servlet API 實例,Struts2 會完成與實際存儲的映射,所以 Action 仍然是脫離 Servlet API 的。 ActionContext 直接的 get() 和 put() 方法針對的是 request 的屬性。

7. Struts2 也可以直接訪問 Servlet API 實例,讓你的 Action 實現後面其 中一個接口就能獲取到相應 Servlet API 實例:ServletContextAware、 ServletRequestAware、ServletResponseAware。注意要實現的接口方法。如果覺 得實現接口的方式麻煩,那麼可以借助 ServletActionContext 的方法來拿到 Servlet API 的各個實例。這樣卻是讓 Action 與 Servlet API 耦合起來了。

8. 即使我們在 Struts2 的 Action 中獲得了 HttpServletResponse 對象, 也不要嘗試直接在 Action 中生成對客戶端的輸出,沒效果的,因為 Action 只 是一個控制器,它並不直接對浏覽者生成任何響應。這也是為什麼 ActionContext 未提供對 HttpServletResponse 的操作,只是操作 Cookie 要用 到 response。在 Struts1 中,如果 Action 返回 null 時,可以通過 response.getWriter().println("Hello World."); 輸出內容到頁面。

9. Struts2也有像 Struts1 那樣的對Action 動態方法調用的特性,它是通過 指定 form 的 action="ActionName!methodName.action" 來實現的,例如某表單 的 action="Login!regist.action",提交後將會調用 name="Login"的 Action 類的 regist() 方法,而非默認的 execute() 方法。這種方式可以在一個 Action 中包含多個處理邏輯。是不是 Struts1 要方便,不需要在配置文件中對 這個 Action 配置額外的屬性。

10. 可為 action 配置指定一個 method 屬性,同上,這種方式也在一個 Action 類中定義多個邏輯,每個處理方法映射成一個邏輯 Action,有不同的 name 屬性,非常類似於 Struts1 的 MappingDispatchAction。缺點就是不像上 面那樣,被分開的多個邏輯 Action 不能共享 <result> 配置,並且 action 配置的 class 屬性值產生冗余。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved