




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)StrutsStruts開發(fā)開發(fā)高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:為什么學習StrutslMVC設(shè)計模式設(shè)計模式l基于基于MVC設(shè)計模式的設(shè)計模式的Servlet+Jsp+JavaBean的的WEB應(yīng)應(yīng)用程序的工作流程。用程序的工作流程。l基于基于Strus的的web應(yīng)用程序的工作流程。應(yīng)用程序的工作流程。l為什么要用為什么要用strus,它給我們帶來了什么?,它給我們帶來了什么?高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:
2、Struts開發(fā)快速入門l用戶注冊用戶注冊(使用使用struts完成完成),步驟:,步驟:1、編寫、編寫register.jsp表單頁面,表單提交表單頁面,表單提交RegisterUser.do處理。處理。2、在、在web工程中導入工程中導入struts開發(fā)包,在開發(fā)包,在web.xml文件中配置文件中配置struts框架提供的框架提供的ActionServlet,使其處理所有以,使其處理所有以.do為結(jié)尾的請求。為結(jié)尾的請求。3、在、在/WEB-INF/目錄下編寫目錄下編寫ActionServlet工作時使用的配置文件工作時使用的配置文件struts-config.xml,配置當,配置當Ac
3、tionServlet收到收到RegisterUser.do請求時,調(diào)用一個名稱為請求時,調(diào)用一個名稱為RegisterUse的的Action處理。處理。4、編寫、編寫ActionRegisterUse,在其,在其excute方法內(nèi)編碼,采用方法內(nèi)編碼,采用傳統(tǒng)方式獲取數(shù)據(jù),并調(diào)用傳統(tǒng)方式獲取數(shù)據(jù),并調(diào)用service完成用戶注冊,然后轉(zhuǎn)發(fā)給完成用戶注冊,然后轉(zhuǎn)發(fā)給相應(yīng)的相應(yīng)的jsp頁面。頁面。高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:讓struts自動封裝請求數(shù)據(jù)lStruts的的ActionServlet的功能非常強大,我們只需要在它的配置文的功
4、能非常強大,我們只需要在它的配置文件(件( struts-config.xml文件)中配置一下,它就可以自動把請求數(shù)文件)中配置一下,它就可以自動把請求數(shù)據(jù)封裝到用戶指定的據(jù)封裝到用戶指定的formbean中。并且,中。并且,struts在調(diào)用開發(fā)人員編在調(diào)用開發(fā)人員編寫的寫的action時,會把封裝了數(shù)據(jù)的時,會把封裝了數(shù)據(jù)的formbean傳給傳給action。這樣,可。這樣,可以省去開發(fā)人員在以省去開發(fā)人員在action中手工獲取客戶端提交的數(shù)據(jù),減輕編碼中手工獲取客戶端提交的數(shù)據(jù),減輕編碼工作量。工作量。 l注意:用于封裝數(shù)據(jù)的formbean要繼承struts的ActionForm。
5、高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:讓struts轉(zhuǎn)發(fā)請求l用戶在編寫用戶在編寫action時,無須在時,無須在action內(nèi)手工編碼進行請求轉(zhuǎn)發(fā)。內(nèi)手工編碼進行請求轉(zhuǎn)發(fā)。struts的的ActionServlet在調(diào)用在調(diào)用action.execute方法時,可以根據(jù)它的返回值,決定方法時,可以根據(jù)它的返回值,決定調(diào)用哪個調(diào)用哪個JSP頁面響應(yīng)用戶請求。頁面響應(yīng)用戶請求。lAction.execute方法的返回值方法的返回值A(chǔ)ctionForward代表一個轉(zhuǎn)發(fā)對象代表一個轉(zhuǎn)發(fā)對象, struts的的ActionServlet在收到在收到Ac
6、tion.execute方法的返回值方法的返回值A(chǔ)ctionForward后,會取出該對象封裝的轉(zhuǎn)發(fā)地址,進行請求轉(zhuǎn)發(fā)。后,會取出該對象封裝的轉(zhuǎn)發(fā)地址,進行請求轉(zhuǎn)發(fā)。ActionActionServletActionForwardJSP高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:讓struts根據(jù)配置實現(xiàn)轉(zhuǎn)發(fā)l在在struts的配置文件的配置文件struts-config.xml文件中,可以配置文件中,可以配置forward標標簽,它用于封裝一個轉(zhuǎn)發(fā)地址。如:簽,它用于封裝一個轉(zhuǎn)發(fā)地址。如:lStruts的的ActionServlet在調(diào)用在調(diào)用act
7、ion時,會把時,會把action的配置信息封的配置信息封裝一個裝一個ActionMapping對象中,并傳遞給對象中,并傳遞給action。l因此,開發(fā)人員在編寫因此,開發(fā)人員在編寫action時,無須硬編碼指定轉(zhuǎn)發(fā)地址,可以時,無須硬編碼指定轉(zhuǎn)發(fā)地址,可以通過通過ActionMapping對象,獲得配置文件中配置的轉(zhuǎn)發(fā)地址,從而對象,獲得配置文件中配置的轉(zhuǎn)發(fā)地址,從而實現(xiàn)轉(zhuǎn)發(fā)。如下圖:實現(xiàn)轉(zhuǎn)發(fā)。如下圖:高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:讓struts根據(jù)配置實現(xiàn)轉(zhuǎn)發(fā)ActionServletactionActionMappingStrut
8、s-config.xml請求封裝配置信息*.doactionServletStruts-config.xmlactionformbeamactionMappingactionforwardjspWeb服務(wù)器Web.xmlActionServletActionActionFrom1、web服務(wù)器收到請求后,把請求派發(fā)給struts的servlet進行處理。2、ActionServlet讀取配置文件,根據(jù)請求的path創(chuàng)建相應(yīng)的action實例對象,3、根據(jù)配置文件創(chuàng)建封裝請求參數(shù)的ActionForm對象。4、創(chuàng)建代表當前Action配置信息的ActionMapping對象。5、調(diào)用Action
9、實例的execute方法,并把ActionForm和ActionMapping對象傳遞進去。6、ActionServlet根據(jù)execute方法的返回值A(chǔ)ctionForward封裝的轉(zhuǎn)發(fā)信息,把請求轉(zhuǎn)發(fā)到相應(yīng)的JSP頁面顯示。Struts-config.xmlActionMappingActionForwardActionForwardJSP高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:讀struts源碼,分析struts工作流程lStruts的控制器組件主要包括(課后一定讀源碼)ActionServlet對象:Struts 的核心類RequestPr
10、ocessor對象:由ActionServlet調(diào)用,負責處理用戶請求Action對象:用戶自己編寫的類lStruts處理請求的流程:當 ActionServlet 接收到 HTTP 請求后,在 doGet 或 doPost 方法中都會調(diào)用process()方法處理請求在 ActionServlet 的 process() 方法中一旦選擇了正確的子應(yīng)用模塊,就會調(diào)用RequestProcessor實例的process()方法來處理請求。在ActionServlet調(diào)用這個方法時,會把當前的request和response對象傳給它RequestProcessor實例的process()方法調(diào)用
11、ProcessActionCreate()方法,先判斷是否在 Action 緩存中存在Action實例,如果不存在,就創(chuàng)建一個Action實例,把它保存在 Action 緩存中RequestProcessor實例的process()方法調(diào)用Action實例的execute()方法高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:Struts配置文件常用屬性 l指定action處理的地址l指定處理請求的Action的完整類名l指定使用哪個formbean封裝請求參數(shù)l指定把formbean存放到哪個域?qū)ο笾?默認sessionl指定formbean存儲的key
12、,不設(shè)默認為name屬性的值l指定把formbean的數(shù)據(jù)是由哪個頁面提供的,提供此屬性的目的在于formbean校驗失敗時,程序方便跳回formbean的輸入頁面,顯示校驗失敗信息。l指定收到請求時,跳轉(zhuǎn)到相應(yīng)的jsp頁面,如果配置了此屬性,則action將不再被調(diào)用。相當于ServletUIl指定收到請求時,進行頁面包含。l如果action把該屬性設(shè)置為true,則它可以處理客戶機發(fā)出的所有無效的.do請求,默認值為false,用于處理錯誤頁面l配置action參數(shù),調(diào)用actioMapping.getParameter方法可以獲得這里配置的參數(shù)。l標簽和所有的配置信息使用哪個對象封裝,默
13、認值為ActionMapping對象。l請求參數(shù)封裝到formbean中后,是否讓struts自動調(diào)用formbean的validate方法進行數(shù)據(jù)校驗。默認true高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:補充知識點l嚴格按照嚴格按照MVC設(shè)計模式改進注冊用例,需求:設(shè)計模式改進注冊用例,需求:Web應(yīng)用程序若要嚴格按照應(yīng)用程序若要嚴格按照MVC設(shè)計模式,所有客戶端的請求都需要發(fā)設(shè)計模式,所有客戶端的請求都需要發(fā)送給送給servlet處理,處理,servlet再轉(zhuǎn)發(fā)到再轉(zhuǎn)發(fā)到JSP顯示。顯示。因此,對于上述案例中的因此,對于上述案例中的regist
14、er.jsp頁面,也要禁止用戶直接訪問,而頁面,也要禁止用戶直接訪問,而應(yīng)把它放在應(yīng)把它放在web-inf目錄中保護起來,由用戶訪問目錄中保護起來,由用戶訪問servlet后,后,servlet再再轉(zhuǎn)發(fā)到轉(zhuǎn)發(fā)到register.jsp頁面上。頁面上。l傳統(tǒng)做法和傳統(tǒng)做法和Struts的做法。的做法。l在首頁上掛上注冊功能在首頁上掛上注冊功能l標簽的好處:也有壞處使用不用關(guān)心web應(yīng)用程序的名稱??梢宰詣痈郊觠sessionid參數(shù)進行url重寫??梢詫?shù)信息進行url編碼。l標簽常用屬性:paramID、paramName、name、property。高級軟件人才實作培訓專家高級軟件人才實作
15、培訓專家! !傳智博客struts開發(fā)TIP:補充知識點l標簽示例:高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:借助struts完成表單校驗l表單數(shù)據(jù)提交后,在服務(wù)器端編程校驗數(shù)據(jù)合法性,是一個很常表單數(shù)據(jù)提交后,在服務(wù)器端編程校驗數(shù)據(jù)合法性,是一個很常見的需求。所以見的需求。所以struts的的ActionServlet在把數(shù)據(jù)封裝到在把數(shù)據(jù)封裝到formbean后,會自動調(diào)用后,會自動調(diào)用formbean的的validate方法對數(shù)據(jù)進行方法對數(shù)據(jù)進行校驗,校驗,并根據(jù)并根據(jù)validate方法的返回值,決定轉(zhuǎn)發(fā)到哪個方法的返回值,決定轉(zhuǎn)發(fā)到哪個j
16、sp頁面處頁面處理。理。lStuts的這種處理方式,可以讓開發(fā)人員少死點腦細胞,開發(fā)人的這種處理方式,可以讓開發(fā)人員少死點腦細胞,開發(fā)人員只需要在員只需要在validate方法中寫代碼進行數(shù)據(jù)校驗就方法中寫代碼進行數(shù)據(jù)校驗就OK了,調(diào)用方了,調(diào)用方法的事由法的事由struts的的actionServlet去做了,并且,調(diào)用方法完后,去做了,并且,調(diào)用方法完后,如果有錯誤,跳轉(zhuǎn)的事,也由如果有錯誤,跳轉(zhuǎn)的事,也由struts根據(jù)配置文件做了。根據(jù)配置文件做了。l注意:若想注意:若想struts的的actionServlet把數(shù)據(jù)封裝到把數(shù)據(jù)封裝到formbean后,后,調(diào)用其調(diào)用其validat
17、e方法,需要在方法,需要在struts-config.xml文件中把文件中把action的的validate屬性設(shè)置為屬性設(shè)置為true,默認值為默認值為true。高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:借助struts完成表單校驗lStruts調(diào)用調(diào)用formbean.validate方法后,其規(guī)則為:方法后,其規(guī)則為:如果如果validate返回的返回的ActionErrors對象為空或?qū)ο鬄榭栈騨ull,則,則Struts認為表單驗證通過,認為表單驗證通過,struts進而繼續(xù)調(diào)用進而繼續(xù)調(diào)用Action處理請求。處理請求。如果如果valid
18、ate返回的返回的ActionErrors不為空,并且封裝了數(shù)據(jù),則認為校驗失敗,不為空,并且封裝了數(shù)據(jù),則認為校驗失敗,Struts將自動跳轉(zhuǎn)回表單輸入頁面。(將自動跳轉(zhuǎn)回表單輸入頁面。(input屬性指定)屬性指定)l因此用戶若想校驗失敗,只需要創(chuàng)建因此用戶若想校驗失敗,只需要創(chuàng)建ActionErrors對象,并調(diào)用其方法:對象,并調(diào)用其方法:ActionErrors.add(String key,ActionMessage message)向向ActionErrors對象中加入相應(yīng)的錯誤消息,返回給對象中加入相應(yīng)的錯誤消息,返回給struts即可。示例代碼:即可。示例代碼:高級軟件人才實
19、作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:在JSP中顯示校驗信息lStruts在收到在收到Formbean的返回值的返回值A(chǔ)ctionErrors后,會將其存儲到后,會將其存儲到request域中,域中,進而帶給表單頁面,以便開發(fā)人員在表單頁面中顯進而帶給表單頁面,以便開發(fā)人員在表單頁面中顯示校驗失敗的錯誤信息(這點建議讀讀示校驗失敗的錯誤信息(這點建議讀讀struts的源碼)。的源碼)。l在在JSP頁面中開發(fā)人員可以編碼顯示錯誤信息:頁面中開發(fā)人員可以編碼顯示錯誤信息:l注意上面的代碼取注意上面的代碼取request的的errors對象時為什么用對象時為什么用“
20、org.apache.struts.action.ERROR”,這個值從何來?這個值從何來?l顯示消息時有需要在顯示消息時有需要在struts-config.xml文件中配置一個資源文件文件中配置一個資源文件高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:使用顯示校驗消息l在在JSP頁面中手工編碼獲取頁面中手工編碼獲取errors對象中保存的數(shù)據(jù)很麻煩,因此對象中保存的數(shù)據(jù)很麻煩,因此Struts編寫了編寫了標簽,它用于封裝標簽,它用于封裝JSP頁面中用于獲取消息的頁面中用于獲取消息的java代碼。代碼。l用戶使用用戶使用標簽可以很輕松獲取到標簽可以很輕松
21、獲取到errors中保存的校驗信息,示例。中保存的校驗信息,示例。l標簽也可以以標簽也可以以ActionMessage中封裝了中封裝了key為關(guān)鍵字,從資源文件為關(guān)鍵字,從資源文件中檢索數(shù)據(jù)予以顯示,如下所示:中檢索數(shù)據(jù)予以顯示,如下所示:l取消false,html:errors標簽在顯示ActionMessage封裝的消息時,將以ActionMessage的key為關(guān)鍵字從資源文件中檢索數(shù)據(jù)顯示l看看看看標簽源碼標簽源碼,看,看errors標簽標簽是如何以關(guān)鍵字檢索資源文件數(shù)據(jù)的。是如何以關(guān)鍵字檢索資源文件數(shù)據(jù)的。l注意:注意:errors標簽工作時需要資源文件。標簽工作時需要資源文件。高級
22、軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:ActionMessagelActionMessage封裝消息的方式很靈活,后面兩個構(gòu)造函數(shù)中的封裝消息的方式很靈活,后面兩個構(gòu)造函數(shù)中的value參數(shù),用于替換消息文本中的占位符:參數(shù),用于替換消息文本中的占位符:對應(yīng)資源文件內(nèi)容:對應(yīng)資源文件內(nèi)容:errors.required=0不能為空不能為空高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:練習l完成對完成對Register.jsp頁面的完整校驗頁面的完整校驗高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博
23、客struts開發(fā)TIP:練習lprivate String username;lprivate String password;lprivate String password2; lprivate String gender;lprivate String birthday;lprivate String income;lprivate String city;lprivate String preference;lprivate String email;高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:練習l注意事項:注意事項:日期校驗不要采用日期校
24、驗不要采用DateFormat,而應(yīng)采用,而應(yīng)采用:DateLocaleConverter dlc = new DateLocaleConverter();Date d = (Date) dlc.convert(this.birthday,yyyy-mm-dd);對于頁面中的數(shù)據(jù),可采用枚舉類表示,對枚舉值的校驗可采用對于頁面中的數(shù)據(jù),可采用枚舉類表示,對枚舉值的校驗可采用如下類似方式:如下類似方式:Gender.valueOf(this.gender);高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:使用Struts標簽完成表單數(shù)據(jù)回顯lStruts提供
25、了很多表單相關(guān)的自定義標簽,如:提供了很多表單相關(guān)的自定義標簽,如:l這些標簽除用于生成相應(yīng)的這些標簽除用于生成相應(yīng)的html標簽外,最大的好處在于它在產(chǎn)生標簽外,最大的好處在于它在產(chǎn)生html標簽時,會自動檢索相應(yīng)標簽時,會自動檢索相應(yīng)formbean的數(shù)據(jù)予以顯示,這樣,當?shù)臄?shù)據(jù)予以顯示,這樣,當表單校驗失敗時,表單數(shù)據(jù)的回顯表單校驗失敗時,表單數(shù)據(jù)的回顯struts幫我們干了,開發(fā)人員就不幫我們干了,開發(fā)人員就不需要再編碼去取了。需要再編碼去取了。高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:使用Struts標簽完成數(shù)據(jù)回顯l使用使用Struts的
26、的html標簽完成數(shù)據(jù)回顯時注意的問題:標簽完成數(shù)據(jù)回顯時注意的問題:html標簽回顯數(shù)據(jù)時,會以標簽回顯數(shù)據(jù)時,會以org.apache.struts.taglib.html.BEAN為關(guān)鍵字,從為關(guān)鍵字,從各個域中查找各個域中查找bean,找不到則拋空指針異常。所以使用,找不到則拋空指針異常。所以使用html標簽時域中須有以標簽時域中須有以org.apache.struts.taglib.html.BEAN為關(guān)鍵字的對象。為關(guān)鍵字的對象。這個工作可以交給這個工作可以交給html:form標簽做,標簽做,html:form標簽在執(zhí)行時,會查找域中已標簽在執(zhí)行時,會查找域中已有的有的formb
27、ean,并以,并以org.apache.struts.taglib.html.BEAN為關(guān)鍵字把為關(guān)鍵字把formbean存在域中。如果存在域中。如果html:form標簽在域中找不到標簽在域中找不到formbean,則,則html:form標簽會實例化一個空標簽會實例化一個空bean,然后存儲到域中。因此,然后存儲到域中。因此,為了在頁面中使為了在頁面中使用用struts的的html標簽回顯數(shù)據(jù),這些標簽需要配合標簽回顯數(shù)據(jù),這些標簽需要配合html:form標簽使用標簽使用。(查看。(查看html:form標簽的源文件可以看到這點)。標簽的源文件可以看到這點)。對于復選框中的數(shù)據(jù),對于復選
28、框中的數(shù)據(jù),Html:checkbox標簽不能完成數(shù)據(jù)回顯,復選框的數(shù)據(jù)回標簽不能完成數(shù)據(jù)回顯,復選框的數(shù)據(jù)回顯需要使用顯需要使用html:multibox。Struts中的中的html:password標簽也會回顯數(shù)據(jù),如果不想標簽也會回顯數(shù)據(jù),如果不想password回顯,需要回顯,需要把其把其redisplay屬性置為屬性置為false。補充:補充:formbean的的reset方法方法html產(chǎn)生一個標簽。也包括來自于用戶會話中的 language 屬性form定義一個表單。Action 和 focus 屬性是最有用的屬性checkbox產(chǎn)生一個檢查框字段file產(chǎn)生一個文件選擇輸入字
29、段hidden產(chǎn)生一個隱藏字段option產(chǎn)生一個選擇項options產(chǎn)生一個選擇項列表password產(chǎn)生一個口令輸入字段radio產(chǎn)生一個單選輸入字段select產(chǎn)生一個選擇元素text產(chǎn)生一個文本輸入字段textarea產(chǎn)生一個 html 文本區(qū)域元素image產(chǎn)生一個圖像輸入字段button產(chǎn)生一個按鈕輸入字段cancel產(chǎn)生一個取消按鈕submit產(chǎn)生一個提交按鈕reset產(chǎn)生一個重新設(shè)定按鈕errors顯示錯誤消息img產(chǎn)生一個 html img 標簽高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:請求數(shù)據(jù)的中文亂碼問題l解決方案:解決方案:過
30、濾器過濾器重寫重寫ActonServlet重寫重寫RequestProcessor高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:防止表單重復提交l什么情況下會發(fā)生表單重復提交刷新網(wǎng)絡(luò)延時,多次點擊后退、前進l防止表單重復提交的原理表單應(yīng)由一個程序產(chǎn)生,程序在產(chǎn)生表單時:生成一個隨機值,并附在表單的一個隱藏輸入項中。把隨機值存儲在session域中。表單在提交時,服務(wù)器程序客戶機帶過來的隨機值和session域中保存的隨機值是否一致,如果一致則允許提交,否則認為是重復提交。高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP
31、:使用struts防止表單重復提交lStruts的標簽除了可以生成標簽、協(xié)助其它html標簽完成數(shù)據(jù)回顯外,它還提供了防止表單重復提交的功能。標簽在生成表單時,會檢查session域中是否存在token,如果存在則自動使用token生成隱藏字段。Struts為方便開發(fā)人員生成token,在action中提供了saveToken方法,調(diào)用這個方法就可以在session域中保存一個token。Struts為方便開發(fā)人員在action中校驗用戶是否為重復提交,因此它在action中也提供了isTokenValid方法,該方法會自動判斷表單是否為重復提交。l防表單重復提交在struts中的做法:1、用
32、戶先訪問Action,Action中調(diào)用saveToken方法,然后派發(fā)到表單頁面。2、在表單頁面中使用標簽, 標簽會自動為表單生成一個帶隨機值的隱藏字段。3、在表單提交的Action中調(diào)用isTokenValid方法,就可以判斷出表單是否為重復提交,從而可以根據(jù)情況決定如何處理。 isTokenValid方法返回true,則為允許提交,處理提交后,要記得調(diào)用reset清除token。高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:使用beanUtils轉(zhuǎn)換表單數(shù)據(jù)l表單校驗通過后,需把表單校驗通過后,需把formbean的的數(shù)據(jù)封裝到實體數(shù)據(jù)封裝到實體b
33、ean中中,此時應(yīng)采用,此時應(yīng)采用beanUtils框架,并注冊相應(yīng)的框架,并注冊相應(yīng)的轉(zhuǎn)換器。轉(zhuǎn)換器。l為避免在多個為避免在多個Action中重復注冊轉(zhuǎn)換器,可采用中重復注冊轉(zhuǎn)換器,可采用listener在在web應(yīng)用啟動時就注冊轉(zhuǎn)換器應(yīng)用啟動時就注冊轉(zhuǎn)換器。高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:表單數(shù)據(jù)業(yè)務(wù)邏輯校驗l表單數(shù)據(jù)校驗通過后,在表單數(shù)據(jù)校驗通過后,在action中可能會對數(shù)據(jù)進行業(yè)務(wù)邏輯驗證,中可能會對數(shù)據(jù)進行業(yè)務(wù)邏輯驗證,例如例如檢查當前注冊用戶是否已經(jīng)被別人注冊過了,這種驗證稱為業(yè)檢查當前注冊用戶是否已經(jīng)被別人注冊過了,這種驗證
34、稱為業(yè)務(wù)邏輯驗證。務(wù)邏輯驗證。l業(yè)務(wù)邏輯驗證如果失敗,其相應(yīng)的信息也應(yīng)顯示在頁面上。業(yè)務(wù)邏輯驗證如果失敗,其相應(yīng)的信息也應(yīng)顯示在頁面上。高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:表單數(shù)據(jù)業(yè)務(wù)邏輯校驗l很多網(wǎng)站也會提供如下圖所示的驗證方式:很多網(wǎng)站也會提供如下圖所示的驗證方式:高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:使用struts修改數(shù)據(jù)l程序取出數(shù)據(jù)庫中的數(shù)據(jù),顯示在一個表單頁面上,以便于用戶程序取出數(shù)據(jù)庫中的數(shù)據(jù),顯示在一個表單頁面上,以便于用戶修改數(shù)據(jù),這也是開發(fā)中經(jīng)常需要實現(xiàn)的功能。實現(xiàn)此功能需要
35、修改數(shù)據(jù),這也是開發(fā)中經(jīng)常需要實現(xiàn)的功能。實現(xiàn)此功能需要注意的問題:注意的問題:為回顯數(shù)據(jù)方便,通常在頁面中都會使用為回顯數(shù)據(jù)方便,通常在頁面中都會使用struts的的html標簽。標簽。而程序調(diào)用而程序調(diào)用dao取出的數(shù)據(jù)通常放在實體取出的數(shù)據(jù)通常放在實體bean中,要想在頁面中使用中,要想在頁面中使用html標簽取出數(shù)據(jù)顯示,此時應(yīng)把實體標簽取出數(shù)據(jù)顯示,此時應(yīng)把實體bean的數(shù)據(jù)又轉(zhuǎn)換到表單的數(shù)據(jù)又轉(zhuǎn)換到表單bean中,對于復雜類型的數(shù)據(jù),此時就需要在中,對于復雜類型的數(shù)據(jù),此時就需要在beanutils框架中注冊框架中注冊數(shù)據(jù)的雙向轉(zhuǎn)換器了。數(shù)據(jù)的雙向轉(zhuǎn)換器了。數(shù)組類型是比較特殊的類型
36、,進行類型判斷是可以采用如下方式:數(shù)組類型是比較特殊的類型,進行類型判斷是可以采用如下方式:clazz.equals(Object.class)獲取到的獲取到的 Bean為在頁面中顯示,還需要把為在頁面中顯示,還需要把bean存放在存放在request域中,域中,存放的關(guān)鍵字可以使用存放的關(guān)鍵字可以使用action上配置的上配置的formbean的名稱。的名稱。注意:在注意:在action如果向如果向request域存域存formbean,這個,這個formbean想在想在jsp頁面中顯示,配置文件中的頁面中顯示,配置文件中的scope要配成要配成request,不然頁面會先,不然頁面會先從從
37、 session找,而找,而session中有一個空中有一個空bean。高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:struts文件上傳l文件的上傳操作文件的上傳操作:JSP 頁面頁面: 表單使用表單使用 POST 提交方式提交方式, 添加添加 enctype=multipart/form-data 屬性屬性ActionForm 中使用中使用 org.apache.struts.upload.FormFile 類類型定義文件字段型定義文件字段導入導入 struts-1.3.8libcommons- 和和 commons-io-1.1.jar在在 Act
38、ion 的的 execute() 方法中使用方法中使用 InputStream is = (); 方法方法得到得到文件的輸入流文件的輸入流再使用再使用 io 的方法對文件進行上傳操作的方法對文件進行上傳操作.高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:struts文件上傳注意事項l在formbean中定義FormFile類型的成員變量接收瀏覽器上傳的文件。只要在Formbean中定義一個FormFile類型的變量,struts框架會自動把文件上傳的內(nèi)容變成FormFile對象并注入進來,即使沒有上傳文件,對應(yīng)的FormFile變量也會有值,只是得到文件
39、名為”和文件大小為0。l中文文件上傳問題 過濾器解決 l設(shè)置上傳文件的最大值:在配置文件里面配置注意:如果上傳文件超出了最大值, struts不會把上傳數(shù)據(jù)封裝到FormFile中,即c為null,程序根據(jù)FormFile是否為空,就可提示用戶文件是否超出大小。l多文件上傳問題lDownloadAction提供下載。高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:DispatchActionl需求:客戶端每個請求都對應(yīng)服務(wù)器端一個Action,會導致服務(wù)器端action過多,維護困難。l在Struts中允許多個請求對應(yīng)一個Action,例如對Book對象的
40、增刪改查操作,可以交給一個Action處理,Action根據(jù)請求地址中附加的參數(shù)信息,再派發(fā)到相應(yīng)的方法,例:增加書籍 修改書籍 查找書籍 刪除書籍高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:DispatchActionlStruts中的DispatchAction提供了此類功能,它可以根據(jù)請求的參數(shù),調(diào)用不同的方法,但要注意的是開發(fā)人員在聲明參數(shù)對應(yīng)的方法時,方法的簽名需要與execute() 方法一致。例:l注意Struts中的DispatchAction并不知道用戶的參數(shù)是以什么名稱提交的,因此若想DispatchAction能正常調(diào)用到用戶自定
41、義的方法,用戶需要在action的配置文件中通過parameter屬性告訴給struts。l課后看看源碼:分析課后看看源碼:分析DispatchAction是如何調(diào)用用戶自定義方法的是如何調(diào)用用戶自定義方法的高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:DispatchActionl注意事項:lDispatchAction是Action的子類,它重寫了Action的execute方法,因此用戶繼承DispatchAction時,若想使用DispatchAction提供的分發(fā)功能,切記不可覆蓋其execute方法。lDispatchAction位于stru
42、ts的擴展包中,即struts-1.3.8libstruts-extras-1.3.8.jar。高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:MappingDispatchActionlMappingDispatchAction是DispatchAction的子類,它提供的功能和DispatchAction功能類似,它也允許多個請求對應(yīng)一個Action,但它的實現(xiàn)方式更加靈活,如圖:lMappingDispatchAction可以配置到多個地址上,比DispatchAction更加直觀,并且也可使用不同的formbean,但缺點是使配置文件過于復雜。l補
43、充知識點:讓struts擁有多個配置文件。高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:動態(tài)FormBeanlStruts允許開發(fā)人員在配置文件中聲明一個formbean,而無須手工針對每一個表單設(shè)計一個Formbean。步驟:1、配置一個元素, 將type屬性設(shè)置為 DynaActionForm。2、的子元素用來設(shè)置動態(tài)ActionForm的屬性。 元素的name屬性指定屬性名, type指定屬性類型3、使用 DynaActionForm 類的 public Object get(String name); 訪問字段的值高級軟件人才實作培訓專家高級軟件
44、人才實作培訓專家! !傳智博客struts開發(fā)TIP:集成FckEditorlFCKeditor是一款非常優(yōu)秀的HTML在線編輯器,功能也可以定制. 也支持多種瀏覽器, 遵循LGPL版權(quán)。最新版本的FCKeditor(2.3.2)同時兼容絕大多數(shù)主流瀏覽器,包括: IE 5.5及以上版本 (windows), 火狐Firefox 1.0及以上版本, 遨游Mozilla 1.3及以上版本,網(wǎng)景7.0及以上版本。l集成步驟參看fckeditor的例程1、在web工程下新建JS目錄,并拷貝fckeditor到該目錄中。2、導入fckeditor.js文件。3、在表單表單中加入如下代碼:var oFC
45、Keditor = new FCKeditor( resume ) ; /重要, fckeditor產(chǎn)生的輸入項名稱oFCKeditor.BasePath=$pageContext.request.contextPath /js/fckeditor/;oFCKeditor.Height= 300 ;oFCKeditor.Value=;oFCKeditor.Create();l數(shù)據(jù)回顯問題高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:Struts-Validate框架lValidator(驗證器)框架是一個 Struts 插件,它支持采用聲明式的方式對表單
46、進行校驗,而不需要用戶編寫一行Java代碼。集成validate框架 ,Struts那哥們他幫你校驗了表單,而且客戶端也校驗,比如javascript校驗他也幫你校驗了使用 Validator 框架的好處:更好的可維護性校驗實現(xiàn)標準化正確的實現(xiàn)更少的代碼重復自動客戶端驗證高級軟件人才實作培訓專家高級軟件人才實作培訓專家! !傳智博客struts開發(fā)TIP:Struts-Validate框架l解壓Struts的例子struts-cookbook-1.3.8,部署到web服務(wù)器中,查看例子體驗。l在工程中集成validate框架,你需要查看org.apache.struts.validator包下的validator-rules.xml文件,它是validate框架的校驗規(guī)則文件,這個文件說明了如何在struts工程中集成validate框架:1、在struts-config.xml文件中配置validate插件。2、創(chuàng)建資源文件,并復制validate框架工作需要的信息。3、把struts-cookbook-1.3.8例程自帶的、validate框架的配置文件validation.xml,復制到當前web工程的WEB-INF目錄下。lvalidate框架環(huán)境搭建好后,就可以采用配置的方式對formbean的屬性進行校驗,但需要注意:1、formbean
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 運行庫改造施工方案
- 高速公路標志桿施工方案
- 化糞池混凝土施工方案
- 平遠縣改門改窗施工方案
- 海南靚綠生物科技有限公司年產(chǎn)建設(shè)項目1000噸水溶肥建設(shè)項目環(huán)評報告表
- 2025年鉆孔應(yīng)變儀項目合作計劃書
- 置換強夯的施工方案
- 園路及鋪裝施工方案
- 山西造浪游泳池施工方案
- 寧夏工程電纜線槽施工方案
- 植物學基礎(chǔ)智慧樹知到答案2024年哈爾濱師范大學
- 小數(shù)除法100道豎式計算題及答案
- 2024CSCO胃腸間質(zhì)瘤診療指南解讀
- 《國有企業(yè)管理人員處分條例》重點解讀
- DL-T5159-2012電力工程物探技術(shù)規(guī)程
- 高血壓中醫(yī)健康教育
- 新疆油田分布圖
- 2024年上饒職業(yè)技術(shù)學院單招職業(yè)適應(yīng)性測試題庫及答案1套
- 低氧血癥的護理
- 莫塔全科醫(yī)學安全診斷策略
- 第1課 古代亞非(教學課件)-【中職專用】《世界歷史》同步課堂(同課異構(gòu))(高教版2023?基礎(chǔ)模塊)
評論
0/150
提交評論