JavaWeb程序設(shè)計(jì) 課件 ch14 MVC 和 Struts2 基本原理_第1頁
JavaWeb程序設(shè)計(jì) 課件 ch14 MVC 和 Struts2 基本原理_第2頁
JavaWeb程序設(shè)計(jì) 課件 ch14 MVC 和 Struts2 基本原理_第3頁
JavaWeb程序設(shè)計(jì) 課件 ch14 MVC 和 Struts2 基本原理_第4頁
JavaWeb程序設(shè)計(jì) 課件 ch14 MVC 和 Struts2 基本原理_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第14章MVC和Struts2基本原理本課教學(xué)內(nèi)容MVC模式Struts2簡介Struts2的基本原理Struts2的基本使用方法其他問題MVC和Strut2s基本原理MVC模式 MVC(Model、View、Controller),是軟件開發(fā)過程中比較流行的設(shè)計(jì)思想。在了解MVC之前,首先要明確一點(diǎn),MVC是一種設(shè)計(jì)模式(設(shè)計(jì)思想),不是一種編程技術(shù)MVC模式MVC思想:

編寫JSP,負(fù)責(zé)輸入查詢代碼,提交到Servlet,Servlet進(jìn)行安全驗(yàn)證,調(diào)用Dao來訪問數(shù)據(jù)庫,得到結(jié)果,跳轉(zhuǎn)到JSP顯示MVC思想MVC思想如圖MVC思想工作步驟為:用戶在表單中輸入,表單提交給Servlet,Servlet驗(yàn)證輸入,然后實(shí)例化JavaBeanJavaBean查詢數(shù)據(jù)庫,查詢結(jié)果暫存在JavaBean中Servlet跳轉(zhuǎn)到JSP,JSP使用JavaBean,得到它里面的查詢結(jié)果,并顯示出來Struts2簡介因?yàn)橐獙VC模式來進(jìn)行標(biāo)準(zhǔn)化,讓程序員在某個(gè)標(biāo)準(zhǔn)下進(jìn)行開發(fā)。很多人致力于這個(gè)工作,并且發(fā)布了一些框架,Struts就是這樣一個(gè)框架,在使用的過程中,受到了廣泛的承認(rèn)。可以說,Struts是為了規(guī)范MVC開發(fā)而發(fā)布的一個(gè)框架。大多數(shù)框架的版本改進(jìn),一般是在原有的基礎(chǔ)上增加功能或者進(jìn)行優(yōu)化,而Struts2不單如此。Struts2簡介Struts2是Struts的下一代框架,并不是新發(fā)布的新框架,但是它是另一個(gè)非常流行的框架:WebWork基礎(chǔ)上發(fā)展起來的??梢哉f,Struts2和WebWork非常類似。并且Struts2吸收了Struts1和WebWork兩者的優(yōu)勢,因此也是一個(gè)非常優(yōu)秀的框架Struts2簡介Struts2和Struts1具有一些不同點(diǎn),主要集中在以下方面:1. Action類的編寫:在Struts1中,Action類一般繼承基類org.apache.struts.action.Action。而在Struts2中,Action類可以實(shí)現(xiàn)一個(gè)Action接口,也可實(shí)現(xiàn)其他接口,也可以繼承ActionSupport基類,甚至不需要實(shí)現(xiàn)任何接口,只編寫execute函數(shù)即可Struts2簡介2.Action的運(yùn)行模式:Struts1中,Action是單態(tài)的,系統(tǒng)實(shí)例化一個(gè)對象來處理多個(gè)請求,為每個(gè)請求分配一個(gè)線程,在該線程中運(yùn)行execute函數(shù)。因此,在開發(fā)時(shí)需要特別小心,Action資源必須是線程安全的或同步的。但是,Struts2中,Action為每一個(gè)請求產(chǎn)生一個(gè)實(shí)例,不會(huì)產(chǎn)生線程安全問題。但是,系統(tǒng)又能夠及時(shí)回收垃圾資源,不會(huì)有廢棄空間的問題Struts2簡介3.

對Web容器的依賴:Struts1中,Action的execute函數(shù)內(nèi),傳入了ServletAPI:HttpServletRequest和HttpServletResponse,使得測試必須依賴于Web容器。但是,在Struts2中,可以不傳入HttpServletRequest和HttpServletResponse,但是也可以訪問它們,因此,Action不依賴于容器,允許Action脫離容器單獨(dú)被測試Struts2簡介4.對表單數(shù)據(jù)的封裝:Struts1中,使用ActionForm來封裝表單數(shù)據(jù),所有的ActionForm必須繼承org.apache.strtus.action.ActionForm,有可能造成ActionForm類和VO類重復(fù)編碼。但是,Struts2中,直接在Action中編寫表單數(shù)據(jù)相對應(yīng)的屬性,可以不用編寫ActionForm,而這些屬性又可以通過Web頁面上的標(biāo)簽訪問Struts2的基本原理環(huán)境配置要編寫基于Struts2的應(yīng)用,需要導(dǎo)入一些支持的包,也就是Struts2開發(fā)包。這些開發(fā)包可以到網(wǎng)上去下載。下載地址為:/Struts2的基本原理在Struts2中,常用的的組件有:FilterDispatcher過濾器、JSP、Action、JavaBean、配置文件等。對于一個(gè)動(dòng)作,其執(zhí)行步驟為:1.用戶輸入,JSP表單的請求被FilterDispatcher截獲Struts2的基本原理2.FilterDispatcher將表單信息轉(zhuǎn)交給Action,并封裝在Action內(nèi)3.Action來調(diào)用JavaBean(DAO)4.Action返回要跳轉(zhuǎn)到的JSP頁面邏輯名稱給框架5.框架根據(jù)邏輯名稱找到相應(yīng)的網(wǎng)頁地址,進(jìn)行跳轉(zhuǎn),結(jié)果在JSP上顯示Struts2的基本使用方法

