基于SSH架構(gòu)模式的應(yīng)用開發(fā)_第1頁
基于SSH架構(gòu)模式的應(yīng)用開發(fā)_第2頁
基于SSH架構(gòu)模式的應(yīng)用開發(fā)_第3頁
基于SSH架構(gòu)模式的應(yīng)用開發(fā)_第4頁
基于SSH架構(gòu)模式的應(yīng)用開發(fā)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、鄭州大學(xué)信息工程學(xué)院 1.mvc架構(gòu)模式的簡(jiǎn)單介紹。 2.struts工作原理及實(shí)例開發(fā)。 3.spring實(shí)例開發(fā)。 4.hibernate數(shù)據(jù)庫持久層技術(shù)。 mvc是model-view-controller的縮寫,中文翻譯為“模式-視 圖-控制器”。mvc是一種常用的設(shè)計(jì)模式。mvc減弱了業(yè)務(wù)邏輯接 口和數(shù)據(jù)接口之間的耦合,讓視圖層更富于變化。 mvc的目的就是實(shí)現(xiàn)web系統(tǒng)的職能分工。 model層實(shí)現(xiàn)系統(tǒng)中的業(yè)務(wù)邏輯,通常可以用javabean或ejb來 實(shí)現(xiàn)。 view層用于與用戶的交互,通常用jsp來實(shí)現(xiàn)。 controller層是model和view之間溝通的橋梁,它可以分派用

2、戶 的請(qǐng)求并選擇恰當(dāng)?shù)囊晥D用于顯示,同時(shí)它也可以解釋用戶的輸入并 將他們映射為模型層可執(zhí)行的操作。 圖1.1 mvc的工作原理 view(視圖) controller(控制) model(模型) 低耦合性。 高重用性和可適用性。 較低的生命周期成本。 快速的部署。 可維護(hù)性。 有利于軟件工程化管理。 mvc的缺點(diǎn): 由于它沒有明確的定義,所以完全理解mvc并不是很容易。使用 mvc需要精心的計(jì)劃由于它的內(nèi)部原理比較復(fù)雜,所以需要花費(fèi)一些 時(shí)間去思考。 jsp+servlet+javabean。 jsp+struts+javabean。 ssh(struts+spring+hibernate)。

3、 jsp+javabean(controller)+javabean(model)。 struts是jakarta項(xiàng)目組的一個(gè)open source項(xiàng)目,它采用mvc模 式,能夠很好的幫助java開發(fā)者利用j2ee開發(fā)web應(yīng)用。struts框架 的核心是一個(gè)彈性控制層,基于如java servlets、javabean、 resourcebundles和xml等標(biāo)準(zhǔn)技術(shù),以及jakarta commons的一 些類庫。 struts有其自己的控制器(controller),同時(shí)整合了其他的一些 技術(shù)去實(shí)現(xiàn)模型層(model)和視圖層(view)。在模型層,struts 可以很容易的與數(shù)據(jù)庫訪

4、問技術(shù)相結(jié)合。在視圖層,struts能夠與jsp (包括jstl和jsf)、velocity模板、xslt及其他表示層技術(shù)完美結(jié) 合。 struts的體系結(jié)構(gòu)包括模型(model),視圖(views)和控制器 (controller)三部分。如圖2.1所示: 圖2.1 struts的體系結(jié)構(gòu) 客戶 瀏覽器 控制器 servlet 視圖 jsp 業(yè)務(wù)邏輯 動(dòng)作 模型模型 應(yīng)用程序狀態(tài) 事件 http 響應(yīng) 調(diào)度 獲取 轉(zhuǎn)向 更新 http 響應(yīng) 模型(model) 在struts的體系結(jié)構(gòu)中,模型分為兩個(gè)部分:系統(tǒng)的內(nèi)部狀態(tài) 和可以改變的狀態(tài)的事務(wù)邏輯。內(nèi)部狀態(tài)通常由一組actionform b

