Struts01基礎(chǔ)入門(mén)_第1頁(yè)
Struts01基礎(chǔ)入門(mén)_第2頁(yè)
Struts01基礎(chǔ)入門(mén)_第3頁(yè)
Struts01基礎(chǔ)入門(mén)_第4頁(yè)
Struts01基礎(chǔ)入門(mén)_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !Struts1.xStruts1.x高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !為什么要學(xué)習(xí)StrutslStruts是MVC設(shè)計(jì)模式的具體實(shí)現(xiàn),使用struts使MVC的結(jié)構(gòu)更加清晰 lTaglib 是Struts的標(biāo)記庫(kù),靈活運(yùn)用,能大大提高開(kāi)發(fā)效率 l簡(jiǎn)單的信息編輯l高效的后臺(tái)驗(yàn)證l增強(qiáng)了代碼的可維護(hù)性,重用性l用Struts并不一定是為了減少工作量,它的作用是使邏輯處理與頁(yè)面顯示分開(kāi),編程思路更加清晰 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !Struts起源lStruts最早是作為Apache Jakarta

2、項(xiàng)目的組成部分,項(xiàng)目的創(chuàng)立者希望通過(guò)對(duì)該項(xiàng)目的研究,改進(jìn)和提高JavaServer Pages 、Servlet、標(biāo)簽庫(kù)以及面向?qū)ο蟮募夹g(shù)水準(zhǔn)。lStruts這個(gè)名字來(lái)源于在建筑和舊式飛機(jī)中使用的支持金屬架。這個(gè)框架之所以叫“Struts”, 是為了提醒我們記住那些支撐我們房屋,建筑,橋梁,甚至我們踩高蹺時(shí)候的基礎(chǔ)支撐。這也是一個(gè)解釋Struts在開(kāi)發(fā)Web應(yīng)用程序中所扮演的角色的精彩描述 。lStruts 1.0于2001年6月發(fā)布,目前其最新的版本為Struts1.4.0高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !Struts中使用技術(shù)http:超文本傳輸協(xié)議超文本傳輸協(xié)議 (H

3、TTP)Java servletJavaServer PagesJSP標(biāo)簽標(biāo)簽JavaBeanModel 2(jsp+Servlet+javaBean)高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !展示struts的運(yùn)行(整體感覺(jué))高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !實(shí)現(xiàn)上面的效果單一方案:高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !實(shí)現(xiàn)上面的效果通用方案:高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !Struts解決方案l需要提前安裝的技術(shù)平臺(tái)Java 2 SDK SE Servlet Container(Web Application Serve

4、r)lStruts開(kāi)發(fā)環(huán)境安裝 下載Struts的二進(jìn)制發(fā)布版 將下載的Struts二進(jìn)制發(fā)布版進(jìn)行解包,將解包目錄下的lib目錄下的所有.jar文件全部復(fù)制到后續(xù)創(chuàng)建的Web應(yīng)用目錄的WEB-INF/lib目錄下。如果在多個(gè)Web應(yīng)用中都使用了Struts,可以將上述文件直接復(fù)制到Tomcat安裝目錄的commonlib目錄下高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !Struts解決方案l常用的類(lèi)庫(kù):commons-beanutils-1.7.0.jar -Java 反射和內(nèi)省 API 包裝器commons-chain-1.1.jar -提供了一個(gè)基于Java的框架和API來(lái)描述

5、順序的處 理過(guò)程。Struts使用Chain簡(jiǎn)化HTTP請(qǐng)求處理 commons-digester-1.8.jar-用于分析 XML 配置文件的 XML 到 Java 對(duì)象映 射實(shí)用程序commons-logging-1.0.4.jar -各種日志 API 實(shí)現(xiàn)的包裝器struts-core-1.3.8.jar-核心包struts-extras-1.3.8.jar-擴(kuò)展包struts-taglib-1.3.8.jar(標(biāo)簽庫(kù)包)高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !上面功能上面功能strutsstruts具體實(shí)現(xiàn)步驟具體實(shí)現(xiàn)步驟l新建項(xiàng)目l添加Struts相關(guān)的jar包l準(zhǔn)備視