該部分內(nèi)容使用實(shí)際案例進(jìn)行講解。在學(xué)生管理系統(tǒng)中,用戶輸入賬號密碼進(jìn)行登錄,如果登錄成功,就跳轉(zhuǎn)到成功頁面,否則跳轉(zhuǎn)到失敗頁面。為了簡便起

見,認(rèn)為賬號密碼相等就登錄成功。Struts2的基本使用方法導(dǎo)入Struts2

將右邊幾個(gè)包拷貝到項(xiàng)目中WEB-INF中的lib目錄下:然后配置web.xml文件編寫JSP*具體代碼示例詳見課本編寫并配置ActionForm在Struts1.x中,必須要單獨(dú)建立一個(gè)ActionForm類,而在Struts2中ActionForm和Action已經(jīng)合二為一了。因此,只需要將和表單元素同名的屬性編寫到Action內(nèi)。編寫并配置ActionFormLoginAction沒有繼承任何類,它有屬性account和password,與login.jsp中的表單元素account與password必須同名編寫并配置ActionStruts2中,既然Action和ActionForm合二為一,Action是負(fù)責(zé)業(yè)務(wù)邏輯的,所以必須編寫業(yè)務(wù)邏輯代碼。下面來加強(qiáng)Action的功能。要能夠處理業(yè)務(wù)邏輯,必須要滿足一個(gè)規(guī)范,那就是:編寫execute方法來處理業(yè)務(wù)邏輯。注意,不是重寫,是編寫。并且該方法不需要有任何的參數(shù)編寫并配置Action編寫execute方法,是因?yàn)锳ction接收數(shù)據(jù)后,由框架自動(dòng)調(diào)用它的execute方法,該方法的運(yùn)行,在底層通過反射機(jī)制進(jìn)行。execute的格式為:

publicStringexecute(){}該函數(shù)返回一個(gè)字符串,表示的是目標(biāo)頁面的虛擬名稱編寫并配置Action配置文件<struts><packagename="struts2"extends="struts-default"> <actionname="login"class="prj14.LoginAction"> <resultname="success">/loginSuccess.jsp</result> <resultname="fail">/loginFail.jsp</result> </action> </package> </struts>編寫并配置Action從以上配置可以看出,在<struts>標(biāo)簽中可以有多個(gè)<package>,名稱任意,但不要重名;extends屬性表示繼承一個(gè)默認(rèn)的配置文件"struts-default",一般都繼承于它,可以不用修改。<action>標(biāo)簽中的name屬性表示Action被提交時(shí)的路徑,class指定動(dòng)作類路徑測試*具體代碼測試效果圖見課本其他問題程序運(yùn)行流程 login.jsp中的表單提交到的地址為"/Prj14/login.action",被org.apache.struts2.dispatcher.FilterDispatcher截獲,框架把提交的地址的項(xiàng)目名稱和擴(kuò)展名".action"去掉,變?yōu)?/login",讀取配置文件其他問題在配置文件中,根據(jù)"/login",找到配置文件中的action對應(yīng)的類,從而得到要提交到的類LoginAction;在LoginAction中,實(shí)例化對象,將account和password封裝進(jìn)去其他問題框架調(diào)用LoginAction的execute方法,處理后返回一個(gè)字符串框架根據(jù)字符串內(nèi)容,在配置文件中找到相應(yīng)的頁面,并跳轉(zhuǎn)其他問題Action生命周期框架先實(shí)例化LoginAction對象,然后調(diào)用LoginAction的setAccount函數(shù),封裝表單數(shù)據(jù),然后調(diào)用execute函數(shù),進(jìn)行處理在第二次提交時(shí),LoginAction會(huì)重新實(shí)例化,說明每一個(gè)LoginAction對象都服務(wù)一個(gè)請求,這和Servlet的原理是不一樣的其他問題在Action中訪問Web對象獲得request對象的方法是:

importorg.apache.struts2.ServletActionContext; publicStringexecute()throwsException{

HttpServletRequestrequest=ServletActionContext.getRequest(); //使用request

}其他問題在Action中訪問Web對象獲得response對象的方法是:

importorg.apache.struts2.ServletActionContext; publicStringexecute()throwsException{ HttpServletResponseresponse=ServletActionContext.getResponse(); //使用response }

其他問題在Action中訪問Web對象獲得application對象的方法是: importorg.apache.struts2.ServletActionContext; publicStringexecute()throwsException{ ServletContextapplication=ServletActionContext.getServletContext(); //使用application}

其他問題在Action中訪問Web對象獲得session對象的方法是: importcom.opensymphony.xwork2.ActionContext; publicStringexecute()throwsException{ Mapsession=ActionContext.g

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論