




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、高級(jí)軟件人才實(shí)作培訓(xùn)專家!Struts開發(fā)講師:方立勛北京傳智播客教育高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:Struts簡介 Struts是apache開發(fā)的一個(gè)web層的框架,它主要用于簡化web層的開發(fā),struts針對(duì)web層的一些常用操作, 例如: 表單數(shù)據(jù)的封裝、校驗(yàn)和數(shù)據(jù)的回顯 國際化開發(fā) 文件上傳 異常處理 等等struts都提供了相應(yīng)的簡化,因此,很多web開發(fā)人員都會(huì)選用struts進(jìn)行web開發(fā)。 Struts是如何做到簡化web層開發(fā)的?北京傳智播客教育 jspservletie在servlet中編寫請(qǐng)求處理代碼Struts
2、-config.xml在action中編寫請(qǐng)求處理代碼ieActionServletactionjspStruts的actionServlet對(duì)請(qǐng)求進(jìn)行預(yù)處理,然后再調(diào)用開發(fā)人員編寫的action處理請(qǐng)求高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:初學(xué)者需要明確的幾個(gè)問題 Struts只是一個(gè)web層的框架,它用于規(guī)范并簡化web 層的開發(fā),它是對(duì)servlet、jsp等web開發(fā)技術(shù)的封裝。在開發(fā)中大家遇到問題,如果發(fā)現(xiàn)struts不給力,照樣 可以使用web技術(shù)解決,兩種技術(shù)混用不會(huì)有任何問題。 web基礎(chǔ)最重要 Struts只是一個(gè)web層的框架,它只是用于解決web層的問題,千萬不要想著用str
3、uts去操縱數(shù)據(jù)庫。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:Struts開發(fā)快速入門 用戶注冊(cè)案例,步驟:1、編寫register.jsp表單頁面,表單提交register.do處理。2、在web工程中導(dǎo)入struts開發(fā)包,在web.xml文件中配置struts框架提供的ActionServlet,使其處理所有以.do為結(jié)尾的請(qǐng)求。3、在/WEB-INF/目錄下編寫ActionServlet工作時(shí)使用的配置文件struts-config.xml,配置當(dāng)ActionServlet收到register.do請(qǐng)求 時(shí),調(diào)用一個(gè)名稱為Register的Actio
4、n處理。4、編寫ActionRegister,在其excute方法內(nèi)編碼,采用傳統(tǒng)方式獲取數(shù)據(jù),并調(diào)用service完成用戶注冊(cè),然后轉(zhuǎn)發(fā)給相應(yīng)的jsp頁面。高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:讓struts自動(dòng)封裝請(qǐng)求數(shù)據(jù) Struts的ActionServlet的功能非常強(qiáng)大,我們只需要在它的配置文件( struts-config.xml文件)中配置一下,它就可以自動(dòng)把請(qǐng)求數(shù)據(jù)封裝到用戶指定的formbean中。并且,struts在調(diào)用開發(fā)人員編寫的action時(shí),會(huì)把封裝了數(shù)據(jù)的formbean傳給action。這樣,可 以省去開發(fā)人員在action中手工獲取客戶端提交的數(shù)據(jù),減輕編碼工作
5、量。 注意:用于封裝數(shù)據(jù)的formbean要繼承struts的ActionForm。高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:讓struts轉(zhuǎn)發(fā)請(qǐng)求 用戶在編寫action時(shí),無須在action內(nèi)手工編碼進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)。struts的ActionServlet在調(diào)用action.execute方法時(shí),可以根據(jù)它的返回值,決定調(diào)用哪個(gè)JSP頁面響應(yīng)用戶請(qǐng)求。 Action.execute方法的返回值A(chǔ)ctionForward代表一個(gè)轉(zhuǎn)發(fā)對(duì)象, struts 的ActionServlet在收到Action.execute方法的返回值A(chǔ)ctionForward 后,會(huì)取出該對(duì)象封裝的轉(zhuǎn)發(fā)地址,進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)。A
6、ctionServletActionJSPActionForward高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:讓struts根據(jù)配置實(shí)現(xiàn)轉(zhuǎn)發(fā) 在struts的配置文件struts-config.xml文件中,可以配置forward標(biāo) 簽,它用于封裝一個(gè)轉(zhuǎn)發(fā)地址。如: Struts的ActionServlet在調(diào)用action時(shí),會(huì)把a(bǔ)ction的配置信息封 裝一個(gè)ActionMapping對(duì)象中,并傳遞給action。 因此,開發(fā)人員在編寫action時(shí),無須硬編碼指定轉(zhuǎn)發(fā)地址,可以通過ActionMapping對(duì)象,獲得配置文件中配置的轉(zhuǎn)發(fā)地址,從而 實(shí)現(xiàn)轉(zhuǎn)發(fā)。如下圖:高級(jí)軟件人才實(shí)作培訓(xùn)專家!TI
7、P:讓struts根據(jù)配置實(shí)現(xiàn)轉(zhuǎn)發(fā)Struts-config.xml封裝配置信息ActionMapping請(qǐng)求ActionServletactionActionMappingWeb.xmlStruts-config.xmlformbeanactionActionServletWeb服務(wù)器ab.doactionForwardjsp高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:讀struts源碼,分析struts工作流程 Struts的控制器組件主要包括(課后一定讀源碼) ActionServlet對(duì)象:Struts 的核心類 RequestProcessor對(duì)象:由ActionServlet調(diào)用,負(fù)責(zé)處理用
8、戶請(qǐng)求 Action對(duì)象:用戶自己編寫的類 Struts處理請(qǐng)求的流程: 當(dāng) ActionServlet 接收到 HTTP 請(qǐng)求后,在 doGet 或 doPost 方法中都會(huì)調(diào)用process()方法處理請(qǐng)求 在 ActionServlet 的 process() 方法中一旦選擇了正確的子應(yīng)用模塊,就會(huì)調(diào)用RequestProcessor實(shí)例的process()方法來處理請(qǐng)求。在ActionServlet調(diào)用這個(gè)方法時(shí),會(huì)把當(dāng)前的request和response對(duì)象傳給它 RequestProcessor實(shí)例的process()方法調(diào)用ProcessActionCreate()方法,先判斷是
9、否在 Action 緩存中存在Action實(shí)例,如果不存在,就創(chuàng)建一個(gè)Action 實(shí)例,把它保存在 Action 緩存中 RequestProcessor實(shí)例的process()方法調(diào)用Action實(shí)例的execute()方法北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:Struts配置文件常用屬性 指定action處理的地址 指定處理請(qǐng)求的Action的完整類名 指定使用哪個(gè)formbean封裝請(qǐng)求參數(shù) 指定把formbean存放到哪個(gè)域?qū)ο笾?默認(rèn)session 指定formbean存儲(chǔ)的key,不設(shè)默認(rèn)為name屬性的值 指定formbean的數(shù)據(jù)是由哪
10、個(gè)頁面提供的,提供此屬性的目的在于formbean校驗(yàn)失敗時(shí),程序方便跳回formbean的輸入頁面,顯示校驗(yàn)失敗信息。 指定收到請(qǐng)求時(shí),跳轉(zhuǎn)到相應(yīng)的jsp頁面,如果配置了此屬性,則action將不再被調(diào)用。 指定收到請(qǐng)求時(shí),進(jìn)行頁面包含。 如果action把該屬性設(shè)置為true,則它可以處理客戶機(jī)發(fā)出的所有無效的.do請(qǐng)求,默認(rèn)值為false 配置action參數(shù),調(diào)用actioMapping.getParameter方法可以獲得這里配置的參數(shù)。 標(biāo)簽和所有的配置信息使用哪個(gè)對(duì)象封裝, 默認(rèn)值為ActionMapping對(duì)象。 請(qǐng)求參數(shù)封裝到formbean中后,是否
11、讓struts自動(dòng)北京傳智播客教育 w 調(diào)用formbean的validate方法進(jìn)行數(shù)據(jù)校驗(yàn)。默認(rèn)true高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:補(bǔ)充知識(shí)點(diǎn) 需求: Web應(yīng)用程序若要嚴(yán)格按照MVC設(shè)計(jì)模式,所有客戶端的請(qǐng)求都需要發(fā)送給servlet處理,servlet再轉(zhuǎn)發(fā)到JSP顯示。 因此,對(duì)于上述案例中的register.jsp頁面,也要禁止用戶直接訪問,而應(yīng)把它放在web-inf目錄中保護(hù)起來,由用戶訪問servlet后,servlet再轉(zhuǎn)發(fā)到register.jsp頁面上。 傳統(tǒng)做法和Struts的做法。 在首頁上掛上注冊(cè)功能 標(biāo)簽的好處: 使用不用關(guān)心web應(yīng)用程序的名稱。 可以自動(dòng)
12、附加jsessionid參數(shù)進(jìn)行url重寫。 可以對(duì)參數(shù)信息進(jìn)行url編碼。 標(biāo)簽附件參數(shù)常用屬性:paramID、paramName、name、property。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:補(bǔ)充知識(shí)點(diǎn) 標(biāo)簽示例:高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:借助struts完成表單校驗(yàn) 表單數(shù)據(jù)提交后,在服務(wù)器端編程校驗(yàn)數(shù)據(jù),是一個(gè)很常見的需求。所以struts的ActionServlet在把數(shù)據(jù)封裝到formbean后,會(huì)自動(dòng)調(diào)用formbean的validate方法對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),并根據(jù)validate方法的返回值,決定轉(zhuǎn)發(fā)到哪個(gè)jsp頁面處理。 S
13、turs的這種處理方式,可以讓開發(fā)人員少死點(diǎn)腦細(xì)胞,開發(fā)人員只需要在validate方法中寫代碼進(jìn)行數(shù)據(jù)校驗(yàn)就OK了,調(diào)用方法的事由struts的actionServlet去做了,并且,調(diào)用方法完后, 如果有錯(cuò)誤,跳轉(zhuǎn)的事,也由struts根據(jù)配置文件做了。 注意:若想struts的actionServlet把數(shù)據(jù)封裝到formbean后, 調(diào)用其validate方法,需要在struts-config.xml文件中把a(bǔ)ction 的validate屬性設(shè)置為true,默認(rèn)值為true。北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:借助struts完成表單校驗(yàn) S
14、truts調(diào)用formbean.validate方法后,其規(guī)則為: 如果validate返回的ActionErrors對(duì)象為空或null,則Struts認(rèn)為表單驗(yàn)證通過,struts進(jìn)而繼續(xù)調(diào)用Action處理請(qǐng)求。 如果validate返回的ActionErrors不為空,并且封裝了數(shù)據(jù),則認(rèn)為校驗(yàn)失敗,Struts將自動(dòng)跳轉(zhuǎn)回表單輸入頁面。(input屬性指定) 因此用戶若想校驗(yàn)失敗,只需要?jiǎng)?chuàng)建ActionErrors對(duì)象,并調(diào)用其方法: ActionErrors.add(String key,ActionMessage message)向ActionErrors對(duì)象中加入相應(yīng)的錯(cuò)誤消息,
15、返回給struts即可。示例代碼:高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:在JSP中顯示校驗(yàn)信息 Struts在收到Formbean的返回值A(chǔ)ctionErrors后,會(huì)將其存儲(chǔ)到request域中,進(jìn)而帶給表單頁面,以便開發(fā)人員在表單頁面中顯示校驗(yàn)失敗的錯(cuò)誤信息(這點(diǎn)建議讀讀struts的源碼)。 在JSP頁面中開發(fā)人員可以編碼顯示錯(cuò)誤信息: 注意上面的代碼取request的errors對(duì)象時(shí)為什么用“org.apache.struts.action.ERROR”,這個(gè)值從何來? 顯示消息時(shí)有可能需要在struts-config.xml文件中配置一個(gè)資源文件北京傳智播客教育 www.itcast.
16、cn高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:使用顯示校驗(yàn)消息 在JSP頁面中手工編碼獲取errors對(duì)象中保存的數(shù)據(jù)很麻煩,因此Struts編寫了標(biāo)簽,它用于封裝JSP頁面中用于獲取消息的java代碼。 用戶使用標(biāo)簽可以很輕松獲取到errors中保存的校驗(yàn)信息,示例。 標(biāo)簽也可以以ActionMessage中封裝了key為關(guān)鍵字,從資源文件中檢索數(shù)據(jù)予以顯示,如下所示: 看看標(biāo)簽源碼,看errors標(biāo)簽是如何以關(guān)鍵字檢索資源文件數(shù)據(jù)的。 注意:errors標(biāo)簽工作時(shí)需要資源文件。 取消false,html:errors標(biāo)簽在顯示ActionMessage封裝的消息時(shí),將以ActionMessage的
17、key為關(guān)鍵字從資源文件中檢索數(shù)據(jù)顯示高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:ActionMessage ActionMessage封裝消息的方式很靈活,后面兩個(gè)構(gòu)造函數(shù)中的value參數(shù),用于替換消息文本中的占位符:北京傳智播客教育 對(duì)應(yīng)資源文件內(nèi)容:errors.required=0不能為空高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:練習(xí) 完成對(duì)Register.jsp頁面的完整校驗(yàn)北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:練習(xí) private String username; private String password; private
18、String password2; private String gender; private String birthday; private String income; private String city; private String preference; private String email;高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:練習(xí) 注意事項(xiàng): 日期校驗(yàn)不要采用DateFormat,而應(yīng)采用:DateLocaleConverter dlc = new DateLocaleConverter(); Date d = (Date) dlc.convert(this.birthd
19、ay,yyyy-mm-dd); 對(duì)于頁面中的數(shù)據(jù),可采用枚舉類表示,對(duì)枚舉值的校驗(yàn)可采用如下類似方式:Gender.valueOf(this.gender);高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:使用Struts標(biāo)簽完成表單數(shù)據(jù)回顯 Struts提供了很多表單相關(guān)的自定義標(biāo)簽,如: 這些標(biāo)簽除用于生成相應(yīng)的html標(biāo)簽外,最大的好處在于它在產(chǎn)生html標(biāo)簽時(shí),會(huì)自動(dòng)檢索相應(yīng)formbean的數(shù)據(jù)予以顯示,這樣,當(dāng)表單校驗(yàn)失敗時(shí),表單數(shù)據(jù)的回顯struts幫我們干了,開發(fā)人員就不 需要再編碼去取了。高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:使用Struts標(biāo)簽完成數(shù)據(jù)回顯 使用Struts的html標(biāo)簽完成
20、數(shù)據(jù)回顯時(shí)注意的問題: html標(biāo)簽回顯數(shù)據(jù)時(shí),會(huì)以org.apache.struts.taglib.html.BEAN為關(guān)鍵字,從各個(gè)域中查找bean,找不到則拋空指針異常。所以使用html標(biāo)簽時(shí)域中須有以org.apache.struts.taglib.html.BEAN為關(guān)鍵字的對(duì)象。 這個(gè)工作可以交給html:form標(biāo)簽做,html:form標(biāo)簽在執(zhí)行時(shí),會(huì)查找域中已有的formbean,并以org.apache.struts.taglib.html.BEAN為關(guān)鍵字把formbean存在域中。如果html:form標(biāo)簽在域中找不到formbean,則html:form標(biāo)簽會(huì)實(shí)例化一
21、個(gè)空bean,然后存儲(chǔ)到域中。因此,為了在頁面中使用struts的html標(biāo)簽回顯數(shù)據(jù),這些標(biāo)簽需要配合html:form標(biāo)簽使用。(查看html:form標(biāo)簽的源文件可以看到這點(diǎn))。 對(duì)于復(fù)選框中的數(shù)據(jù),Html:checkbox標(biāo)簽不能完成數(shù)據(jù)回顯,復(fù)選框的數(shù)據(jù)回顯需要使用html:multibox。 Struts中的html:password標(biāo)簽也會(huì)回顯數(shù)據(jù),如果不想password回顯,需要把其redisplay屬性置為false。 補(bǔ)充:formbean的reset方法html產(chǎn)生一個(gè)標(biāo)簽。也包括來自于用戶會(huì)話中的 language 屬性form定義一個(gè)表單。Action 和 foc
22、us 屬性是最有用的屬性checkbox產(chǎn)生一個(gè)檢查框字段file產(chǎn)生一個(gè)文件選擇輸入字段hidden產(chǎn)生一個(gè)隱藏字段option產(chǎn)生一個(gè)選擇項(xiàng)options產(chǎn)生一個(gè)選擇項(xiàng)列表password產(chǎn)生一個(gè)口令輸入字段radio產(chǎn)生一個(gè)單選輸入字段select產(chǎn)生一個(gè)選擇元素text產(chǎn)生一個(gè)文本輸入字段textarea產(chǎn)生一個(gè) html 文本區(qū)域元素image產(chǎn)生一個(gè)圖像輸入字段button產(chǎn)生一個(gè)按鈕輸入字段cancel產(chǎn)生一個(gè)取消按鈕submit產(chǎn)生一個(gè)提交按鈕reset產(chǎn)生一個(gè)重新設(shè)定按鈕errors顯示錯(cuò)誤消息img產(chǎn)生一個(gè) html img 標(biāo)簽高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:請(qǐng)求數(shù)據(jù)的
23、中文亂碼問題 解決方案: 過濾器 重寫ActonServlet 重寫RequestProcessor北京傳智播客教育 高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:防止表單重復(fù)提交 什么情況下會(huì)發(fā)生表單重復(fù)提交 刷新 網(wǎng)絡(luò)延時(shí),多次點(diǎn)擊 后退、前進(jìn) 防止表單重復(fù)提交的原理 表單應(yīng)由一個(gè)程序產(chǎn)生,程序在產(chǎn)生表單時(shí): 生成一個(gè)隨機(jī)值,并附在表單的一個(gè)隱藏輸入項(xiàng)中。 把隨機(jī)值存儲(chǔ)在session域中。 表單在提交時(shí),服務(wù)器程序客戶機(jī)帶過來的隨機(jī)值和session域中保存的隨機(jī)值是否一致,如果一致則允許提交,否則認(rèn)為是重復(fù)提交。高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:使用struts防止表單重
24、復(fù)提交 Struts的標(biāo)簽除了可以生成標(biāo)簽、協(xié)助其它html標(biāo)簽完成數(shù)據(jù)回顯外,它還提供了防止表單重復(fù)提交的功能。 標(biāo)簽在生成表單時(shí),會(huì)檢查session域中是否存在token,如果存在則自動(dòng)使用token生成隱藏字段。 Struts為方便開發(fā)人員生成token,在action中提供了saveToken方法,調(diào)用這個(gè)方法就可以在session域中保存一個(gè)token。 Struts為方便開發(fā)人員在action中校驗(yàn)用戶是否為重復(fù)提交,因此它在action中也提供了isTokenValid方法,該方自動(dòng)判斷表單是否為重復(fù)提交。 防表單重復(fù)提交在struts中的做法:1、用戶先訪問Action,Ac
25、tion中調(diào)用saveToken方法,然后派發(fā)到表單頁面。2、在表單頁面中使用標(biāo)簽, 標(biāo)簽會(huì)自動(dòng)為表單生成一個(gè)帶隨機(jī)值的隱藏字段。3、在表單提交的Action中調(diào)用isTokenValid方法,就可以判斷出表單是否為重復(fù)提交,從而可以根據(jù)情況決定如何處理。 isTokenValid方法返回true,則為允許提交,處理提交后,要記得調(diào)用reset清除token。高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:使用beanUtils轉(zhuǎn)換表單數(shù)據(jù) 表單校驗(yàn)通過后,需把formbean的數(shù)據(jù)封裝到實(shí)體bean中,此時(shí)應(yīng)采用beanUtils框架,并注冊(cè)相應(yīng)的轉(zhuǎn)換器。 為避免在多個(gè)Action中重復(fù)注冊(cè)轉(zhuǎn)換器,可采用
26、listener在web應(yīng)用啟動(dòng)時(shí)就注冊(cè)轉(zhuǎn)換器。高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:表單數(shù)據(jù)業(yè)務(wù)邏輯校驗(yàn) 表單數(shù)據(jù)校驗(yàn)通過后,在action中可能會(huì)對(duì)數(shù)據(jù)進(jìn)行業(yè)務(wù)邏輯驗(yàn)證, 例如檢查當(dāng)前注冊(cè)用戶是否已經(jīng)被別人注冊(cè)過了,這種驗(yàn)證稱為業(yè)務(wù)邏輯驗(yàn)證。 業(yè)務(wù)邏輯驗(yàn)證如果失敗,其相應(yīng)的信息也應(yīng)顯示在頁面上。高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:表單數(shù)據(jù)業(yè)務(wù)邏輯校驗(yàn) 很多網(wǎng)站也會(huì)提供如下圖所示的驗(yàn)證方式:高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:使用struts修改數(shù)據(jù) 程序取出數(shù)據(jù)庫中的數(shù)據(jù),顯示在一個(gè)表單頁面上,以便于用戶 修改數(shù)據(jù),這也是開發(fā)中經(jīng)常需要實(shí)現(xiàn)的功能。實(shí)現(xiàn)此功能需要 注意的問題: 為回顯數(shù)據(jù)方便,通常
27、在頁面中都會(huì)使用struts的html標(biāo)簽。 而程序調(diào)用dao取出的數(shù)據(jù)通常放在實(shí)體bean中,要想在頁面中使用html標(biāo)簽取出數(shù)據(jù)顯示,此時(shí)應(yīng)把實(shí)體bean的數(shù)據(jù)又轉(zhuǎn)換到表單bean中,對(duì)于復(fù)雜類型的數(shù)據(jù),此時(shí)就需要在beanutils框架中注冊(cè)數(shù)據(jù)的雙向轉(zhuǎn)換器了。 數(shù)組類型是比較特殊的類型,進(jìn)行類型判斷是可以采用如下方式:clazz.equals(Object.class) 獲取到的 Bean為在頁面中顯示,還需要把bean存放在request域中,存放的關(guān)鍵字可以使用action上配置的formbean的名稱。 注意:在action如果向request域存formbean,這個(gè)formb
28、ean想在jsp頁面中顯示,配置文件中的scope要配成request,不然頁面會(huì)先從 session找,而session中有一個(gè)空bean。高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:struts文件上傳 文件的上傳操作: JSP 頁面: 表單使用 POST 提交方式, 添加enctype=multipart/form-data 屬性 ActionForm 中使用 org.apache.struts.upload.FormFile 類型定義文件字段 導(dǎo)入 struts-1.3.8libcommons-fileupload-1.1.1.jar 和commons-io-1.1.jar 在 Action 的
29、 execute() 方法中使用 InputStream is = file.getInputStream(); 方法得到文件的輸入流 再使用 io 的方法對(duì)文件進(jìn)行上傳操作.高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:struts文件上傳注意事項(xiàng) 在formbean中定義FormFile類型的成員變量接收瀏覽器上傳的文件。只要在Formbean中定義一個(gè)FormFile類型的變量,struts框架會(huì)自動(dòng)把文件上傳的內(nèi)容變成FormFile對(duì)象并注入進(jìn)來,即使沒有上傳文件,對(duì)應(yīng)的FormFile變量也會(huì)有值,只是得到文件名為” 和文件大小為0。 中文文件上傳問題 設(shè)置上傳文件的最大值 注意:如果上傳文件
30、超出了最大值, struts不會(huì)把上傳數(shù)據(jù)封裝到FormFile中,即FormFile為null,程序根據(jù)FormFile是否為空,就可提示用戶文件是否超出大小。 多文件上傳問題 DownloadAction提供下載。高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:DispatchAction 需求:客戶端每個(gè)請(qǐng)求都對(duì)應(yīng)服務(wù)器端一個(gè)Action,會(huì)導(dǎo)致服務(wù)器端action過 護(hù)困難。 在Struts中允許多個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)Action,例如對(duì)Book對(duì)象的增刪改查操作,可以交給一個(gè)Action處理,Action根據(jù)請(qǐng)求地址中附加的參數(shù)信息,再派發(fā)到相應(yīng)的方法,例:增加書籍修改書籍查找書籍刪除書籍高級(jí)軟件人才實(shí)
31、作培訓(xùn)專家!TIP:DispatchAction Struts中的DispatchAction提供了此類功能,它可以根據(jù)請(qǐng)求的參數(shù),調(diào)用不同的方法,但要注意的是開發(fā)人員在聲明參數(shù)對(duì)應(yīng)的方法時(shí),方法的簽名需要與execute() 方法一致。例: 注意Struts中的DispatchAction并不知道用戶的參數(shù)是以什么名稱 提交的,因此若想DispatchAction能正常調(diào)用到用戶自定義的方法, 用戶需要在action的配置文件中通過parameter屬性告訴給struts。 課后看看源碼:分析DispatchAction是如何調(diào)用用戶自定義方法的高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:Dispat
32、chAction 注意事項(xiàng): DispatchAction是Action的子類,它重寫了Action的execute方法, 因此用戶繼承DispatchAction時(shí),若想使用DispatchAction提供 的分發(fā)功能,切記不可覆蓋其execute方法。 DispatchAction位于struts的擴(kuò)展包中,即struts-1.3.8libstruts- extras-1.3.8.jar。高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:MappingDispatchAction MappingDispatchAction是DispatchAction的子類,它提供的功能和DispatchAction功能
33、類似,它也允許多個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)Action, 但它的實(shí)現(xiàn)方式更加靈活,如圖: MappingDispatchAction可以配置到多個(gè)地址上,比DispatchAction更加直觀,并且也可使用不同的formbean,但缺點(diǎn)是使配置文件過于復(fù)雜。 補(bǔ)充知識(shí)點(diǎn):讓struts擁有多個(gè)配置文件。高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:動(dòng)態(tài)FormBean Struts允許開發(fā)人員在配置文件中聲明一個(gè)formbean,而無須手工針對(duì)每一個(gè)表單設(shè)計(jì)一個(gè)Formbean。步驟:1、配置一個(gè)元素, 將type屬性設(shè)置為 DynaActionForm。2、的子元素用來設(shè)置動(dòng)態(tài)ActionForm的屬性。元素的na
34、me屬性指定屬性名, type指定屬性類型3、使用 DynaActionForm 類的 public Object get(String name); 訪問字段的值高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:集成FckEditor FCKeditor是一款非常優(yōu)秀的HTML在線編輯器,功能也可以定制. 也支持多種瀏覽器, 遵循LGPL版權(quán)。最新版本的FCKeditor(2.3.2)同時(shí)兼容絕大多數(shù)主流瀏覽器,包括: IE 5.5及以上版本 (windows), 火狐Firefox 1.0及以上版本, 遨游Mozilla 1.3及以上版本,網(wǎng)景7.0及以上版本。 集成步驟參看fckeditor的例程1、在
35、web工程下新建JS目錄,并拷貝fckeditor到該目錄中。2、導(dǎo)入fckeditor.js文件。3、在表單中加入如下代碼:var oFCKeditor = new FCKeditor( resume ) ; /重要, fckeditor產(chǎn)生的輸入項(xiàng)名稱oFCKeditor.BasePath=$pageContext.request.contextPath /js/fckeditor/; oFCKeditor.Height= 300 ;oFCKeditor.Value=; oFCKeditor.Create();數(shù)據(jù)回顯問題高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:Struts-Validate框架
36、 Validator(驗(yàn)證器)框架是一個(gè) Struts 插件,它支持采用聲明式的方式對(duì)表單進(jìn)行校驗(yàn),而不需要用戶編寫一行Java代碼。 使用 Validator 框架的好處: 更好的可維護(hù)性 校驗(yàn)實(shí)現(xiàn)標(biāo)準(zhǔn)化 正確的實(shí)現(xiàn) 更少的代碼重復(fù) 自動(dòng)客戶端驗(yàn)證高級(jí)軟件人才實(shí)作培訓(xùn)專家!TIP:Struts-Validate框架 解壓Struts的例子struts-cookbook-1.3.8,部署到web服務(wù)器中,查看例子體驗(yàn)。 在工程中集成validate框架,你需要查看org.apache.struts.validator包下的validator-rules.xml文件,它是validate框架的校驗(yàn)規(guī)則文件,這個(gè)文件說明了如何在struts工程中集成validate框架:1、在struts-config.xml文件中配置validate插件。2、創(chuàng)建資源文件,并復(fù)制validate框架工作需要的信息。 3、把struts-cookbook-1.3.8例程自帶的、validate框架的配置文件validation.xml,復(fù)制到當(dāng)前web工程的WEB-INF目錄下。 validate框架環(huán)境搭建好后,就可以采用配置的方式對(duì)formbean的屬性
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國電動(dòng)潔面儀行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國甲基異丁基甲酮行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國生日蠟燭行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國甘草霜行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國特殊群體教育行業(yè)市場深度研究及發(fā)展前景投資可行性分析報(bào)告
- 《護(hù)理值班與交接班制度》考試試題
- 商業(yè)培訓(xùn)的未來之路AR技術(shù)的應(yīng)用與推廣研究
- 培養(yǎng)情緒智力提升學(xué)生綜合能力的關(guān)鍵
- 商業(yè)環(huán)境中技術(shù)風(fēng)險(xiǎn)管理的策略與方法
- 教育數(shù)字化轉(zhuǎn)型的實(shí)踐與探索
- 2025高考全國一卷語文真題
- (高清版)DB13(J)∕T 8556-2023 建設(shè)工程消耗量標(biāo)準(zhǔn)及計(jì)算規(guī)則(園林綠化工程)
- GB/T 1094.1-2013電力變壓器第1部分:總則
- 整形美容??撇v
- DB33T 1199-2020 農(nóng)村生活污水處理設(shè)施建設(shè)和改造技術(shù)規(guī)程
- IPQC培訓(xùn)教材
- SAE-J400-2002-中文版
- 高中物理知識(shí)點(diǎn)(力學(xué)部分)
- 啤酒生產(chǎn)線控制系統(tǒng)設(shè)計(jì)——灌裝部分
- 地埋管道更換施工組織方案
- 兒科常用藥物劑量換算速查表
評(píng)論
0/150
提交評(píng)論