6、圖組件l在web.xml文件中配置ActionServletl創(chuàng)建struts-config.xml文件,增加配置l創(chuàng)建Action的子類(lèi)組件 l發(fā)布并運(yùn)行高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !視圖層增加表單l開(kāi)發(fā)商務(wù)網(wǎng)站身份驗(yàn)證模塊開(kāi)發(fā)商務(wù)網(wǎng)站身份驗(yàn)證模塊l應(yīng)用需求分析用戶(hù)在登錄時(shí)必須進(jìn)行身份驗(yàn)證,系統(tǒng)只允許已經(jīng)注冊(cè)的用戶(hù)進(jìn)入。登錄成功將顯示登錄成功的信息 如果登錄失敗返回登錄失敗頁(yè)面給出提示的錯(cuò)誤提示信息高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !上面功能上面功能strutsstruts具體實(shí)現(xiàn)步驟具體實(shí)現(xiàn)步驟l1 新建項(xiàng)目l2 添加Struts相關(guān)的jar包l3

7、 準(zhǔn)備視圖組件l4 定義javaBean組件l5 在web.xml文件中配置ActionServletl6 創(chuàng)建struts-config.xml文件,增加配置l7 創(chuàng)建Action的子類(lèi)組件 l8 發(fā)布并運(yùn)行高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !具體實(shí)現(xiàn)步驟具體實(shí)現(xiàn)步驟1、新建項(xiàng)目 建立web項(xiàng)目,項(xiàng)目名稱(chēng)為itcastxxxxstrutsLogin2、添加Struts相關(guān)的jar包 把struts中用到的jar放在當(dāng)前工程的lib目錄下。高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !具體實(shí)現(xiàn)步驟具體實(shí)現(xiàn)步驟3、準(zhǔn)備視圖組件 先采用傳統(tǒng)HTML標(biāo)記 提交請(qǐng)求特征為*.

8、do 注意表單元素的名稱(chēng)高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !具體實(shí)現(xiàn)步驟具體實(shí)現(xiàn)步驟l4、創(chuàng)建javaBean組件lpackage org.struts.form;limport org.apache.struts.action.ActionForm;lpublic class UserForm extends ActionForm private String name;private String pwd;public String getName() return name;public void setName(String name) = nam

9、e;public String getPwd() return pwd;public void setPwd(String pwd) this.pwd = pwd;ltUserForm t負(fù)責(zé)接受視圖組件中表單所提交數(shù)據(jù)(注意:此類(lèi)中屬性的名稱(chēng)必須與頁(yè)面表單中組件的name屬性的值相同)高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !具體實(shí)現(xiàn)步驟具體實(shí)現(xiàn)步驟5 在web.xml文件中配置ActionServletaction org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml 0 高級(jí)軟件人才實(shí)

10、作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !具體實(shí)現(xiàn)步驟具體實(shí)現(xiàn)步驟6 創(chuàng)建struts-config.xml文件,增加配置lstruts-config.xml 整個(gè)Struts架構(gòu)的核心,在Struts架構(gòu)中,開(kāi)發(fā)者通過(guò)它來(lái)組裝各個(gè)組件,建立應(yīng)用程序的總體脈絡(luò),該文件的作用相當(dāng)于一個(gè)大型項(xiàng)目運(yùn)轉(zhuǎn)過(guò)程中的控制調(diào)配中心。 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !具體實(shí)現(xiàn)步驟具體實(shí)現(xiàn)步驟6、準(zhǔn)備配置文件、準(zhǔn)備配置文件(續(xù)續(xù))struts-config.xml配置文件!- 用于聲明ActionForm,其子元素的兩個(gè)屬性的作用分別是: name ActionForm類(lèi)型實(shí)例的名字,以便于后

11、續(xù)處理頁(yè)面中引用。 type 該實(shí)例的確切類(lèi)型,包括完整的包(package)路徑在內(nèi)的類(lèi)名。- 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !具體實(shí)現(xiàn)步驟具體實(shí)現(xiàn)步驟6、準(zhǔn)備配置文件、準(zhǔn)備配置文件(續(xù)續(xù))struts-config.xml配置文件ll!- path - 和本Action匹配的請(qǐng)求頁(yè)面相對(duì)路徑,不包括后綴(如.do),該相對(duì)路徑必須以/開(kāi)頭。l 本例中表明該Action負(fù)責(zé)接收l(shuí)ogin.do請(qǐng)求。l type - 指定處理請(qǐng)求的Action類(lèi),必須是包含完整的package路徑的類(lèi)名。l name - 指定要用到的ActionForm的名字。該名字必須在前面的元素中聲

