版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
重慶正大軟件學(xué)院軟件系《MVC框架程序設(shè)計(jì)》電子教案重慶正大軟件學(xué)院軟件系《MVC框架程序設(shè)計(jì)》課程組重慶正大軟件職業(yè)技術(shù)學(xué)院教案(項(xiàng)目類)授課對象系別軟件系本次課學(xué)時(shí)4學(xué)時(shí)年級(jí)班次大二章節(jié)題目第1章搭建struts框架目的要求(含技能要求)了解Struts2框架概念、作用掌握struts2框架的搭建理解struts2的框架組件及運(yùn)行流程本節(jié)重點(diǎn)掌握struts2框架的搭建本節(jié)難點(diǎn)理解struts2的框架組件及運(yùn)行流程教學(xué)方法項(xiàng)目教學(xué)法教學(xué)用具機(jī)房、屏幕廣播問題引入通過用戶登錄案例,從而引出本次課程。難點(diǎn)與重點(diǎn)講解方法引導(dǎo)、分析、講解、實(shí)作演示本次課小結(jié)課程小結(jié)Struts配置文件里邊存放了程序運(yùn)行中的相關(guān)參數(shù),最重要的參數(shù)就是程序的運(yùn)行流程,struts配置文件的產(chǎn)生,一定程度上減少了程序的耦合度,增加了程序的可維護(hù)性。教后禮記討論、思考題、作業(yè)(含實(shí)訓(xùn)作業(yè))完成本次課的課堂任務(wù)填寫實(shí)驗(yàn)報(bào)告任務(wù)介紹(5分鐘)利用Struts實(shí)現(xiàn)用戶登錄:搭建struts2工程,在工程中完成一個(gè)用戶登錄功能:用戶填寫登錄表單中的用戶名和密碼后提交該表單(如圖1.1-1所示),然后進(jìn)行后臺(tái)登錄處理,進(jìn)行用戶名和密碼信息的驗(yàn)證,如果驗(yàn)證成功(合法用戶),則顯示歡迎界面如圖1.1-2a所示;如果不匹配,則顯示登錄失敗,如圖1.1-2b所示。圖1.1-1用戶登錄圖1.1-2a登錄成功圖1.1-2b登錄失敗任務(wù)解析(50-60分鐘)搭建struts2框架:加入struts的相關(guān)jar包及配置文件新建一web工程firstproject,在工程的WebRoot/WEB-INF/lib目錄下拷入struts的相關(guān)jar包;再在src目錄下創(chuàng)建名為struts.xml文件。struts.xml文件的初始內(nèi)容及要拷入哪些struts的jar包請參見工作計(jì)劃的相關(guān)內(nèi)容。注:在創(chuàng)建web工程的時(shí)候,若使用Myeclipse進(jìn)行創(chuàng)建,默認(rèn)會(huì)在工程中創(chuàng)建WebRoot目錄;而使用最新的eclipse,則默認(rèn)會(huì)在工程中創(chuàng)建WebContent目錄,本書后面章節(jié)可能會(huì)混用到這兩種目錄,讀者請勿困惑,其實(shí)這兩個(gè)目錄是等價(jià)的。前臺(tái)登錄頁面login.jsp編寫注意form表單的action地址為/firstproject/login.action,完整代碼如下:<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><html> <head> <title>登錄</title> </head> <body> <h2> 用戶登錄 </h2> <hr> <formaction="/firstproject/login.action"method="post"> <tablealign="right"> <tr> <td> 用戶名: </td> <td> <inputtype="text"name="username"/> </td> </tr> <tr> <td> 密碼: </td> <td> <inputtype="password"name="password"/> </td> </tr> <tr> <td></td> <td> <inputtype="submit"value="確定"> <inputtype="reset"value="取消"> </td> </tr> </table> </form> </body></html>后臺(tái)業(yè)務(wù)控制器(action類)LoginAction編寫創(chuàng)建類LoginAction,在類中定義兩個(gè)String類型的成員變量username、password,并編寫對應(yīng)的get/set方法。定義username與password兩個(gè)成員變量的原因:用于接收前臺(tái)頁面提交的數(shù)據(jù),變量的名字必須要和前臺(tái)表單中的各種輸入框的名字或頁面參數(shù)名字一一對應(yīng),必須給每個(gè)變量編寫get/set方法,至少要有set方法。Struts框架會(huì)自動(dòng)將前臺(tái)提交的數(shù)據(jù)存放到與之名字相同的成員變量中,無需程序員手工編寫代碼獲得。再在類LoginAction中創(chuàng)建名為execute的無參數(shù)方法,方法里邊調(diào)用業(yè)務(wù)邏輯處理類Login的execute方法執(zhí)行相關(guān)業(yè)務(wù)處理,并根據(jù)處理結(jié)果返回String類型的成功或失敗的跳轉(zhuǎn)標(biāo)識(shí)(該跳轉(zhuǎn)標(biāo)識(shí)與struts.xml配置文件中的跳轉(zhuǎn)標(biāo)識(shí)相對應(yīng)),其關(guān)鍵代碼如下: publicStringexecute(){ Loginlogin=newLogin(); if(login.execute(username,password)){ //執(zhí)行成功,返回成功的跳轉(zhuǎn)標(biāo)識(shí)success return"success"; }else{ //執(zhí)行失敗,返回失敗的跳轉(zhuǎn)標(biāo)識(shí)error return"error"; } }后臺(tái)業(yè)務(wù)處理類Login編寫新建業(yè)務(wù)處理類Login,在類中新增成員方法execute,該方法傳入用戶名、密碼兩個(gè)參數(shù),驗(yàn)證用戶是否合法,成功返回true,失敗返回false。關(guān)鍵代碼如下: publicbooleanexecute(Stringusername,Stringpassword){ //取出form中的用戶名密碼進(jìn)行驗(yàn)證,本任務(wù)中假定合法用戶system密碼123 if("system".equals(username)&&"123".equals(password)){ returntrue; }else{ returnfalse; } }前臺(tái)登錄成功與失敗的頁面login_succ.jsp和login_err.jsp編寫創(chuàng)建對應(yīng)的login_succ.jsp和login_err.jsp,顯示成功和失敗信息。login_succ.jsp完整代碼:<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%><html> <head> <title>登錄成功</title> </head> <body> 登錄成功,歡迎光臨~ </body></html>login_err.jsp完整代碼:<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%><html> <head> <title>登錄失敗</title> </head> <body> 登錄失敗~ 請點(diǎn)擊<ahref="login.jsp">返回</a>重新登錄! </body></html>修改配置文件:在struts.xml中加入相關(guān)配置首先,在struts.xml文件的<struts>…</struts>之間加入: <packagename="default"extends="struts-default"> </package>然后,在<package>…</package>之間加入: <actionname="login"class="login.LoginAction"method="execute"> <resultname="success">/login_succ.jsp</result> <resultname="error">/login_err.jsp</result> </action>說明:上述配置中actionname="login"中l(wèi)ogin是與login.jsp頁面中form表單的action=/firstproject/login.action相一致,class="login.LoginAction"指定業(yè)務(wù)控制器LoginAction的地址,method="execute"指定了業(yè)務(wù)控制器要執(zhí)行的方法,resultname="success"指定了跳轉(zhuǎn)標(biāo)識(shí),與LoginAction類的execute方法返回值相對應(yīng),/login_succ.jsp是跳轉(zhuǎn)的頁面地址。整段代碼指定了前臺(tái)頁面提交的映射地址(login),要執(zhí)行的真正地址——業(yè)務(wù)控制類(login.LoginAction),要執(zhí)行的方法(LoginAction的execute方法),指定了兩個(gè)跳轉(zhuǎn)標(biāo)識(shí)(success與error),定義了方法執(zhí)行完畢后根據(jù)返回的跳轉(zhuǎn)標(biāo)識(shí)進(jìn)行跳轉(zhuǎn)的兩個(gè)地址(/login_succ.jsp和/login_err.jsp)。根據(jù)任務(wù)提出問題(45-55分鐘)Struts框架是什么?有什么好處?如何用Struts2搭建一個(gè)Web項(xiàng)目?Struts框架在web項(xiàng)目中是怎么工作的?問題解析(45-55分鐘)了解“框架”與Struts框架框架的概念:中文是框架,英文名稱是frame,定義為由若干梁和柱連接而成的能承受垂直和水平荷載的平面結(jié)構(gòu)或空間結(jié)構(gòu)。所屬學(xué)科為水利科技(一級(jí)學(xué)科);工程力學(xué)、工程結(jié)構(gòu)、建筑材料(二級(jí)學(xué)科);工程結(jié)構(gòu)(水利)(三級(jí)學(xué)科)土木工程中的框架(框,讀kuàng):由梁和柱組成的能承受垂直和水平荷載的結(jié)構(gòu),梁和柱是剛性連結(jié)的。主要要用于工業(yè)與民用建筑物的承重骨架,橋梁構(gòu)架或工程構(gòu)筑物。一般指建筑工程中,由粱或尾架和柱聯(lián)結(jié)而成的結(jié)構(gòu)。由于我國古代家具自宋以后曾吸收古代大木構(gòu)制的作法,故傳統(tǒng)家具采用框檔、立柱結(jié)構(gòu)形式的即稱框架,并將此類結(jié)構(gòu)形式的家具稱之謂“框架式家具”。軟件工程中的框架:是可被應(yīng)用開發(fā)者定制的應(yīng)用骨架。為什么要進(jìn)行框架開發(fā)?框架的最大好處就是重用。面向?qū)ο笙到y(tǒng)獲得的最大的復(fù)用方式就是框架,一個(gè)大的應(yīng)用系統(tǒng)往往可能由多層互相協(xié)作的框架組成。由于框架能重用代碼,因此從一已有構(gòu)件庫中建立應(yīng)用變得非常容易,因?yàn)闃?gòu)件都采用框架統(tǒng)一定義的接口,從而使構(gòu)件間的通信簡單??蚣苣苤赜迷O(shè)計(jì)。它提供可重用的抽象算法及高層設(shè)計(jì),并能將大系統(tǒng)分解成更小的構(gòu)件,而且能描述構(gòu)件間的內(nèi)部接口。這些標(biāo)準(zhǔn)接口使在已有的構(gòu)件基礎(chǔ)上通過組裝建立各種各樣的系統(tǒng)成為可能。只要符合接口定義,新的構(gòu)件就能插入框架中,構(gòu)件設(shè)計(jì)者就能重用構(gòu)架的設(shè)計(jì)??蚣苓€能重用分析。所有的人員若按照框架的思想來分析事務(wù),那么就能將它劃分為同樣的構(gòu)件,采用相似的解決方法,從而使采用同一框架的分析人員之間能進(jìn)行溝通。軟件領(lǐng)域的框架主要特點(diǎn):領(lǐng)域內(nèi)的軟件結(jié)構(gòu)一致性好;建立更加開放的系統(tǒng);重用代碼大大增加,軟件生產(chǎn)效率和質(zhì)量也得到了提高;軟件設(shè)計(jì)人員要專注于對領(lǐng)域的了解,使需求分析更充分;存儲(chǔ)了經(jīng)驗(yàn),可以讓那些經(jīng)驗(yàn)豐富的人員去設(shè)計(jì)框架和領(lǐng)域構(gòu)件,而不必限于低層編程;允許采用快速原型技術(shù);有利于在一個(gè)項(xiàng)目內(nèi)多人協(xié)同工作;大粒度的重用使得平均開發(fā)費(fèi)用降低,開發(fā)速度加快,開發(fā)人員減少,維護(hù)費(fèi)用降低,而參數(shù)化框架使得適應(yīng)性、靈活性增強(qiáng)。什么是struts框架:是MVC的框架,它將Model、View、Controller這些概念分別對應(yīng)到了不同的Web應(yīng)用組件,因此,可以說Struts是MVC設(shè)計(jì)模式的具體實(shí)現(xiàn)。Struts的所有功能都是建立在已有的JavaWeb組件上,如Servlet、JSP或是JavaBean,它只是利用一種方式將這些元素組織了起來,使它們協(xié)同工作。搭建一個(gè)struts項(xiàng)目:以HelloWorld項(xiàng)目為例例子需求描述:創(chuàng)建一個(gè)struts工程HelloWorld,創(chuàng)建兩個(gè)頁面,第一個(gè)頁面helloworld.jsp有一個(gè)輸入框和確認(rèn)按鈕(如圖1.1-3a),當(dāng)用戶在輸入框中輸入一個(gè)名字點(diǎn)擊確認(rèn)按鈕,提交到第二頁面helloworld_result.jsp中顯示用戶輸入的名字(如圖1.1-3b)。圖1.1-3aHelloWorld工程第一個(gè)頁面圖1.1-3bHelloWorld工程第二個(gè)頁面步驟1:使用myeclipse創(chuàng)建一個(gè)web工程。步驟2:在web項(xiàng)目中引入struts的jar包。官方網(wǎng)站上下載struts2的jar包,網(wǎng)址:/download.cgi#struts2181;將Struts2.xlib下的五個(gè)核心jar文件加到工程的web-inf/lib中。五個(gè)核心文件如下:struts2-core-2.x.x.jarStruts2框架的核心類庫ognl-2.6.x.jar對象圖導(dǎo)航語言(ObjectGraphNavigationLanguage),struts框架通過其讀寫對象的屬性freemarker-2.3.x.jarStruts2的U標(biāo)簽的模版使用FreeMarker編寫commons-fileupload-1.2.x.jar文件上傳組件,2.1.6版本后需要加入此文件xwork-core-2.x.x.jarxwork的類庫,struts2在其上構(gòu)建注:五個(gè)核心文件在常用開發(fā)中一般就夠用了,若有特殊需要,可加入其它的文件。特別地——本例中沒有使用spring框架,請勿把struts框架中的struts2-spring-plugin-2.x.x.jar包拷貝到工程中,不然程序發(fā)布不成功,無法運(yùn)行。若讀者已經(jīng)拷貝到工程中,請自行移除該jar包。本書其他地方若沒有使用spring框架,也照此處理。步驟3:在web.xml文件中增加struts2過濾器。<!--定義struts2的FilterDispatcher的filter--><filter><!--定義核心filter的名字--><filter-name>Struts2</filter-name><!--定義核心filter的實(shí)現(xiàn)類--><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><!--初始化struts2并處理所有web請求--><filter-mapping><!--定義核心filter的名字(和上面的filter-name名字要完全一樣)--><filter-name>Struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>備注,該過濾器只需最初配置一次。代碼是固定的,無需修改。步驟4:在工程中加入struts.xml的配置文件在src目錄下創(chuàng)建文件名為struts.xml的文件:<?xmlversion="1.0"encoding="UTF-8"?><!--以下這段照搬,切記!--><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts></struts>步驟5:前臺(tái)編寫helloworld項(xiàng)目的兩個(gè)頁面頁面1(helloworld.jsp)關(guān)鍵代碼:<formaction="/HelloWorld/helloworld.action"method="post">姓名:<inputtype="text"name="username"><inputtype="submit"value="確定"></form>頁面2(helloworld_result.jsp)關(guān)鍵代碼:<%=session.getAttribute("username")%>,你好!步驟6:后臺(tái)編寫后臺(tái)處理類HelloWorldActionpackagehelloWorld;importjava.util.Map;importcom.opensymphony.xwork2.ActionContext;publicclassHelloWorldAction{ Stringusername;//表單中的值自動(dòng)賦值到對應(yīng)名字的變量中 publicStringexecute(){ //把用戶名放到session中,struts2中特有的方式。 Mapsession=ActionContext.getContext().getSession(); session.put("username",username); return"success"; } publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; }}步驟7:struts2配置文件中添加配置:在<struts>…</struts>之間加入代碼 <packagename="default"extends="struts-default"> <actionname="helloworld"class="helloWorld.HelloWorldAction"method="execute"> <resultname="success">/helloworld_result.jsp</result> </action> </package>Struts框架結(jié)構(gòu)及運(yùn)行流程回顧MVC的經(jīng)典模型——模型2:JSP+Servlet+JavaBean,如圖1.1-4a所示。圖1.1-4aMVC的經(jīng)典模型——模型2Struts(MVC的框架式應(yīng)用)與jsp+servlet+JavaBean的結(jié)構(gòu)(MVC中的典型模型2)有什么區(qū)別?為了說明問題,請看Struts的基本模型,如圖1.1-4b所示。圖1.1-4bstruts的基本模型下面就從MVC的三個(gè)部分(C控制器、M模型、V視圖)分別說明。核心控制器FilterDispatcher:是struts2框架的核心控制器,該控制器作為一個(gè)filter運(yùn)行在web應(yīng)用中,負(fù)責(zé)攔截所有的用戶請求,過濾用戶請求,如果請求以.action結(jié)尾,該請求將被轉(zhuǎn)入struts2框架處理。struts2框架獲得*.action請求后,將根據(jù)*.action請求的前面部分決定調(diào)用哪個(gè)業(yè)務(wù)邏輯組件。struts2應(yīng)用中的action都被定義在struts.xml文件中,文件中定義了action的name屬性和class屬性,name決定該action處理哪個(gè)用戶請求,而class屬性決定了該action的實(shí)現(xiàn)類。業(yè)務(wù)控制器Action:action是一個(gè)普通的java類,它可以繼承ActionSupport類[可選],action中含有一個(gè)無參數(shù)execute方法,返回一個(gè)字符串——每個(gè)字符串對應(yīng)struts配置文件中的跳轉(zhuǎn)標(biāo)識(shí)。備注:execute方法并非是必須的,可
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 5G切片架構(gòu)優(yōu)化-深度研究
- 極地極端天氣事件預(yù)測模型-深度研究
- 數(shù)字藝術(shù)版權(quán)保護(hù)-第1篇-深度研究
- 2025年山西機(jī)電職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 2025年山西國際商務(wù)職業(yè)學(xué)院高職單招高職單招英語2016-2024歷年頻考點(diǎn)試題含答案解析
- 2025年山東旅游職業(yè)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 芥末精油抑制馬鈴薯發(fā)芽保鮮技術(shù)研究
- 2025年山東勞動(dòng)職業(yè)技術(shù)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點(diǎn)含答案解析
- 尿液細(xì)胞糖代謝檢測對尿路上皮癌診斷價(jià)值的研究初探
- 二零二五年度校園食堂廚房設(shè)備更新及維護(hù)合作協(xié)議4篇
- GB/T 45107-2024表土剝離及其再利用技術(shù)要求
- 2024-2025學(xué)年八年級(jí)上學(xué)期1月期末物理試題(含答案)
- 商場電氣設(shè)備維護(hù)勞務(wù)合同
- 2023年國家公務(wù)員錄用考試《行測》真題(行政執(zhí)法)及答案解析
- 2024智慧醫(yī)療數(shù)據(jù)字典標(biāo)準(zhǔn)值域代碼
- 年產(chǎn)12萬噸裝配式智能鋼結(jié)構(gòu)項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)備案
- 【獨(dú)家揭秘】2024年企業(yè)微信年費(fèi)全解析:9大行業(yè)收費(fèi)標(biāo)準(zhǔn)一覽
- 醫(yī)療器械經(jīng)銷商會(huì)議
- 《±1100kV特高壓直流換流變壓器使用技術(shù)條件》
- 1-1 擁抱夢想:就這樣埋下一顆種子【2022中考作文最熱8主題押題24道 構(gòu)思點(diǎn)撥+范文點(diǎn)評】
- 《風(fēng)電場項(xiàng)目經(jīng)濟(jì)評價(jià)規(guī)范》(NB-T 31085-2016)
評論
0/150
提交評論