Java 程式設計/Struts
此參考正在開發中。所有 Struts 開發人員都要求貢獻並幫助擴充套件此參考。
Struts 是用於開發基於 Java 的 Web 應用程式的最流行的框架。Struts 正在作為由 Apache 軟體基金會 啟動的開源專案進行開發。Struts 框架基於 模型檢視控制器 (MVC) 架構。
在 MVC 上下文中,Struts 框架提供了自己的 Web 控制器元件,並與其他技術整合以提供模型和檢視。對於模型,框架可以與標準資料訪問技術(如 JDBC 和 EJB)以及大多數任何第三方軟體包(如 Hibernate、iBATIS 或 Object Relational Bridge)互動。對於檢視,框架與 JavaServer Pages(包括 JSTL 和 JSF)以及 Velocity Templates、XSLT 和其他表示系統配合良好。
框架的控制器充當應用程式的模型和 Web 檢視之間的橋樑。當收到請求時,控制器會呼叫 Action 類。Action 類會與模型(或者,更確切地說,是表示模型的 Facade)進行協商,以檢查或更新應用程式的狀態。框架提供了一個 ActionForm 類來幫助在模型和檢視之間傳輸資料。
大多數情況下,模型表示為一組 JavaBeans。通常,開發人員將使用 Commons BeanUtils 在 ActionForms 和模型物件(或 Facade)之間傳輸資料。最好讓模型進行“繁重的工作”,而 Action 充當“交通警察”或介面卡。
Web 應用程式使用部署描述符來初始化資源,如 servlet 和標籤庫。部署描述符格式化為 XML 文件,名為“web.xml”。同樣,框架使用配置檔案來初始化它自己的資源。這些資源包括用於從使用者收集輸入的 ActionForms,用於將輸入定向到伺服器端 Actions 的 ActionMappings,以及用於選擇輸出頁面的 ActionForwards。
Struts 的初始化是透過在 web.xml 檔案中包含以下內容來實現的。
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
以下是一個用於登入工作流的簡單配置 (struts-config.xml)
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
<form-bean
name="logonForm"
type="app.LogonForm"/>
</form-beans>
<action-mappings>
<action
path="/Welcome"
forward="/pages/Welcome.jsp"/>
<action
path="/Logon"
forward="/pages/Logon.jsp"/>
<action
path="/LogonSubmit"
type="app.LogonAction"
name="logonForm"
scope="request"
validate="true"
input="/pages/Logon.jsp">
<forward
name="success"
path="/pages/Welcome.jsp"/>
<forward
name="failure"
path="/pages/Logon.jsp"/>
</action>
<action
path="/Logoff"
type="app.LogoffAction">
<forward
name="success"
path="/pages/Logoff.jsp"/>
</action>
</action-mappings>
<message-resources parameter="resources.application"/>
</struts-config>
您可以在框架的配置檔案中指定其他幾種資源。您可以使用 Struts Validator 在 XML 描述符中為 ActionForms 指定驗證。標準擴充套件 Tiles 幫助您從較小的片段構建頁面。
Struts Action 框架是可擴充套件的。框架部署的每個類都可以由您自己的預設類替換。您可以使用 Digester 的 set-property 功能設定預設類的屬性。這是為什麼有這麼多貢獻者擴充套件的原因之一。
Tiles 是一個貢獻者擴充套件。
透過組裝 Tiles 建立螢幕:標題、頁尾、選單、主體等。定義可以發生在
- 集中式的 xml 檔案中
- 直接在 jsp 頁面中
- 在 Struts 動作中以程式設計方式
定義提供了一種繼承機制:一個定義可以擴充套件另一個定義,並覆蓋引數。
定義常見的頁面佈局並在整個網站上重複使用它們。定義選單佈局,並透過傳遞專案和連結列表來使用它們。定義門戶佈局,透過傳遞要顯示的 Tiles(頁面)列表來使用它。重複使用現有佈局或定義您自己的佈局。
Tiles 可以在頁面重新載入期間動態收集。可以更改任何屬性:佈局、門戶中的 Tiles 列表、選單項列表等。
如果定義良好,Tile 可以跨多個應用程式重複使用。動態屬性用於引數化 Tiles。可以定義一個可重複使用的 Tiles 庫。透過組裝預定義的元件來構建頁面,併為它們提供適當的引數。
可以根據區域設定載入不同的 tiles。類似於 Java 屬性檔案的機制用於定義檔案:您可以在每個區域設定中擁有一個定義檔案。將根據當前區域設定載入相應的定義。
可以根據金鑰載入不同的 Tiles。例如,金鑰可以是使用者許可權、瀏覽器型別、儲存在會話中的任意名稱等。類似於 Java 屬性檔案的機制用於定義檔案:您可以在每個金鑰中擁有一個定義檔案。將根據金鑰載入相應的定義。
除了對構建 Web 應用程式的基本瞭解之外,還需要讀者對以下技術有一定的瞭解。
- HTML
- HTTP
- 面向物件程式設計 (OOP)
- JSP 和 Java Servlet
- JavaBeans
- XML (可擴充套件標記語言)
與傳統的 Web 應用開發方法相比,Struts 框架提供了以下優勢。
- 解耦業務邏輯和展示邏輯
- 可重用性
- 可維護性
這些優勢來自於 Struts 基於 Java Web 應用設計的“模型 2”模式構建系統,同時提供了一個比一系列 J2EE servlet 更簡潔的應用框架。
(以下列表與上面(簡單配置的示例)和下面關於 JBoss 上的 Struts 教程的示例連結中的順序相同。)
- <struts-config - 包含其他標籤的外部標籤。
- <data-sources -
- <form-beans - 定義一個包含一個或多個 <form-bean 標籤的表單部分。
- <form-bean - 定義一個表單
- name=
- type=
- <global-exceptions -
- <global-forwards - 定義一個預設情況下在 <action 標籤中使用的轉發路由部分。它包含一個或多個 <forward 標籤。
- <action-mappings - 定義一個包含一個或多個 <action 標籤的操作部分。
- <action - 定義一個操作,它可以有一個或多個轉發路由(帶有一個轉發屬性或一個或多個 <forward 子標籤)
- path=
- forward=
- type=
- name=
- scope=
- validate=
- input=
- parameter= 可以從 @struts.Action@ 類中透過 @mappings.getParameter()@ 讀取
- <forward - 定義 <action 標籤中的轉發路由
- name=
- path=
- <controller -
- <message-resources -
- parameter=
- 最佳實踐:http://www.javaworld.com/javaworld/jw-09-2004/jw-0913-struts.html
- 理解 Struts 控制器:http://www.roseindia.net/struts/understanding_struts_controller.shtml
- JBoss 上的 Struts 教程:http://www.mastertheboss.com/web-interfaces/190-jboss-struts-tutorial.html