12、明過(guò)。l scope - 規(guī)定ActionForm的使用范圍,缺省為session范圍,這里規(guī)定為request。l input - 表單驗(yàn)證出錯(cuò)時(shí)要轉(zhuǎn)向的錯(cuò)誤處理頁(yè)面。l forward - 指定目標(biāo)響應(yīng)頁(yè)面。 -ll!- 子元素包含的相關(guān)屬性,其作用如下:l name - forward元素名,Action中使用此標(biāo)識(shí)來(lái)查找確定目標(biāo)響應(yīng)頁(yè)面。l path - 指定目標(biāo)響應(yīng)頁(yè)面的相對(duì)URL。 -l l l ll高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !具體實(shí)現(xiàn)步驟具體實(shí)現(xiàn)步驟7 創(chuàng)建Action的子類(lèi)組件 LoginAction作為控制中心,依據(jù)身份驗(yàn)證的不同結(jié)果進(jìn)行頁(yè)面重定向p

13、ackage org.struts.action;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org

14、.struts.form.UserForm;高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !具體實(shí)現(xiàn)步驟具體實(shí)現(xiàn)步驟7 創(chuàng)建Action的子類(lèi)組件 (續(xù))/Action對(duì)應(yīng)的是配置文件中的子元素 public class LoginAction extends Action / ActionForward組件在配置文件對(duì)應(yīng)的是子元素/ 用于表明處理完用戶(hù)請(qǐng)求后要轉(zhuǎn)向的目標(biāo)響應(yīng)頁(yè)面。public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServl

