隨筆-71  評論-4  文章-0  trackbacks-0
          引言

          Struts 是 Apache 軟件基金會(Apache Software Foundation)資助的一個開放源代碼框架。您可以用它來維護和擴展 Web 應用程序。IBM? WebSphere? Studio Application Developer 版本 5.0(以下稱 WebSphere Studio)對 Struts 有內建支持,支持 Struts 1.02 和 1.1(beta 2)。WebSphere Studio 中的 Struts Configuration 編輯器使您可以很容易地修改 struts-config.xml 文件。這篇文章描述了怎樣用 WebSphere Studio 中的內建支持創建一個 Struts 示例。

          Struts

          Struts 框架完全是用 Java 寫的,寫時用了標準 J2EE API。另外,它還采用了幾種著名的 J2EE 設計模式,比如模型-視圖-控制器(Model-view-controller)和 FrontController。

          模型-視圖-控制器(MVC) 模型-視圖-控制器(MVC)是一種設計模式,它在定義下面三個應用層時作了明確的區分。

          ·模型(model)是應用程序的數據和業務規則集合。通常被稱作應用程序的業務邏輯。

          ·視圖(view)是應用程序的用戶界面。

          ·控制器(controller)定義了應用程序與用戶輸入及模型進行交互的方式。它被稱作應用程序邏輯。

          通過明確區分各個層,MVC 允許組成每個層的各個組件間松散地耦合。這使它更加靈活,并且可以重用代碼。例如,如果您為一個應用程序開發了幾個用戶界面,那么就需要開發視圖組件,因為各應用層間是松散耦合的。Struts 框架是 MVC 的視圖和控制器組件。下面展示了 Struts 怎樣映射為 MVC 框架。Struts 有三個主要組成部分:

          ·Action bean

          ·ActionServlet

          ·ActionForm bean 和定制的標記。



          圖 1. MVC 和 Struts 框架


          Action bean 和 ActionServlet Struts 提供了一個單獨的 ActionServlet(org.apache.struts.action.ActionServlet)來處理所有的瀏覽器請求。這種類型的框架我們稱之為 FrontController 模式。每個瀏覽器請求都由 Struts 的 Action 子類(org.apache.struts.action.Action 的子類)來處理。每個瀏覽器請求都被映射為 struts-config.xml 文件內的一個 Action 子類。ActionServlet 在初始化期間加載這種映射。要配置 Web 項目使其把所有的瀏覽器請求都傳遞給 ActionServlet,請把所有以 .do 結尾的 URI(例如 *.do)都映射為 Web 部署描述符中的 ActionServlet。然后您可以在 Struts 配置文件中為各個請求 URI(比如 /submit.do)提供實際的 Action 子類映射。

          ActionForm bean 瀏覽器請求可帶參數。當用戶提交 HTML 表單后,Struts 框架就把參數放在一個 org.apache.struts.action.ActionForm bean 中。您也可以用 ActionForm bean 把缺省值預先植入一個表單,這些缺省值可從數據庫或其他的后端系統獲得。如果用戶在表單中輸入了不正確的值,ActionForm 可以進行驗證。您可以用以前的輸入重新顯示表單。

          定制的標記 Struts 提供了許多支持 ActionForm bean 的 JSP 定制標記。這些定制的標記支持:

          ·把從 ActionForm 子類中獲得的值預先植入 HTML 表單。

          ·國際化,比如提供由用戶語言環境決定的文本。

          ·邏輯,比如根據人們對頁面的使用方式為其顯示不同的標題。

          Struts 是一個通用的框架,您可以很容易地把它和 WebSphere Studio 一起使用。下面我們來開始第一個 Struts 示例。

          編寫一個簡單的 Struts 應用程序

          先決條件:啟動 WebSphere Studio 版本 5.0:

          ·轉到 Window Start 菜單。

          ·選擇 Programs => IBM WebSphere Studio => Application Developer 5.0

          第 1 步:開始一個新的 Struts Web 項目

          創建一個 1.3 EAR 項目(不包含 EJB / Client 或 Web 項目):

          1.選擇 New => Projects => Enterprise Application Project。

          2.選擇 Create 1.3 J2EE Enterprise Application Project。按 Next。

          3.取消對全部三個子項目(Application Client Project、EJB Project 和 Web Project)的選擇。

          4.輸入 StrutsEAR 作為項目名。

          5.單擊 Finish。

          創建一個 Web 項目并添加 Struts 支持:

          1.選擇 New => Projects => Web => Web Project。

          2.輸入 StrutsSampleWeb 作為 Web 項目。

          3.選擇 Add Struts support 復選框。單擊 Next。

          4.選擇 Existing Enterprise Application Project。

          5.瀏覽查找新建的 EAR 項目。兩次單擊 Next。

          在 Struts Setting 頁面中選擇 Override default settings,并在下拉框中選擇 1.1 (beta 2) ,如圖2 所示。前面已經提到過,表單被提交時,HTML 表單數據被自動植入 Struts ActionForm。Struts 1.0.1 只支持簡單的 Java 類型。而 Struts 1.1(beta 2)還支持 java.util.HashMap 或其他的 Collection 類型。這一點我們將在本文的后面部分討論。

          單擊 Finish。



          圖 2 .覆蓋 Web 項目創建向導中的缺省設置


          檢查圖 3 中的 Struts 文件結構。



          圖 3 .支持 Struts 的 web 項目


          您將稍后修改下面的文件:

          ·ApplicationResources.properties 是 Struts 應用程序的資源綁定。語言環境的詳細信息和錯誤消息都放在這個屬性文件中。

          ·struts-config.xml 是 Struts 的 xml 配置文件。WebSphere Studio 為這個文件提供了一個 GUI 編輯器。

          現在,請執行下列操作:

          1.檢查 web.xml 文件。

          2.展開 StrutsSampleWeb 項目并雙擊 Web Deployment Descriptor 來打開編輯器。

          轉到 Servlets 頁面。請注意下面兩點:

          ·名為 action 的 Struts org.apache.struts.action.ActionServlet 的定義。

          ·到這個 servlet 的 URL 映射,*.do。

          請注意,在 Initialization 部分,validate 被設為 true。ActionServlet 用 XML 解析器來驗證和處理配置文件。它與表單驗證無關,稍后在本文中您將看到這一點。

          *.do 怎樣獲得正確的 Action 類? 前面已經提到過,ActionServlet 和 Action 類是 MVC 模型中控制器層的核心。該控制器負責處理用戶的請求,把請求路由到業務邏輯,并選擇視圖來響應用戶(請參閱 Struts 用戶指南,第 4.4 節)。表單提交給 submit.do 后,Struts ActionServlet 會根據 struts-config.xml 文件中的 選擇正確的 Action 類來用。

          Struts Action 子類負責處理用戶數據。在這個示例中,創建一個名為 SubmitAction 的 Struts Action 子類。它由諸如讀和處理表單數據之類的操作組成。每一個表單都和該 Struts ActionForm 子類的一個實例關聯在一起。請創建這個繼承 ActionForm 的表單類。SubmitForm 是 ActionForm 的一個子類,它是用域的 getter 和 setter 方法創建的。getter 和 setter 方法在 ActionForm 子類中都是必須有的。

          SubmitForm 怎樣發揮作用? 每一個 Struts Action 類都必須和一個 Struts ActionForm 類關聯在一起。您可以在 WebSphere Studio 中的 struts-config.xml 編輯器的 FormBean 頁面中定義 SubmitForm 類。然后可以把它與 struts-config.xml 文件中的 SubmitAction 映射關聯在一起。一個請求提交后,ActionServlet 把從 Web 瀏覽器上的實際表單中得到的數據自動植入 SubmitForm。在 SubmitAction 類中,用 SubmitForm f = (SubmitForm) form 來訪問表單數據。

          第 2 步:用 Struts taglib 構建一個 JSP 表單 Struts 為輸入域提供了許多 HTML 標記并為 JSP 表單提供了許多超鏈接。下面列出了常用的幾個:

          ·復選框 - <html:checkbox property="name"/> 
          ·隱藏域 - <html:hidden property="name"/> 
          ·密碼輸入域 - <html:password property="name"/> 
          ·單選按鈕 - <html:radio property="name"/> 
          ·重設按鈕 - <html:reset/> 
          ·選項(下拉框) <html:select property="name"/>
          <html:option value="a"/>choice1</html:option>
          </html:select>
          ·提交按鈕 - <html:submit/> 
          ·文本輸入域 - <html:text property="name"/> 
          ·文本區輸入域 - <html:textarea property="name"/>


          大多數 HTML 標記都支持 Javascript 事件,如 onmouseclick、onmouseover 等事件。關于更多信息,請參閱 HTML Bean API。下面我們來為這個示例創建一張 JSP 頁面。在 Web Perspective 中,用 Struts 模型創建一張 JSP 頁面:

          1.展開 StrutsSampleWeb 項目直到看到 /Web Content 文件夾。右鍵單擊 /Web Content。

          2.選擇 New => JSP File。

          3.在 Name 中輸入 submitpage.jsp。

          4.從下拉框中選擇 Struts JSP 作為 Model。

          5.單擊 Next,注意只添加了 HTML 和 Bean 的 taglib。如果您想使用其他標記庫中的 taglib,如 Logic taglib,請選擇 Add Tag Libraries,然后選擇 /WEB-INF/struts-logic.tld。

          6.單擊 Finish。



          圖 4.JSP 創建向導 - Struts 標記庫


          用源代碼編輯器中的下面這些代碼修改 submitpage.jsp 頁并保存:

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          	<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
          	<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
          	
          	<html:html locale="true">
          	
          	<HEAD>
          	<%@ page
          	language="java"
          	contentType="text/html; charset=ISO-8859-1"
          	pageEncoding="ISO-8859-1"
          	%>
          	<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
          	<META name="GENERATOR" content="IBM WebSphere Studio">
          	<META http-equiv="Content-Style-Type" content="text/css">
          	<LINK href="theme/Master.css" rel="stylesheet"
          		type="text/css">
          		
          		
          	<TITLE>Pizza Order Page</TITLE>
          	</HEAD>
          	
          	<BODY>
          		<P><h1>Pizza Order Page </h1></P>
          		
          			<html:form action="/submit.do">
          		
          			Name: <html:text property="customer.name"/><br>
          			Address: <html:text property="customer.address"/><br>
          			
          			Size: <html:radio property ="size" value="S"/>Small
          			<html:radio property ="size" value="M"/>Medium
          			<html:radio property ="size" value="L"/>Large
          			
          			Toppings: <br>
          			Pepperoni<html:checkbox property="topping(Pepperoni)"/><br>
          			Onion<html:checkbox property="topping(Onion)"/><br>
          			Mushroom<html:checkbox property="topping(Mushroom)"/><br>
          			Hot Pepper<html:checkbox property="topping(Hot Pepper)"/><br>
          			Bacon<html:checkbox property="topping(Bacon)"/><br>
          			
          			<html:select property ="type">
          			<html:option value="a">Delivery</html:option>
          			<html:option value="b">Pickup</html:option>
          			</html:select>
          			
          				<html:submit/>
          				<html:reset/>
          			</html:form>
          	</BODY>
          	</html:html>


          忽略任務列表中關于 submit.do 不存在的警告消息。為 Struts Action 類創建一張 /confirm.jsp 頁面用來進行轉發。

          在 Web Perspective 中,創建 confirm.jsp 頁面:

          1.右鍵單擊 /Web Content。

          2.選擇 New => JSP File。

          3.在 Name 域中輸入 confirm.jsp。

          4.單擊 Finish。

          用下面的代碼修改 JSP 文件:

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          	<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
          	<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
          	<html:html>
          	<HEAD>
          	<%@ page 
          	language="java"
          	contentType="text/html; charset=ISO-8859-1"
          	pageEncoding="ISO-8859-1"
          	%>
          	<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
          	<META name="GENERATOR" content="IBM WebSphere Studio">
          	<META http-equiv="Content-Style-Type" content="text/css">
          	<LINK href="theme/Master.css" rel="stylesheet"
          		type="text/css">
          	<TITLE></TITLE>
          	</HEAD>
          	
          	<BODY>
          	<P>Thank you <%=request.getAttribute("name")%></P>
          	</BODY>
          	</html:html>


          在 submitpage.jsp 中,customer.name 屬性引用對象內的一個域。topping(Pepperoni) 屬性是 java.util.HashMap 的一個鍵/值對。Struts 1.1(beta 2)HTML taglib 支持嵌套的屬性。

          posted on 2005-11-21 12:19 zjw_albert 閱讀(501) 評論(1)  編輯  收藏

          評論:
          # re: 實用Struts應用程序編寫實例(一) 2005-12-04 18:40 | 宋偉
          建偉,偶然發現你的blog,但太專業了,我看不懂。暈!  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 孝感市| 许昌市| 岳西县| 揭东县| 鄂伦春自治旗| 茂名市| 林周县| 克山县| 汶上县| 棋牌| 凤城市| 栾川县| 遂溪县| 乐陵市| 淄博市| 贵州省| 三亚市| 栾川县| 泰和县| 广宗县| 宕昌县| 玛纳斯县| 沾化县| 陵川县| 封开县| 康定县| 绍兴县| 贵阳市| 高碑店市| 梁河县| 唐山市| 彭山县| 嘉荫县| 乌拉特后旗| 甘肃省| 乌拉特中旗| 九龙县| 祁连县| 荃湾区| 隆尧县| 科尔|