5、ean表示。這些bean可以是自包含的并具有持續(xù)的狀態(tài),或只在需 要時(shí)才獲得數(shù)據(jù)。建議用戶將事務(wù)邏輯(要做什么)與action類所 扮演的角色(決定做什么)分開。 視圖(view) 視圖主要由jsp建立,struts包含擴(kuò)展自定義標(biāo)記庫,可以簡(jiǎn)化 創(chuàng)建完全國(guó)際化用戶界面的過程。目前的標(biāo)記庫包括bean tags、 html tags、logic tags、nested tags以及template tags 等。 控制器(controller) 在struts中,基本的控制器組件是actionservlet類的實(shí)例 servlet,實(shí)際使用的servlet在配置文件中由一組映射(由 actio

6、nmapping類進(jìn)行描述)進(jìn)行定義。對(duì)于業(yè)務(wù)邏輯的操作則主 要由action、actionmapping與actionforward這幾個(gè)組件協(xié)調(diào)來 完成,其中action扮演真正的業(yè)務(wù)邏輯的實(shí)現(xiàn)者,actionmapping 與actionforward則指定了不同業(yè)務(wù)邏輯或流程的運(yùn)行方向。 整個(gè)struts大約由15個(gè)包,近200個(gè)類所組成,而且數(shù) 量還在不斷的擴(kuò)展。目前struts api中幾個(gè)基本的組件包 包括action、actions、config、util、taglib、validator 等。 表2.1 struts api中幾個(gè)基本的組件包 包名包名說明說明 org.apa

7、che.struts.action 基本控制整個(gè)struts的運(yùn)行的核心類、組件都在這個(gè)包中, 如actionservlet,以及action,actionform, actionmapping等。 org.apache.struts.actions 提供用戶http請(qǐng)求和業(yè)務(wù)邏輯處理之間的特定適配器轉(zhuǎn)換 功能。 org.apache.struts.config 提供配置文件structs-config.xml元素的映射。 org.apache.struts.util 提供一些常用服務(wù)的支持,如connection pool和 message source。 org.apache.struts

8、.taglib 這不是一個(gè)包,而是一個(gè)用戶標(biāo)記類的集合,包括bean tags、html tags、logic tags、nested tags、 template tags。 org.apache.struts.validator 用于動(dòng)態(tài)的配置form表單的驗(yàn)證。 struts的優(yōu)點(diǎn)有: struts與tomcat、turbine等諸多apache項(xiàng)目一樣,是開源的軟件, 這是它的一大優(yōu)點(diǎn),使開發(fā)者能更深入地了解其內(nèi)部的實(shí)現(xiàn)機(jī)制。 taglib和頁面導(dǎo)航。其中taglib是struts的標(biāo)記庫,靈活使用能大大 提高開發(fā)的效率。關(guān)于頁面導(dǎo)航,將是今后的一個(gè)發(fā)展方向,使系統(tǒng) 的脈絡(luò)更加清晰。

9、struts的缺點(diǎn)有: 增加了系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)的復(fù)雜性。對(duì)于簡(jiǎn)單的界面,嚴(yán)格遵循mvc, 使模型、視圖、控制器分離,降低運(yùn)行效率。 視圖與控制器間的過于緊密的連接。視圖與控制器應(yīng)試相互分離的, 某些過于緊密的連接妨礙了它們的獨(dú)立重用。 視圖對(duì)模型的低效率訪問。依據(jù)模型操作接口的不同,視圖可能需要 多次調(diào)用才能獲得足夠顯示的數(shù)據(jù)。對(duì)未變化數(shù)據(jù)的不必要的頻繁訪 問,也將損害操作性能。 使用struts實(shí)現(xiàn)一個(gè)完整的用戶登錄系統(tǒng)的實(shí)例。 登錄程序組件的介紹: 本例主要用myeclipse8.5插件的struts designer(struts圖形化開 發(fā)環(huán)境)來開發(fā)用戶登錄程序。實(shí)例主要由3個(gè)jsp文

10、件、2個(gè)java類和2 個(gè)配置文件組成。 userlogin.jsp:用戶登錄頁面,填寫成功登錄后顯示的頁面。 userloginsuccess.jsp:用戶成功登錄后顯示的頁面。 userloginfailure.jsp:用戶登錄失敗后顯示的頁面。 loginform.java類:這是struts中一個(gè)actionform類,用來接收客 戶輸入的數(shù)據(jù),并進(jìn)行初步的數(shù)據(jù)合理性驗(yàn)證。 userloginaction.java類:這是struts中的一個(gè)action類,用戶進(jìn)行 用戶身份驗(yàn)證,根據(jù)結(jié)果返回actionforward類。 struts-conf.xml:這是struts中的配置文件,

