版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、商品內(nèi)容:1 .分析 helloapp 應(yīng)用的需求接受用戶輸入的姓名,然后返回字符串hello! 。如果用戶沒有輸入姓名就提交表單,將返回出錯(cuò)信息,提示用戶首先輸入姓名。如果用戶輸入姓名為“monster”,將返回出錯(cuò)信息,拒絕向 monster打招呼。2 .運(yùn)用 struts 框架 模型包括一個(gè)javabean組件personbean ,它有一個(gè)username 屬性,代表用戶輸入的名字。它提供了 get/set 方法,分別用于讀取和設(shè)置username 屬性,它還提供一個(gè) save() 方法, 負(fù)責(zé)把 username 屬性保存到持久化存儲(chǔ)系統(tǒng)中, 如數(shù)據(jù)庫(kù)或文件系統(tǒng)。對(duì)于更為復(fù)雜的 we
2、b應(yīng)用,javabean組件可以作為ej web服務(wù)的前端組件。 視圖包括一個(gè)jsp文件hello.jsp ,它提供用戶界面,接受用戶輸入的姓名。視圖還包括一個(gè)actionformbean ,它用來存放表單數(shù)據(jù),并進(jìn)行表單驗(yàn)證,如果用戶沒有輸入姓名就提交表單,將返回出錯(cuò)信息。 控制器包括一個(gè)action類helloaction ,它完成三項(xiàng)任務(wù):1 .進(jìn)行業(yè)務(wù)邏輯驗(yàn)證,如果用戶輸入的姓名為 monster, 將返回錯(cuò)誤消息; 2 調(diào)用模型組件personbean 的save() 方法,保存用戶輸入的名字; 3 決定將合適的視圖組件返回給用戶。除了創(chuàng)建模型、視圖和控制器組件,還需要?jiǎng)?chuàng)建strut
3、s的配置文件struts-config.xml ,它可以把這些組件組裝起來,使它們協(xié)調(diào)工作。此外,還需要?jiǎng)?chuàng)建整個(gè) web 應(yīng)用的配置文件web.xml 。3.創(chuàng)建視圖組件本例中,視圖包括兩個(gè)組件: 一個(gè)sp 文件:hello.jsp 一下ctionformbean: helloformbean(helloform.java) 。其中, jsp 中有代碼 當(dāng)用戶提交了 html 表單后, struts 框架將自動(dòng)把表單數(shù)據(jù)組裝到 actionformbean中。 actionformbean 中的屬性和html 表單中的字段一一對(duì)應(yīng)。 actionformbean還提供了數(shù)據(jù)驗(yàn)證方法,以及把屬性
4、重新設(shè)置為默認(rèn)值的方法。struts 框架中定義的actionform 類是抽象的, 必須在應(yīng)用中創(chuàng)建它的子類, 來存放具體的 html 表單數(shù)據(jù)。helloform.java 中有兩個(gè)特殊的方法:validate。:用于表單驗(yàn)證。reset():把屬性重新設(shè)置為默認(rèn)值。本例中的資源文件是perties,用來存放數(shù)據(jù)信息。4.創(chuàng)建控制器組件: helloaction.java控制器組件包括actionservlet 類和 action 類。 actionservlet 類是 struts 框架自帶的,它是整個(gè) struts 框架的控制樞紐,通常不需要擴(kuò)展。 str
5、uts 框架提供了可供擴(kuò)展的action 類,它用來處理特定的 http 請(qǐng)求。所有的action 類都是 org.apache.struts.action.action 的子類, action 子類應(yīng)該覆蓋父類的execute() 方法。helloaction.java 的代碼如下:packagehello;importjavax.servlet.http.httpservletrequest;importjavax.servlet.http.httpservletresponse;importorg.apache.struts.action.action;importorg.apache.
6、struts.action.actionform;importorg.apache.struts.action.actionforward;importorg.apache.struts.action.actionmapping;importorg.apache.struts.action.actionmessage;importorg.apache.struts.action.actionmessages;importorg.apache.struts.util.messageresources;importcom.yourcompany.struts.personbean;importco
7、m.yourcompany.struts.form.helloform;/*struts.actionpath=/helloname=helloforminput=/form/hello.j spscope=requestvalidate=true*/publicfinalclasshelloactionextendsaction/*methodexecute*parammapping:actionmapping 包含了這個(gè)action 的配置信息和 struts-config.xml 文件中的 元素對(duì)應(yīng)。*paramform:actionform 包含了用戶的表單數(shù)據(jù),當(dāng) struts 框架
8、調(diào)用 execute() 方法時(shí),actionform 中的數(shù)據(jù)*已經(jīng)通過了表單驗(yàn)證。*paramrequest:httpservletrequest 當(dāng)前的 http 請(qǐng)求對(duì)象*paramresponse:httpservletresponse 當(dāng)前的 http 響應(yīng)對(duì)象*returnactionforward*/publicactionforwardexecute(actionmappingmapping,actionformform,httpservletrequestrequest,httpservletresponseresponse)throwsexception/*thesema
9、ssagecomefromtheapplicationrpertiesfile*getresources(httpservletrequestrequest)方法返回當(dāng)前默認(rèn)的 messageresource 對(duì)象,它封裝了 resource*bundle 中的文本內(nèi)容。*接下來 action 類就可以通過 messageresource 對(duì)象來訪問文本內(nèi)容。例如:如果要讀取消息 key*為hello.jsp.title對(duì)應(yīng)的文本內(nèi)容,可以調(diào)用 messageresources 類的 getmessage(stringkey)方法 :*stringtitle=messa
10、ges.getmessage(hello.jsp.title);*messageresourcesmessages=getresources(request);* /*validatetherequestparametersspecifiedbytheuser*note:basicfieldvalidationdoneinhelloform.java*businesslogicvalidationdoneinhelloaction.java* 如果用戶輸入的姓名為 monster ,將創(chuàng)建包含錯(cuò)誤信息的 acrionmessage 對(duì)象,actionmessage 對(duì)象被保存* 至|jacti
11、onmessages對(duì)象中。接下來調(diào)用在 action 基類中定義的saveerrors()方法,它負(fù)責(zé)把a(bǔ)ctionmessages* 對(duì)象保存到request 范圍內(nèi)。 最后返回 actionforward 對(duì)象, struts 框架會(huì)根據(jù)actionforward對(duì)象包含的轉(zhuǎn)發(fā)* 信息把請(qǐng)求轉(zhuǎn)發(fā)到恰當(dāng)?shù)囊晥D組件,視圖組件通過 標(biāo)簽把 request 范圍內(nèi)的actionmessages 對(duì)象* 中包含的錯(cuò)誤消息顯示出來,提示用戶修改錯(cuò)誤。* */actionmessageserrors=newactionmessages();stringusername=(string)(hellofo
12、rm)form).getusername();stringbadusername=monster;if(username.equalsignorecase(badusername)/equalsignorecase 方法同 vequals ,只不過 equalsignorecase 是忽略大小寫。errors.add(username,newactionmessage(hello.dont.talk.to.monster,badusername);saveerrors(request,errors);return(newactionforward(mapping.getinput();/*he
13、lloaction 類創(chuàng)建了一個(gè)模型組件personbean 對(duì)象,并調(diào)用它的 savetopersistentstore()方法來保存username* 屬性。*fromtheview,wenowupdatethemodel*/personbeanpb=newpersonbean();pb.setusername(username);pb.savetopersistentstore();/* 把 personbean 對(duì)象保存在request 范圍內(nèi)內(nèi)* 從 request 范圍內(nèi)刪除actionformbean 。由于后續(xù)的請(qǐng)求轉(zhuǎn)發(fā)目標(biāo)組件不再需要helloformbean ,所以* 可將
14、它刪除。當(dāng) helloaction 類調(diào)用 httpservletrequest 的 setattribute() 方法,向 hello.jsp 傳遞 personbean 對(duì)象時(shí),* 需要提供一個(gè)名為persinbean keyrequest.setattribute(personbean,pb);*hello.jsp 通過這個(gè)名為personbean 的屬性來讀取personbean 對(duì)象:*hello!* 對(duì)于 struts 應(yīng)用,提倡將這些屬性key 常量定義在一個(gè)java 文件 constant.java 中,例如本例。* */request.setattribute(com.you
15、rcompany.struts.constants.person_key,pb);request.removeattribute(mapping.getattribute();return(mapping.findforward(sayhello);5 . 創(chuàng)建模型組件本例的模型組件是personbean.java , personbean 是一個(gè)非常簡(jiǎn)單的 javabean ,它包括一個(gè)username 屬性, 以及相關(guān)的 get/set 方法。 此外, 它還有一個(gè)業(yè)務(wù)方法savetopersistentstore()6 .創(chuàng)建存放常量的 java文件:constant.java7 .創(chuàng)建配
16、置文件 web.xml 和 struts-config.xml本例的運(yùn)行流程為:1.servlet 容器在 web.xml 文件中尋找 屬性為 *.do 的 元素:action*.do2.servlet 容器依據(jù)以上 元素的 屬性action,在 web.xml文件中尋找匹配的 元素:actionorg.apache.struts.action.actionservlet3.servlet 容器把請(qǐng)求轉(zhuǎn)發(fā)給以上 元素指定的 actionservlet , actionservlet 依據(jù)用戶請(qǐng)求路徑 /helloworld ,在 struts 配置文件中檢索path 屬性為 /hellowor
17、ld 的 action 元素:4 .actionservlet 根據(jù) 元素的 name 屬性,創(chuàng)建一個(gè)helloform 對(duì)象,把客戶提交的表單數(shù)據(jù)傳給helloform 對(duì)象,再把helloform 對(duì)象保存在 元素的 scope 屬性指定的request 范圍內(nèi)。5 . 由于 元素的 validate 屬性為 true , actionservlet 調(diào)用 helloform 對(duì)象的 validate() 方 法執(zhí)行表單驗(yàn)證。 當(dāng)文本框中不輸入姓名的時(shí)候,vallidate()方法返回一個(gè)actionerrors 對(duì)象。actionservlet 把helloform的validate。方
18、法返回的 actionerrors 對(duì)象保存在 request 范圍內(nèi),然后根據(jù) 元素的 input 屬性 ,把客戶請(qǐng)求轉(zhuǎn)發(fā)給hello.jsp 。 當(dāng)文本框中輸入姓名monster 的時(shí)候,vallidate()方法返回actionerrors對(duì)象中不包含任何actionmessage 對(duì)象 ,表示表單驗(yàn)證成功。actionservlet 查找 helloaction 實(shí)例是否存在,如果不存在就創(chuàng)建一個(gè)實(shí)例,然后調(diào)用helloaction 的 execute() 方法。helloaction 的 execute() 方法先進(jìn)行邏輯驗(yàn)證,由于沒有通過邏輯驗(yàn)證,就創(chuàng)建一個(gè)actionmessage 對(duì)象,這個(gè)actionmessage 對(duì)象封裝了錯(cuò)誤消息, execute() 方法把a(bǔ)ctionmessage 對(duì)象保
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度高性能混凝土材料承包協(xié)議3篇
- 2024版物流運(yùn)輸購(gòu)銷合同范本
- 2025年新員工試用期間勞動(dòng)合同范本3篇
- 主體墻面刷漆施工專項(xiàng)合同版B版
- 2025年度貨運(yùn)司機(jī)安全責(zé)任合同3篇
- 二零二五年度二手商品攤位租賃與交易平臺(tái)合作協(xié)議3篇
- 二零二五年餐廳員工加班及休息時(shí)間合同范本3篇
- 2024聘用培訓(xùn)講師合作協(xié)議書包含師資評(píng)估體系3篇
- 2024茶葉行業(yè)市場(chǎng)開拓與推廣合同
- 2024的證券居間合同
- 《國(guó)有控股上市公司高管薪酬的管控研究》
- 餐飲業(yè)環(huán)境保護(hù)管理方案
- 人教版【初中數(shù)學(xué)】知識(shí)點(diǎn)總結(jié)-全面+九年級(jí)上冊(cè)數(shù)學(xué)全冊(cè)教案
- 食品安全分享
- 礦山機(jī)械設(shè)備安全管理制度
- 計(jì)算機(jī)等級(jí)考試二級(jí)WPS Office高級(jí)應(yīng)用與設(shè)計(jì)試題及答案指導(dǎo)(2025年)
- 造價(jià)框架協(xié)議合同范例
- 糖尿病肢端壞疽
- 心衰患者的個(gè)案護(hù)理
- 醫(yī)護(hù)人員禮儀培訓(xùn)
- 無人機(jī)飛行安全協(xié)議書
評(píng)論
0/150
提交評(píng)論