15、etResponse response) throws Exception UserForm userform = (UserForm) form; String name = userform.getName(); String psw = userform.getPwd(); if (sqlserver.equals(name) & sa.equals(psw) / UserLoginLog ul = new UserLoginLog(); / ul.save(name, psw); return mapping.findForward(successed); else retur

16、n mapping.findForward(failed); 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !具體實(shí)現(xiàn)步驟具體實(shí)現(xiàn)步驟8、發(fā)布并運(yùn)行高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !Struts運(yùn)行機(jī)制lStruts架構(gòu)從本質(zhì)上是MVC設(shè)計(jì)模式的具體實(shí)現(xiàn) l表示層一般使用視圖組件實(shí)現(xiàn)、控制層使用控制器組件實(shí)現(xiàn),而應(yīng)用邏輯層則使用模型組件實(shí)現(xiàn)。作為表示層和應(yīng)用邏輯層之間的中介,控制器處于視圖及模型之間,起到了橋梁的溝通作用 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !工作流程工作流程高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !對(duì)應(yīng)的實(shí)現(xiàn)組件l與控制器

17、組件相關(guān)的類(lèi)主要包括:與控制器組件相關(guān)的類(lèi)主要包括:ActionServlet:Struts架構(gòu)的中央控制器,用于接受瀏覽器客戶(hù)端用戶(hù)請(qǐng)求以及狀態(tài)改變,并依據(jù)處理結(jié)果選擇表示層不同視圖的重定向。RequestProcessor:包含了Struts控制器在處理servlet請(qǐng)求時(shí)所遵循的控制邏輯。Action:控制器的一部分,用于模型交互,執(zhí)行狀態(tài)改變或狀態(tài)查詢(xún),以及告訴ActionServlet 下一個(gè)選擇的視圖。ActionForm:用于保存表單數(shù)據(jù)相關(guān)的狀態(tài)數(shù)據(jù)的改變。ActionMapping:用于控制在狀態(tài)數(shù)據(jù)改變后的事件處理的方式。 ActionForward:用戶(hù)指向或者視圖選擇。

18、l與視圖組件相關(guān)的工具主要包括與視圖組件相關(guān)的工具主要包括Struts架構(gòu)中提供的強(qiáng)大標(biāo)記庫(kù),常用的標(biāo)記庫(kù)功能架構(gòu)中提供的強(qiáng)大標(biāo)記庫(kù),常用的標(biāo)記庫(kù)功能如下所示:如下所示:struts-html.tld標(biāo)記庫(kù):擴(kuò)展HTML Form的JSP標(biāo)記struts- bean.tld標(biāo)記庫(kù):擴(kuò)展擴(kuò)展處理JavaBean的JSP標(biāo)記struts-logic.tld標(biāo)記庫(kù):擴(kuò)展測(cè)試屬性值的JSP標(biāo)記l與模型組件相關(guān)的工具主要包括:與模型組件相關(guān)的工具主要包括:開(kāi)發(fā)者提供的其他數(shù)據(jù)服務(wù)和API,例如:JavaBean等。高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !控制器組件控制器組件lStruts

19、架構(gòu)中控制器組件所承擔(dān)的主要功能包括:接受瀏覽器客戶(hù)端的處理請(qǐng)求根據(jù)用戶(hù)的不同請(qǐng)求,調(diào)用對(duì)應(yīng)的模型組件來(lái)執(zhí)行相應(yīng)的業(yè)務(wù)邏輯獲取模型組件業(yè)務(wù)邏輯的處理結(jié)果根據(jù)當(dāng)前的狀態(tài)數(shù)據(jù)及業(yè)務(wù)邏輯的處理結(jié)果,選擇合適的視圖組件呈現(xiàn)在瀏覽器客戶(hù)端。高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !ActionServletl在Struts架構(gòu)中Controller組件的核心控制器組件是ActionServletl是org.apache.struts.action.ActionServlet類(lèi)型的servletl所有客戶(hù)端提交的用戶(hù)請(qǐng)求都由它進(jìn)行處理負(fù)責(zé)接收客戶(hù)端請(qǐng)求后將之分發(fā)到相應(yīng)的Action Bean處

20、理,再根據(jù)處理的結(jié)果將不同的顯示請(qǐng)求重定向到響應(yīng)頁(yè)面。實(shí)際上,實(shí)際上,ActionServlet完全是在幕后工作完全是在幕后工作,它將其他組件綁定在一起。 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !ActionServlet配置ll l actionl org.apache.struts.action.ActionServletl !- 初始化參數(shù)用來(lái)對(duì)Servlet的運(yùn)行時(shí)環(huán)境進(jìn)行初始配置。l 的子元素用于配置Servlet初始化參數(shù)-l l l configl /WEB-INF/struts-config.xmll l l l debugl 3l l!- ?中?l 號(hào)的值是此A

21、ctionServlet在服務(wù)器開(kāi)啟時(shí)加載的次序,數(shù)值越低,越先加載. -l 0l 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !RequestProcessorlorg.apache.struts.action.RequestProcessor類(lèi)型真正封裝了Struts控制器在處理servlet請(qǐng)求時(shí)所遵循的控制邏輯。lActionServlet通過(guò)調(diào)用RequestProcessor對(duì)象的process()方法來(lái)委托其處理客戶(hù)端請(qǐng)求l主要方法: 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !ActionForm創(chuàng)建一個(gè)ActionForm 并不困難,但是你的類(lèi)必須符合一些要

22、求:ActionForm 必須擴(kuò)展自org.apache.struts.action.ActionForm。基類(lèi)ActionForm 是不能實(shí)例化的。ActionForm 必須為每個(gè)應(yīng)該從請(qǐng)求中收集的HTML輸入控件定義一個(gè)公共屬性。ActionForm還可能要符合一些可選的要求:如果你要求ActionForm 在傳遞屬性到Action之前校驗(yàn)它們,你就必須實(shí)現(xiàn)validate方法如果想在組裝前初始化屬性,必須實(shí)現(xiàn) reset , 它在ActionForm 組裝前被調(diào)用高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !千面女郎千面女郎 ActionFormActionForm Action

23、Form是一個(gè)多能的對(duì)象。它可以扮演字段收集器,數(shù)據(jù)校驗(yàn)器,類(lèi)型轉(zhuǎn)換器,以及傳輸對(duì)象在一個(gè)單一請(qǐng)求的范圍內(nèi)的所有東西.高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !千面女郎千面女郎 ActionFormActionForm1、ActionForm 作為字段收集器 通過(guò)通過(guò) HTTP提交字段提交字段 當(dāng)一個(gè)HTML 表單通過(guò)HTTP被提交, 所有的內(nèi)容都被視為文本。web 服務(wù)器接收到的表單元素是以名-值對(duì)的方式來(lái)到的。它們是文本字符串,不是二進(jìn)制數(shù)據(jù) 通過(guò)通過(guò)HTTP提交文件提交文件 一些表單允許將文件作為一個(gè)附件進(jìn)行上載。這時(shí),附件要進(jìn)行特殊編碼,以便僅使用文本內(nèi)容編碼就可以提交二進(jìn)

24、制文件。這樣就允許我們能夠通過(guò)HTTP傳遞二進(jìn)制文件, 文件被轉(zhuǎn)換成文本字符流來(lái)傳輸,然后再接收后又被轉(zhuǎn)換回來(lái)高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !千面女郎千面女郎 ActionFormActionForm1、ActionForm 作為字段收集器 (續(xù)) 通過(guò)通過(guò)HTTP提交空字段提交空字段 如果一個(gè)文本字段是空白的, 大部分瀏覽器都會(huì)提交一個(gè)空參數(shù)。但是如果一個(gè)選擇 框是空白的,瀏覽器則根本不提交任何東西。 ActionForm方案方案 Struts 對(duì)HTTP 參數(shù)處理的方案是將輸入?yún)?shù)傳遞到 JavaBean 屬性來(lái)進(jìn)行處理。當(dāng) ActionForm的屬性與某個(gè)請(qǐng)求參數(shù)匹

