跳轉到內容

Java 程式設計/Struts

來自華夏公益教科書,開放的書籍,開放的世界

此參考正在開發中。所有 Struts 開發人員都要求貢獻並幫助擴充套件此參考。


Struts 是用於開發基於 Java 的 Web 應用程式的最流行的框架。Struts 正在作為由 Apache 軟體基金會 啟動的開源專案進行開發。Struts 框架基於 模型檢視控制器 (MVC) 架構。

簡述 Action 框架

[編輯 | 編輯原始碼]

在 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 充當“交通警察”或介面卡。

簡述 Struts 配置

[編輯 | 編輯原始碼]

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 列表、選單項列表等。

Tiles/元件的重用
[編輯 | 編輯原始碼]

如果定義良好,Tile 可以跨多個應用程式重複使用。動態屬性用於引數化 Tiles。可以定義一個可重複使用的 Tiles 庫。透過組裝預定義的元件來構建頁面,併為它們提供適當的引數。

國際化 (i18n)

[編輯 | 編輯原始碼]

可以根據區域設定載入不同的 tiles。類似於 Java 屬性檔案的機制用於定義檔案:您可以在每個區域設定中擁有一個定義檔案。將根據當前區域設定載入相應的定義。

多通道

[編輯 | 編輯原始碼]

可以根據金鑰載入不同的 Tiles。例如,金鑰可以是使用者許可權、瀏覽器型別、儲存在會話中的任意名稱等。類似於 Java 屬性檔案的機制用於定義檔案:您可以在每個金鑰中擁有一個定義檔案。將根據金鑰載入相應的定義。

先決條件

[編輯 | 編輯原始碼]

除了對構建 Web 應用程式的基本瞭解之外,還需要讀者對以下技術有一定的瞭解。

與傳統的 Web 應用開發方法相比,Struts 框架提供了以下優勢。

  • 解耦業務邏輯和展示邏輯
  • 可重用性
  • 可維護性

這些優勢來自於 Struts 基於 Java Web 應用設計的“模型 2”模式構建系統,同時提供了一個比一系列 J2EE servlet 更簡潔的應用框架。

Struts XML 標籤和屬性參考

[編輯 | 編輯原始碼]

(以下列表與上面(簡單配置的示例)下面關於 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=

進一步閱讀

[編輯 | 編輯原始碼]
華夏公益教科書