11、是任何一個(gè)struts程序 中必不可少的文件。 web.xml:tomcat的應(yīng)用配置文件。 1.在myeclipse8.5中選擇file-new-project菜單命令,在彈出的 new project對(duì)話框中新建一個(gè)j2ee的web project項(xiàng)目。 2.單擊next按鈕,在project name文本框中輸入項(xiàng)目名 “l(fā)ogindemo”,其余保持默認(rèn),單擊finish按鈕。 3.添加支持的struts功能組件。選擇myeclipse -add struts capabilities命令,struts specification為版本號(hào),這里選擇 “struts1.2”;對(duì)url p

12、attern我們選擇“*.do”;對(duì)base package for new classes設(shè)置為“”;default application resources中為默認(rèn)的資源文件。單擊finish按鈕。 1.雙擊打開struts-config.xml文件,默認(rèn)情況下進(jìn)入的是可視化設(shè)計(jì) 界面。單擊窗口左側(cè)palette欄中的jsp按鈕,然后再設(shè)計(jì)窗口中單 擊,將彈出create a new jsp page對(duì)話框,這里我們新建一個(gè) jsp文件。在file name中輸入“userloginsuccess.jsp”,單擊 finish按鈕。 2.用同樣的方法,再新建一個(gè)jsp文件,命名為user

13、loginfailure.jsp, 作為用戶登錄失敗后所顯示的頁面。 3.在struts-config.xml的design模式中,單擊鼠標(biāo)右鍵,選擇new- form,action and jsp菜單命令,use case為userlogin,在 form properties選項(xiàng)卡中單擊add按鈕,來添加相關(guān)值,添加兩 個(gè)屬性:username和password。在添加password時(shí),要將type 設(shè)置為“password”。選中jsp選項(xiàng)卡,選中“create jsp form”,然后選擇method選項(xiàng)卡,將methods的第1個(gè)和第2個(gè)方 法選中,分別創(chuàng)建錯(cuò)誤處理方法和重置方法,

14、單擊next按鈕,進(jìn)入 action選項(xiàng)界面。將option details欄下form選項(xiàng)卡中的 “validate form”取消選擇,然后在forwards選項(xiàng)卡單擊add按 鈕,分別添加成功和失敗時(shí)返回的頁面。 4.單擊finish按鈕,在struts-config.xml的design中,可以看到如 圖2.2所示的關(guān)聯(lián)圖。myeclipse已經(jīng)建立好了jsp、actionform和 action之間的關(guān)系。 圖2.2 struts-config.xml的design中的關(guān)聯(lián)圖 在package explorer窗口中的form文件夾中雙擊打開 userlogin.jsp。修改所有以開