25、配,框架自動(dòng)以參數(shù)的值設(shè)置屬性。 要收集請(qǐng)求參數(shù),Struts 開(kāi)發(fā)人員需要做的所有事情就是提供一個(gè)具有JavaBean屬 性的ActionForm,這些屬性名稱(chēng)與HTTP請(qǐng)求參數(shù)匹配。其余的工作將會(huì)自動(dòng)進(jìn)行。高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !千面女郎千面女郎 ActionFormActionForm2、ActionForm 作為數(shù)據(jù)校驗(yàn)器lActionForm的 validate 方法是一個(gè)擴(kuò)展點(diǎn),你可以在此插入對(duì)業(yè)務(wù)方法(它們知道如何校驗(yàn)數(shù)據(jù))的調(diào)用。當(dāng)校驗(yàn)失敗, ActionForm 可以將整個(gè)內(nèi)容都回傳給web 頁(yè)面,這樣用戶(hù)就可以重新嘗試。l但是ActionFor

26、m的校驗(yàn)職責(zé)并不比它的糾正職責(zé)多一些。許多字段在傳遞給業(yè)務(wù)邏輯處理之前必須具有正確的類(lèi)型。在一個(gè)Integer 字段中的數(shù)據(jù)不能包含字母。如果這樣,你應(yīng)該在讓用戶(hù)繼續(xù)之前使用戶(hù)能糾正此數(shù)據(jù)。l通常, 這只是一個(gè)表面形式上的校驗(yàn)。即一個(gè)字段是一個(gè)Integer 并不能告訴我們它是正確的Integer。許多應(yīng)用將校驗(yàn)分為兩段執(zhí)行。首先,他們使用首先,他們使用ActionForm的的validate 方法來(lái)決定輸入是否是正確的類(lèi)型以及它們是否可以方法來(lái)決定輸入是否是正確的類(lèi)型以及它們是否可以被業(yè)務(wù)過(guò)程使用。一旦這個(gè)階段完成,被業(yè)務(wù)過(guò)程使用。一旦這個(gè)階段完成,Action 可以執(zhí)行額外的校驗(yàn),來(lái)決定可

27、以執(zhí)行額外的校驗(yàn),來(lái)決定輸入是否滿(mǎn)足業(yè)務(wù)層的其它要求。如果業(yè)務(wù)層校驗(yàn)失敗,你可以將控制返回輸入是否滿(mǎn)足業(yè)務(wù)層的其它要求。如果業(yè)務(wù)層校驗(yàn)失敗,你可以將控制返回到輸入頁(yè)面,就象這是在到輸入頁(yè)面,就象這是在ActionForm 的的validate 方法校驗(yàn)失敗一樣。方法校驗(yàn)失敗一樣。lStruts 框架給了你處理數(shù)據(jù)校驗(yàn)的靈活性,用 ActionForm, 用Action, 或這兩者,按你所需而定。高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !千面女郎千面女郎 ActionFormActionForm3、ActionForm 作為類(lèi)型轉(zhuǎn)換器lActionForm的一個(gè)強(qiáng)制之處是應(yīng)該使用 S

28、tring 和 boolean屬性。實(shí)際上,這意味著屬性必須得從一種轉(zhuǎn)換到另一種類(lèi)型。大部分應(yīng)用也需要一些屬性,比如電話號(hào)碼或者數(shù)量,并以一種格式化的方式出現(xiàn)。核心Java 包提供一些工具來(lái)做這種事情,但是要干凈利落地將它們集成到應(yīng)用中仍然是一個(gè)挑戰(zhàn)。lStruts 開(kāi)發(fā)人員經(jīng)常在ActionForm中包含一些helper方法,來(lái)進(jìn)行類(lèi)型轉(zhuǎn)換。helper 方法可以有很多種實(shí)現(xiàn)方式高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !ActionFormActionForm配置配置struts-config.xml配置文件- l用于聲明ActionForm,其子元素的兩個(gè)屬性的作用分別是:na

