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

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

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

    隨筆-71  評(píng)論-4  文章-0  trackbacks-0
    引言

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

    Struts

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

    模型-視圖-控制器(MVC) 模型-視圖-控制器(MVC)是一種設(shè)計(jì)模式,它在定義下面三個(gè)應(yīng)用層時(shí)作了明確的區(qū)分。

    ·模型(model)是應(yīng)用程序的數(shù)據(jù)和業(yè)務(wù)規(guī)則集合。通常被稱作應(yīng)用程序的業(yè)務(wù)邏輯。

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

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

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

    ·Action bean

    ·ActionServlet

    ·ActionForm bean 和定制的標(biāo)記。



    圖 1. MVC 和 Struts 框架


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

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

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

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

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

    ·邏輯,比如根據(jù)人們對(duì)頁面的使用方式為其顯示不同的標(biāo)題。

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

    編寫一個(gè)簡(jiǎn)單的 Struts 應(yīng)用程序

    先決條件:?jiǎn)?dòng) WebSphere Studio 版本 5.0:

    ·轉(zhuǎn)到 Window Start 菜單。

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

    第 1 步:開始一個(gè)新的 Struts Web 項(xiàng)目

    創(chuàng)建一個(gè) 1.3 EAR 項(xiàng)目(不包含 EJB / Client 或 Web 項(xiàng)目):

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

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

    3.取消對(duì)全部三個(gè)子項(xiàng)目(Application Client Project、EJB Project 和 Web Project)的選擇。

    4.輸入 StrutsEAR 作為項(xiàng)目名。

    5.單擊 Finish。

    創(chuàng)建一個(gè) Web 項(xiàng)目并添加 Struts 支持:

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

    2.輸入 StrutsSampleWeb 作為 Web 項(xiàng)目。

    3.選擇 Add Struts support 復(fù)選框。單擊 Next。

    4.選擇 Existing Enterprise Application Project。

    5.瀏覽查找新建的 EAR 項(xiàng)目。兩次單擊 Next。

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

    單擊 Finish。



    圖 2 .覆蓋 Web 項(xiàng)目創(chuàng)建向?qū)е械娜笔≡O(shè)置


    檢查圖 3 中的 Struts 文件結(jié)構(gòu)。



    圖 3 .支持 Struts 的 web 項(xiàng)目


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

    ·ApplicationResources.properties 是 Struts 應(yīng)用程序的資源綁定。語言環(huán)境的詳細(xì)信息和錯(cuò)誤消息都放在這個(gè)屬性文件中。

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

    現(xiàn)在,請(qǐng)執(zhí)行下列操作:

    1.檢查 web.xml 文件。

    2.展開 StrutsSampleWeb 項(xiàng)目并雙擊 Web Deployment Descriptor 來打開編輯器。

    轉(zhuǎn)到 Servlets 頁面。請(qǐng)注意下面兩點(diǎn):

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

    ·到這個(gè) servlet 的 URL 映射,*.do。

    請(qǐng)注意,在 Initialization 部分,validate 被設(shè)為 true。ActionServlet 用 XML 解析器來驗(yàn)證和處理配置文件。它與表單驗(yàn)證無關(guān),稍后在本文中您將看到這一點(diǎn)。

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

    Struts Action 子類負(fù)責(zé)處理用戶數(shù)據(jù)。在這個(gè)示例中,創(chuàng)建一個(gè)名為 SubmitAction 的 Struts Action 子類。它由諸如讀和處理表單數(shù)據(jù)之類的操作組成。每一個(gè)表單都和該 Struts ActionForm 子類的一個(gè)實(shí)例關(guān)聯(lián)在一起。請(qǐng)創(chuàng)建這個(gè)繼承 ActionForm 的表單類。SubmitForm 是 ActionForm 的一個(gè)子類,它是用域的 getter 和 setter 方法創(chuàng)建的。getter 和 setter 方法在 ActionForm 子類中都是必須有的。

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

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

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


    大多數(shù) HTML 標(biāo)記都支持 Javascript 事件,如 onmouseclick、onmouseover 等事件。關(guān)于更多信息,請(qǐng)參閱 HTML Bean API。下面我們來為這個(gè)示例創(chuàng)建一張 JSP 頁面。在 Web Perspective 中,用 Struts 模型創(chuàng)建一張 JSP 頁面:

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

    2.選擇 New => JSP File。

    3.在 Name 中輸入 submitpage.jsp。

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

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

    6.單擊 Finish。



    圖 4.JSP 創(chuàng)建向?qū)?- Struts 標(biāo)記庫


    用源代碼編輯器中的下面這些代碼修改 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>


    忽略任務(wù)列表中關(guān)于 submit.do 不存在的警告消息。為 Struts Action 類創(chuàng)建一張 /confirm.jsp 頁面用來進(jìn)行轉(zhuǎn)發(fā)。

    在 Web Perspective 中,創(chuàng)建 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 屬性引用對(duì)象內(nèi)的一個(gè)域。topping(Pepperoni) 屬性是 java.util.HashMap 的一個(gè)鍵/值對(duì)。Struts 1.1(beta 2)HTML taglib 支持嵌套的屬性。

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

    評(píng)論:
    # re: 實(shí)用Struts應(yīng)用程序編寫實(shí)例(一) 2005-12-04 18:40 | 宋偉
    建偉,偶然發(fā)現(xiàn)你的blog,但太專業(yè)了,我看不懂。暈!  回復(fù)  更多評(píng)論
      

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费观看成人毛片a片2008| 亚洲视频免费在线看| 国产成人A在线观看视频免费| 无码免费又爽又高潮喷水的视频| 亚洲六月丁香六月婷婷蜜芽| 亚洲一区二区三区影院| 免费欧洲美女牲交视频| 国产麻豆视频免费观看| 香蕉成人免费看片视频app下载| 亚洲免费无码在线| 国产精品国产亚洲区艳妇糸列短篇 | 99热这里只有精品免费播放| 国产精品免费久久久久久久久| 亚洲av成人片在线观看| 亚洲AV无码一区二区三区在线| 久久久亚洲欧洲日产国码二区 | 亚洲av无码专区在线电影| 亚洲乱码卡一卡二卡三| 亚洲视频一区二区三区| 亚洲AV综合色一区二区三区| 怡红院亚洲怡红院首页| www国产亚洲精品久久久| 国产精品国产午夜免费福利看| 色窝窝免费一区二区三区| 又大又硬又爽又粗又快的视频免费| 免费在线观影网站| 波霸在线精品视频免费观看| 一级做a爰全过程免费视频毛片| 粉色视频在线观看www免费| 国产成人人综合亚洲欧美丁香花 | 在线免费视频一区二区| 成年人免费网站在线观看| 无码人妻一区二区三区免费手机| 最近2019中文字幕免费大全5| 97在线视频免费| 蜜臀98精品国产免费观看| 国产91色综合久久免费| 91成人免费观看网站| 毛片在线看免费版| 四虎成人精品一区二区免费网站| 好先生在线观看免费播放|