15、頭的語句修改后的 內(nèi)容如下: 在web-inf目錄下生成一個(gè)web.xml文件,打開web.xml文件,為 其添加struts標(biāo)記庫。 userloginaction.java類用來對(duì)用戶名和密碼進(jìn)行驗(yàn)證,并且進(jìn)行響 應(yīng)操作,對(duì)類中的execute方法進(jìn)行完善如下: public actionforward execute(actionmapping mapping, actionform form, httpservletrequest request, httpservletresponse response) userloginform userloginform = (userlogi

16、nform) form;/ todo auto-generated method stub /判斷用戶名是否為admin,密碼是否為123456 if(userloginform.getusername().equals(admin) /跳轉(zhuǎn)成功頁面 return mapping.findforward(success); /跳轉(zhuǎn)錯(cuò)誤界面 return mapping.findforward(failure); 部署并運(yùn)行struts程序: 在瀏覽器中輸入 http:/localhost:8080/logindemo/form/userlogin.jsp在出現(xiàn) 的登錄頁面中輸入用戶名“admi

17、n”,密碼“123456”,提交后則 顯示成功登錄信息,當(dāng)輸入錯(cuò)誤用戶名或密碼時(shí)則顯示錯(cuò)誤信息。 spring是一個(gè)開源框架,是為了解決企業(yè)應(yīng)用程序開發(fā)復(fù)雜性而 創(chuàng)建的。框架的主要優(yōu)勢(shì)之一就是其分層架構(gòu),分層架構(gòu)允許用戶選 擇使用哪一個(gè)組件,同時(shí)為j2ee應(yīng)用程序開發(fā)提供集成的框架。 spring框架是由rod johnson首先創(chuàng)建的,他在其著作except one-on-one:j2ee design and development中闡述過這個(gè)框 架。簡(jiǎn)單地說,spring是一個(gè)輕量級(jí)的ioc(反向控制)和aop(面 向方面編程)容器框架。 spring框架是由7個(gè)模塊(或組件)組成的(如

18、圖3.1所示)。從 整體上看,這7個(gè)模塊提供了開發(fā)企業(yè)級(jí)應(yīng)用系統(tǒng)所需要的一切。但 是我們不必將系統(tǒng)完全建立在spring框架上,可以自由選擇適合自己 的系統(tǒng)模塊,而不必使用其他模塊。 圖3.1 spring框架的7個(gè)模塊 aop 模塊 o/r 映射模塊 jdbc 和dao模塊 web cibtext 和utility模塊 application context模塊 mvc 框架 核心容器和支持工具 組成spring框架的每個(gè)模塊都可以單獨(dú)存在,或者與其他一個(gè)或多 個(gè)模塊聯(lián)合實(shí)現(xiàn)。各個(gè)模塊功能如下: 核心容器:核心容器提供spring框架的基本功能。核心容器主要組件 是beanfactory,它

19、是工廠(factory)模式的實(shí)現(xiàn)。 context模塊:spring context(上下文)模塊是一個(gè)配置文件, 向spring框架提供上下文信息。spring上下文包括企業(yè)服務(wù),例如jndi (java命名和目錄接口)、ejb、電子郵件、國(guó)際化、校驗(yàn)和調(diào)度功能。 aop模塊:通過配置管理特性,spring aop模塊直接將面向方面的 編程功能集成到了spring框架中。 jdbc和dao模塊:jdbc和dao抽象層提供了有意義的異常層次結(jié)構(gòu), 可用該結(jié)構(gòu)來管理異常處理和不同數(shù)據(jù)庫供應(yīng)商拋出的錯(cuò)誤信息。 orm模塊:spring框架插入了若干個(gè)orm框架,從而提供了orm的 對(duì)象關(guān)系工具,

20、其中包括jdo、hibernate和ibatis sql map。 web模塊:web模塊簡(jiǎn)化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域 對(duì)象的工作。 mvc框架:mvc框架是一個(gè)全功能的構(gòu)建web應(yīng)用程序的mvc實(shí)現(xiàn)。 給出一個(gè)基本的spring入門示例,并演示如何使用spring的aop 將復(fù)雜的業(yè)務(wù)邏輯分離到每個(gè)方面中。 主要步驟: 1.新建并配置項(xiàng)目 新建普通java項(xiàng)目myspring。創(chuàng)建項(xiàng)目的時(shí)候?qū)rc目錄和bin目錄分開。 在myeclipse中選擇add spring capabilities命令,本例使用到spring的aop類庫,選中 第1項(xiàng),其它保持默認(rèn)值不變,單擊fin

21、ish按鈕。 2.編寫bean接口及其實(shí)現(xiàn) 在spring的開發(fā)中無法自動(dòng)生成bean文件,需要用戶手動(dòng)添加。首先定義一個(gè)servicebean 接口,聲明一些業(yè)務(wù)方法。 編寫一個(gè)myservicebean類,然后在該類中實(shí)現(xiàn)servicebean接口。 編寫一個(gè)main方法測(cè)試。 3.配置bean并獲得bean的實(shí)例。 為獲得更大的靈活性和可測(cè)試性。把servicebean交給spring來管理,新建一個(gè)beans.xml 配置文件,放到src目錄下,確保在classpath中能找到此配置文件。 修改main方法,讓spring來管理業(yè)務(wù)bean,再次執(zhí)行程序。與先前main方法相比,最大的

22、 變化是不需要自己管理bean的生命周期,另一個(gè)好處是在不改變實(shí)現(xiàn)類的前提下,動(dòng)態(tài)地為 應(yīng)用程序增加功能。 4.編寫advisor以增強(qiáng)servicebean 編寫一個(gè)logadvisor類,對(duì)每個(gè)業(yè)務(wù)方法調(diào)用前都作一個(gè)記錄。 編寫一個(gè)passwordadvisor類將截獲servicebean的getpassword()方法的返回值,并將 其改為“*”。 編寫一個(gè)exceptionadvisor類,在業(yè)務(wù)方法拋出異常時(shí)能做一些處理。 修改beans.xml文件再次執(zhí)行main方法。 小結(jié) 通過上面的簡(jiǎn)單的例子發(fā)現(xiàn),利用spring非常強(qiáng)大的ioc容器和 aop功能,讓spring容器管理業(yè)務(wù)