29、me ActionForm類(lèi)型實(shí)例的名字,以便于后續(xù)處理頁(yè)面中引用。type 該實(shí)例的確切類(lèi)型,包括完整的包(package)路徑在內(nèi)的類(lèi)名。高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !ActionFormActionForm的風(fēng)情的風(fēng)情lActionForm 和動(dòng)態(tài)DynaActionForm。高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !ActionFormActionForm的風(fēng)情的風(fēng)情 DynaActionForml對(duì)一個(gè)大型應(yīng)用來(lái)說(shuō),以常規(guī)方式聲明簡(jiǎn)單屬性可能會(huì)帶來(lái)大量工作。要?jiǎng)?chuàng)建一個(gè)常規(guī)JavaBean 屬性, 你需要對(duì)field, getter, setter進(jìn)

30、行編碼大量的基礎(chǔ)工作僅僅是get這個(gè)或者set那個(gè)。 如果你僅僅是聲明某個(gè)屬性,而不用對(duì)每個(gè)屬性單獨(dú)進(jìn)行設(shè)置可能會(huì)快些。lDynaActionForm (org.apache.struts.action.DynaActionForm) 就是設(shè)計(jì)來(lái)讓你可以通過(guò)Struts配置文件來(lái)說(shuō)明簡(jiǎn)單屬性的對(duì)象, DynaActionForm 是基于Jakarta Commons ASF, Commons的DynaBean組件。這是一個(gè)聰明的對(duì)象,它可以將字段存儲(chǔ)在一個(gè)內(nèi)部map之中,但把它們作為標(biāo)準(zhǔn)的JavaBean 屬性來(lái)暴露。你可以在使用ActionForm 的任何地方使用DynaActionForm

31、。你也可以用DynaActionForm 替代常規(guī)的 ActionForm 而不用改變?nèi)魏维F(xiàn)有的Java 或者JSP 代碼。高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !ActionFormActionForm的風(fēng)情的風(fēng)情 DynaActionFormll l l l高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !ActionForm Bean的使用范圍高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !處理ActionForm Bean的基本步驟1)檢查并確認(rèn)在Action中已經(jīng)配置了對(duì)表單Bean的映射。2)根據(jù)表單Bean的name屬性,查找表單Bean的配置信息。3)檢

32、查該表單Bean的使用范圍,查找在該范圍內(nèi),是否已存在該Bean的實(shí)例。如果已經(jīng)存在,那么就重用該實(shí)例。否則,就重新創(chuàng)建一個(gè)。4)調(diào)用該Bean實(shí)例的reset()方法重置其狀態(tài)。5)調(diào)用該Bean實(shí)例相應(yīng)的setter方法,使用請(qǐng)求表單中的數(shù)據(jù)填充Bean的屬性。6)如果起用了validate機(jī)制,則調(diào)用表單Bean的validate()方法。如果validate()方法返回任何錯(cuò)誤,則跳過(guò)步驟7)轉(zhuǎn)到預(yù)定的出錯(cuò)處理頁(yè)面。7)將該表單Bean實(shí)例作為參數(shù),傳給處理器對(duì)象的execute()方法并執(zhí)行。 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !Action Beanlorg.ap

33、ache.struts.action.Action子類(lèi)類(lèi)型, RequestProcessor調(diào)用它以處理不同的頁(yè)面請(qǐng)求 。 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !ActionMapping lorg.apache.struts.action.ActionMapping類(lèi)型類(lèi)型l系統(tǒng)針對(duì)每個(gè)系統(tǒng)針對(duì)每個(gè)元素都創(chuàng)建一個(gè)與之對(duì)應(yīng)的元素都創(chuàng)建一個(gè)與之對(duì)應(yīng)的 ActionMapping,一組一組ActionMapping 對(duì)象被放在一個(gè)對(duì)象被放在一個(gè)ActionMappings 集合之中集合之中(org.apache.struts.action.ActionMappings).lAct

34、ionMapping將對(duì)將對(duì)Struts 應(yīng)用中有效的業(yè)務(wù)邏輯進(jìn)行分類(lèi)。當(dāng)一應(yīng)用中有效的業(yè)務(wù)邏輯進(jìn)行分類(lèi)。當(dāng)一個(gè)請(qǐng)求到達(dá)時(shí),個(gè)請(qǐng)求到達(dá)時(shí),ActionServlet(使用使用 path 屬性屬性)在在ActionMapping目目錄中查找對(duì)應(yīng)條目,并調(diào)用相應(yīng)的錄中查找對(duì)應(yīng)條目,并調(diào)用相應(yīng)的Action Bean。當(dāng)。當(dāng)ActionServlet轉(zhuǎn)發(fā)請(qǐng)求時(shí),轉(zhuǎn)發(fā)請(qǐng)求時(shí),ActionMapping實(shí)例被作為參數(shù)之一傳遞給相應(yīng)實(shí)例被作為參數(shù)之一傳遞給相應(yīng)Action對(duì)象的對(duì)象的execute()方法方法高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !ActionMapping (action)

35、屬性屬性屬性說(shuō)明說(shuō)明path來(lái)自于請(qǐng)求的URI 路徑,用來(lái)選擇該mapping。(API 命令)forward通過(guò)一個(gè)forward 服務(wù)這個(gè)請(qǐng)求的上下文相關(guān)的資源路徑。實(shí)際上是forward,include,type 屬性中的一個(gè),必須指定。include通過(guò)一個(gè)include 服務(wù)這個(gè)請(qǐng)求的上下文相關(guān)的資源路徑。實(shí)際上是forward,include,type 屬性的一個(gè),必須指定。type可選,表明一個(gè)org.apache.struts.action.ActionMapping的子類(lèi)名稱(chēng),在實(shí)例化這個(gè)mapping 時(shí)使用。name與該Mapping 相關(guān)的form bean 的名稱(chēng),如

36、果有的話。這不是類(lèi)名稱(chēng)。而是在form bean 配置中使用的邏輯名稱(chēng)。scope范圍(請(qǐng)求或會(huì)話)識(shí)別符,如果有的話。與該mapping 相關(guān)的formaBean 在其中創(chuàng)建。validate如果與該mapping 相關(guān)的 form bean 的 validate 方法 (如果有)需要被調(diào)用,則設(shè)置為true。默認(rèn)值是trueinput輸入表單的上下文相關(guān)的路徑,如果校驗(yàn)錯(cuò)誤,控制應(yīng)該被返回到該表單。可以是任何: HTML,JSP,VM,或者另一個(gè)ActionMapping。轉(zhuǎn)發(fā)的過(guò)程高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !ActionMappingActionMapping

37、屬性屬性parameter通用配置參數(shù),用來(lái)向ActionMapping 選定的Action 傳遞額外的參數(shù)信息。attribute如果它不是 bean 的特定名稱(chēng)的話,則表示form bean 在要在其中被訪問(wèn)的請(qǐng)求-范圍或者會(huì)話-范圍的屬性名稱(chēng)。高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !ActionForward l一種配置對(duì)象,映射配置文件一種配置對(duì)象,映射配置文件struts-config.xml中的中的元素,封裝目元素,封裝目標(biāo)響應(yīng)頁(yè)面標(biāo)響應(yīng)頁(yè)面URI。l屬性如下屬性描述name指定ActionForward 的邏輯名字。其它組件可以通過(guò)此名稱(chēng)來(lái)引用該ActionForw

38、ard。以便其他屬性可以很容易地被修改?;?ActionForward對(duì)象的標(biāo)識(shí),在Action Bean類(lèi)的execute()方法中,ActionMapping對(duì)象的findForward()方法就是根據(jù)此標(biāo)識(shí)來(lái)查找相應(yīng)的ActionForward對(duì)象的path指定ActionForward 的URI。redirect如果設(shè)置為如果設(shè)置為 true, 控制被重定向。缺省設(shè)置為控制被重定向。缺省設(shè)置為false(轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)) ,而且?guī)缀跏?,而且?guī)缀跏歉玫倪x擇。更好的選擇。高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !ActionForward Global(全局)(全局) Action