23、對(duì)象的生命周期,利用aop增強(qiáng)功 能,卻不影響業(yè)務(wù)接口,從而避免更改客戶端代碼。 servicebean接口: public interface servicebean public void adduser(string username,string password); public void deleteuser(string username); public boolean finduser(string username); public string getpassword(string username); logadvisor類: public void before(me

24、thod m, object args, object target)throws throwable system.out.println(log+target.getclass().getname()+.+m.g etname()+(); passwordadvisor類: public object invoke(methodinvocation invocation) throws throwable object ret=ceed(); if(ret=null) return null; string password=(string)ret; strin

25、gbuffer encrypt=new stringbuffer(password.length(); for(int i=0;iopen perspective-other菜單命令,選擇 “myeclipse database explorer”,右鍵選擇new命令。對(duì)相關(guān) 屬性進(jìn)行設(shè)置。其中,driver name為自定義數(shù)據(jù)庫連接名字, connection url為數(shù)據(jù)庫服務(wù)器主機(jī)名,user name和 password分別為登錄數(shù)據(jù)庫的用戶名和密碼。 單擊driver jars后面的add jars按鈕,添加mysql數(shù)據(jù)庫驅(qū)動(dòng), 點(diǎn)擊finish按鈕,在新建的數(shù)據(jù)庫連接上右擊,選

26、擇open connection命令,打開數(shù)據(jù)庫連接,驗(yàn)證是否連接成功。 2.添加hibernate類庫 返回java編輯窗口,選擇myeclipse-add hibernate capabilites命令,添加hibernate類庫,單擊next按鈕,創(chuàng)建數(shù)據(jù) 庫配置文件,繼續(xù)單擊next按鈕,在db driver下拉列表選擇創(chuàng)建好 的數(shù)據(jù)庫連接,單擊next按鈕,新建sessionfactory文件,最后點(diǎn) 擊finish按鈕。 3.建立數(shù)據(jù)表映射文件 返回myeclipse的數(shù)據(jù)庫瀏覽器窗口,在表stu上右擊,選擇 hibernate reverse engineering,分別設(shè)置ja

27、va源文件位置,新 建java包,點(diǎn)擊finish按鈕。 返回java編輯窗口,在映射文件stu.hbm.xml中將改為這樣id每次自動(dòng)增加1。 4.對(duì)數(shù)據(jù)表進(jìn)行操作 編寫幾個(gè)java類通過hibernate對(duì)數(shù)據(jù)表進(jìn)行測(cè)試操作。 insert.java public class insert public static void main(string args) try configuration c=new configuration(); configuration cc=c.configure(); sessionfactory sf=cc.buildsessionfactory()

28、; session session=sf.opensession(); transaction ts=session.begintransaction(); stu stu=new stu(); stu.setname(劉備); session.save(stu); mit(); session.close(); catch (hibernateexception e) e.printstacktrace(); select.java public class select public static void main(string args) try sessionfactory sf=n

29、ew configuration().configure().buildsessionfactory(); /通過opensession()建立一個(gè)connection連接 session session=sf.opensession(); query query=session.createquery(select t from stu t); list list=query.list(); iterator it=list.iterator(); while(it.hasnext() stu stu=(stu)it.next(); system.out.println(學(xué)號(hào):+stu.ge

30、tid()+ +姓名:+stu.getname(); session.close(); catch (hibernateexception e) / todo auto-generated catch block e.printstacktrace(); update.java public class update public static void main(string args) try configuration c=new configuration(); configuration cc=c.configure(); sessionfactory sf=cc.buildsess

31、ionfactory(); session session=sf.opensession(); transaction ts=session.begintransaction(); /更新id為2的記錄 stu stu=(stu)session.load(stu.class, new integer(2); stu.setname(關(guān)羽); session.flush(); mit(); session.close(); catch (hibernateexception e) e.printstacktrace(); delete.java public class delete public static void main(string args) try

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論