39、Forward 對(duì)整個(gè)應(yīng)用中的所有對(duì)整個(gè)應(yīng)用中的所有Action 對(duì)象均有效對(duì)象均有效 Local(局部)(局部) ActionForward 則在則在ActionMapping 元素中定義。僅對(duì)那些在這元素中定義。僅對(duì)那些在這個(gè)個(gè)ActionMapping 中調(diào)用的中調(diào)用的Action 對(duì)象有效對(duì)象有效。Struts 配置對(duì)配置對(duì)ActionForward提供兩個(gè)級(jí)別嵌套提供兩個(gè)級(jí)別嵌套:高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !Action許多 Struts Action 類(lèi)都是編寫(xiě)來(lái)在特定的應(yīng)用中作特定的事情。而其它一些Action 則編寫(xiě)來(lái)為各種應(yīng)用所使用。一些Action

40、 設(shè)計(jì)來(lái)可以做多種工作。而另一些Action 可能僅提供流程控制,而本身并不做任何事情。Struts 發(fā)布包提供了幾個(gè)分別作不同事情的“標(biāo)準(zhǔn)的” Action。它們中有橋( bridge )Action,以幫助Struts 與你的應(yīng)用中的其它servlet 一起工作,以及幾個(gè)用來(lái)擴(kuò)展新功能的基礎(chǔ)( base )Action。Action目的示例Bridge Action集成Struts和其它servletForwardActionIncludeActionBase Action擴(kuò)展功能DispatchActionLookupDispatchActionSwitchAction高級(jí)軟件人才實(shí)作培

41、訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !DispatchActionpublic abstract class org.apache.struts.actions.DispatchAction extends org.apache.struts.action.Action功能:同時(shí)處理多個(gè)不同的請(qǐng)求,瀏覽器客戶(hù)端是通過(guò)提交不同的參數(shù)以實(shí)現(xiàn)不同請(qǐng)求的區(qū)分。將針對(duì)類(lèi)似但是處理邏輯用不盡相同的業(yè)務(wù)代碼封裝在同一個(gè)Action類(lèi)中 在該action 的配置中,增加了parameter屬性,該屬性用于指定參數(shù)名,即Struts 將根據(jù)該參數(shù)的值調(diào)用對(duì)應(yīng)的方法 高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家

42、! !附錄1:Struts中用的lib包和用途包名稱(chēng)包名稱(chēng)用途用途Common-beanutils.jarCommon-beanutils.jar簡(jiǎn)單易用的 Java 反射和內(nèi)省 API 包裝器Commons-collections.jarCommons-collections.jar一組用于擴(kuò)展和增強(qiáng) Java Collections Framework 的類(lèi)Commons-digester.jarCommons-digester.jar通常用于分析 XML 配置文件的 XML 到 Java 對(duì)象映射實(shí)用程序Commons-lang.jarCommons-lang.jar一組公用實(shí)用程序類(lèi),

43、可以為 java.lang 中的類(lèi)提供附加功能Commons-logging.jarCommons-logging.jar各種日志 API 實(shí)現(xiàn)的包裝器Commons-fileupload.jarCommons-fileupload.jar一個(gè)處理文件上傳的包c(diǎn)ommons-chain-1.1.jar 提供了一個(gè)基于Java的框架和API來(lái)描述順序的處理過(guò)程。Struts使用Chain簡(jiǎn)化HTTP請(qǐng)求處理 commons-io-1.1.jar上傳下載也就是流的操作 Commons-validator.jarCommons-validator.jar用于定義 XML 文件中的驗(yàn)證類(lèi)(驗(yàn)證方法)和

44、驗(yàn)證規(guī)則的可擴(kuò)展框架高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家高級(jí)軟件人才實(shí)作培訓(xùn)專(zhuān)家! !包名稱(chēng)包名稱(chēng)用途用途bsf-2.3.0.jarBean Scripting Framework是一個(gè)支持在Java應(yīng)用程序內(nèi)調(diào)用腳步語(yǔ)言(Script),并且支持腳步語(yǔ)言直接訪問(wèn)Java對(duì)象和方法的一個(gè)開(kāi)源項(xiàng)目。它提供了完整的API實(shí)現(xiàn)通過(guò)Java訪問(wèn)腳本語(yǔ)言的引擎。 antlr-2.7.2.jar這個(gè)工具集合了詞法分析,語(yǔ)法分析??梢允褂胘ava,c+,c#來(lái)寫(xiě). oro-2.0.8.jar 一套文本處理工具 struts-core-1.3.8.jar: struts核心包 struts-taglib-1.3.8.jar: 標(biāo)簽 struts-tiles-1.3.8.jar 標(biāo)簽 struts-extras-1.3.8.jar rorg.apache.struts.actions/

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論