第5章MVC框架開(kāi)發(fā)基礎(chǔ)_第1頁(yè)
第5章MVC框架開(kāi)發(fā)基礎(chǔ)_第2頁(yè)
第5章MVC框架開(kāi)發(fā)基礎(chǔ)_第3頁(yè)
第5章MVC框架開(kāi)發(fā)基礎(chǔ)_第4頁(yè)
第5章MVC框架開(kāi)發(fā)基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章MVC框架開(kāi)發(fā)基礎(chǔ)5.1MVC基本思想5.25.3MVC關(guān)鍵技術(shù)MVC綜合開(kāi)發(fā)實(shí)戰(zhàn)5.1MVC基本思想MVC把應(yīng)用程序分成3大基本模塊:模型(Model,簡(jiǎn)稱M)、視圖(View,簡(jiǎn)稱V)和控制器(Controller,簡(jiǎn)稱C),它們(三者聯(lián)合即MVC)分別擔(dān)當(dāng)不同的任務(wù)。這幾個(gè)模塊各自的職能及相互關(guān)系,如圖5.1所示。5.2MVC關(guān)鍵技術(shù)5.2.1DAO技術(shù)1.DAO原理DAO(DataAccessObject,數(shù)據(jù)訪問(wèn)對(duì)象)是程序員定義的一種接口,它介于數(shù)據(jù)庫(kù)資源和業(yè)務(wù)邏輯之間,其意圖是將底層數(shù)據(jù)訪問(wèn)操作與高層業(yè)務(wù)邏輯完全分開(kāi)。在數(shù)據(jù)庫(kù)編程的時(shí)候,經(jīng)常遇到這樣的情況:一個(gè)用戶的數(shù)據(jù)訪問(wèn)模塊,里面的操作方法有insert、delete、update、select等,對(duì)不同數(shù)據(jù)庫(kù)其實(shí)現(xiàn)的細(xì)節(jié)是不同的。因此,不太可能針對(duì)每種類(lèi)型的數(shù)據(jù)庫(kù)做一個(gè)通用的對(duì)象來(lái)實(shí)現(xiàn)這些操作。這時(shí)候,就可以定義一個(gè)用戶數(shù)據(jù)訪問(wèn)對(duì)象的接口IUserDAO,提供insert、delete、update、select等抽象方法。不同類(lèi)型數(shù)據(jù)庫(kù)的用戶訪問(wèn)對(duì)象只要實(shí)現(xiàn)這個(gè)接口就可以了,如圖5.2所示。5.2.1DAO技術(shù)2.舉例在【實(shí)例五】(4.1.2節(jié))中,利用Hibernate的ORM功能實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫(kù)表的對(duì)象化操作,然而,validate.jsp(登錄驗(yàn)證)的代碼中仍然存留有操作數(shù)據(jù)庫(kù)的語(yǔ)句,如:……//查詢userTable表中的記錄Stringhql="fromUserTableuwhereu.username=?andu.password=?";Queryquery=HibernateSessionFactory.getSession().createQuery(hql);query.setParameter(0,usr);query.setParameter(1,pwd);Listusers=query.list();……5.2.1DAO技術(shù)【實(shí)例六】采用JSP+DAO+Hibernate方式開(kāi)發(fā)一個(gè)Web登錄程序。要求:用DAO接口來(lái)操作Hibernate生成的UserTable對(duì)象。(1)創(chuàng)建JavaEE項(xiàng)目新建JavaEE項(xiàng)目,項(xiàng)目命名jsp_dao_hibernate。在項(xiàng)目src下創(chuàng)建兩個(gè)包:org.easybooks.test.factory和org.easybooks.test.model.vo。(2)添加Hibernate及生成POJO類(lèi)操作方法與【實(shí)例五】(4.1.2節(jié))的第(2)、(3)步完全相同,不再贅述。5.2.1DAO技術(shù)(3)定義并實(shí)現(xiàn)DAO在項(xiàng)目src下創(chuàng)建包org.easybooks.test.dao,右擊選擇菜單【New】→【Interface】,在如圖5.3所示的【NewJavaInterface】窗口的Name欄輸入IUserTableDAO,單擊【Finish】按鈕,創(chuàng)建一個(gè)DAO接口。5.2.1DAO技術(shù)在IUserTableDAO.java中定義DAO接口,代碼如下:packageorg.easybooks.test.dao;importorg.easybooks.test.model.vo.*;publicinterfaceIUserTableDAO{ publicUserTablevalidateUser(Stringusername,Stringpassword); //方法:驗(yàn)證用戶名密碼}接口中定義了一個(gè)validateUser()方法,用于驗(yàn)證用戶,這個(gè)方法的具體實(shí)現(xiàn)在org.easybooks.test.dao.impl包下的UserTableDAO類(lèi)中。在src下創(chuàng)建org.easybooks.test.dao.impl包,在包中創(chuàng)建類(lèi)UserTableDAO,此類(lèi)實(shí)現(xiàn)了接口中的validateUser()方法。5.2.1DAO技術(shù)(4)創(chuàng)建JSP本例也有4個(gè)JSP文件,其中l(wèi)ogin.jsp、main.jsp和error.jsp這3個(gè)文件的源碼與【實(shí)例五】(4.1.2節(jié))程序的完全相同,但validate.jsp文件的代碼有了很大的改變。validate.jsp文件的代碼。5.2.2整合Hibernate與Struts21.MVC的實(shí)現(xiàn)①用Hibernate把數(shù)據(jù)庫(kù)表映射為POJO類(lèi),并用DAO技術(shù)將其封裝入接口,形成持久層數(shù)據(jù)模型(M)。②JSP文件單純地只作為網(wǎng)頁(yè)視圖(V),顯示應(yīng)用程序界面和數(shù)據(jù)。③Struts2擔(dān)任控制器(C)的角色,負(fù)責(zé)按程序流程調(diào)用數(shù)據(jù)模型和控制網(wǎng)頁(yè)跳轉(zhuǎn)。顯然,這需要同時(shí)整合Struts2和Hibernate兩個(gè)框架,參考圖3.3,得到如圖5.4所示JavaEE系統(tǒng)的MVC解決方案。5.2.2整合Hibernate與Struts22.舉例【實(shí)例七】采用JSP+Struts2+DAO+Hibernate方式開(kāi)發(fā)一個(gè)Web登錄程序。要求:將前面介紹過(guò)的Struts2和Hibernate兩大框架整合起來(lái)使用,參照?qǐng)D5.4所示的系統(tǒng)結(jié)構(gòu),嚴(yán)格貫徹MVC的思想開(kāi)發(fā)。其中,JSP作為視圖V顯示登錄、成功或失敗頁(yè);Struts2作為控制器C處理頁(yè)面跳轉(zhuǎn);Hibernate用作數(shù)據(jù)模型M,它與前臺(tái)程序的接口以DAO形式提供。(1)創(chuàng)建JavaEE項(xiàng)目新建JavaEE項(xiàng)目,項(xiàng)目命名jsp_struts2_dao_hibernate。在項(xiàng)目src下創(chuàng)建兩個(gè)包:org.easybooks.test.factory和org.easybooks.test.model.vo。5.2.2整合Hibernate與Struts2(2)M層開(kāi)發(fā)——添加Hibernate、生成POJO類(lèi)及編寫(xiě)DAO①添加Hibernate。操作方法同【實(shí)例五】(4.1.2節(jié))第(2)步,略。②生成POJO類(lèi)。操作方法同【實(shí)例五】第(3)步,略。③在項(xiàng)目src下創(chuàng)建包org.easybooks.test.dao和org.easybooks.test.dao.impl,分別用于存放DAO接口IUserTableDAO及其實(shí)現(xiàn)類(lèi)UserTableDAO。DAO接口和類(lèi)的代碼與【實(shí)例六】的完全相同,在此省略。5.2.2整合Hibernate與Struts2(3)C層開(kāi)發(fā)——加載Struts2包、實(shí)現(xiàn)Action及控制器配置①加載、配置Struts2。步驟與【實(shí)例四】(3.1.2節(jié))第(2)、(3)步相同,稍有差別的是,這里僅需加載Struts2的9個(gè)jar包即可,因在剛剛添加Hibernate時(shí),數(shù)據(jù)庫(kù)的驅(qū)動(dòng)包已被自動(dòng)載入進(jìn)來(lái),無(wú)須重復(fù)加載。配置文件web.xml內(nèi)容與【實(shí)例四】完全相同,不再給出。②實(shí)現(xiàn)Action。在項(xiàng)目src文件夾下建立包org.easybooks.test.action,在包里創(chuàng)建MainAction類(lèi),代碼所示。將上段代碼與【實(shí)例四】第(6)步的MainAction類(lèi)的代碼比較一下,就會(huì)發(fā)現(xiàn),其中已沒(méi)有操作數(shù)據(jù)庫(kù)的代碼了!由此可見(jiàn)使用DAO封裝所帶來(lái)的好處。③配置Action。在src下創(chuàng)建文件struts.xml,配置內(nèi)容與【實(shí)例四】完全一樣,在此省略。5.2.2整合Hibernate與Struts2(4)V層開(kāi)發(fā)——編寫(xiě)JSP文件有了M、C這兩層的功能,V層開(kāi)發(fā)的任務(wù)就簡(jiǎn)單多了,只剩下編寫(xiě)3個(gè)JSP文件:login.jsp、main.jsp和error.jsp。它們的代碼與【實(shí)例四】的也完全一樣,略。部署運(yùn)行程序,效果如圖2.13所示。5.3MVC綜合開(kāi)發(fā)實(shí)戰(zhàn)5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)【綜合案例四】采用MVC(JSP+Struts2+DAO+Hibernate)方式開(kāi)發(fā)一個(gè)學(xué)生選課系統(tǒng)。學(xué)生登錄系統(tǒng)后,可以查看、修改個(gè)人信息;查看個(gè)人選課情況;選定課程及退選課程。要求:在【實(shí)例七】(5.2.2節(jié))基礎(chǔ)上修改擴(kuò)充而成,【實(shí)例七】已經(jīng)具備了一個(gè)完整的MVC項(xiàng)目的框架,但它只有最簡(jiǎn)單的Web登錄功能,本例就以它為“藍(lán)本”進(jìn)一步擴(kuò)充成一個(gè)實(shí)現(xiàn)多種應(yīng)用功能的“學(xué)生選課系統(tǒng)”。項(xiàng)目嚴(yán)格遵照MVC模式去開(kāi)發(fā),后臺(tái)數(shù)據(jù)庫(kù)用SQLServer2008/2012。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)1.建立數(shù)據(jù)庫(kù)及表結(jié)構(gòu)該系統(tǒng)需要建立登錄表(DLB)、學(xué)生表(XSB)、專(zhuān)業(yè)表(ZYB)、課程表(KCB)以及學(xué)生課程表(XS_KCB)即連接表。其中學(xué)生表和專(zhuān)業(yè)表是多對(duì)一關(guān)系,學(xué)生表和課程表是多對(duì)多關(guān)系。具體表結(jié)構(gòu)見(jiàn)附錄A,完成后預(yù)先錄入樣本數(shù)據(jù)。2.創(chuàng)建JavaEE項(xiàng)目新建JavaEE項(xiàng)目,項(xiàng)目命名Struts_Hibernate。在項(xiàng)目src下創(chuàng)建兩個(gè)包:org.factory和org.model。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)3.登錄選課系統(tǒng)(1)M層開(kāi)發(fā)①添加Hibernate。操作方法同【實(shí)例五】(4.1節(jié))第(2)步,生成的HibernateSessionFactory.java文件置于org.factory包中。②生成POJO類(lèi)及映射文件。操作方法同【實(shí)例五】第(3)步,不過(guò)這里要生成登錄表、課程表、學(xué)生表和專(zhuān)業(yè)表一共4個(gè)表的POJO類(lèi)及其映射文件,統(tǒng)一置于org.model包下。因各表間有對(duì)應(yīng)的關(guān)系,除了登錄表、專(zhuān)業(yè)表的對(duì)應(yīng)類(lèi)及映射文件外,其它需要修改(加黑語(yǔ)句)。Xsb.java代碼改為。對(duì)應(yīng)映射文件Xsb.hbm.xml代碼改為。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)Kcb.java代碼改為。對(duì)應(yīng)映射文件Kcb.hbm.xml代碼改為:…<hibernate-mapping><classname="org.model.Kcb"table="KCB"schema="dbo"catalog="XSCJ"> …<!--與學(xué)生表是多對(duì)多關(guān)系--><setname="xss"table="XS_KCB"lazy="true"inverse="true"> <keycolumn="KCH"></key> <many-to-manyclass="org.model.Xsb"column="XH"></many-to-many></set></class></hibernate-mapping>5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)為了使程序能正確處理多對(duì)多關(guān)系和操作連接表,對(duì)自動(dòng)生成的hibernate.cfg.xml配置文件要進(jìn)行微小的改動(dòng),指明所連接到的數(shù)據(jù)庫(kù)名稱,如下:…<hibernate-configuration> <session-factory> <propertyname="dialect"> org.hibernate.dialect.SQLServerDialect </property> <propertyname="connection.url"> jdbc:sqlserver://localhost:1433;databaseName=XSCJ </property> … </session-factory></hibernate-configuration>5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)③DAO層組件實(shí)現(xiàn)。在項(xiàng)目src下創(chuàng)建包org.dao和org.dao.impl,分別用于存放DAO接口及其實(shí)現(xiàn)類(lèi)。

登錄接口。登錄接口中封裝了validate方法,完成對(duì)用戶的驗(yàn)證功能,系統(tǒng)根據(jù)輸入的學(xué)號(hào)和口令進(jìn)行用戶合法性驗(yàn)證,驗(yàn)證通過(guò)才允許進(jìn)入系統(tǒng)主頁(yè)面。DlDao.java接口,定義如下:packageorg.dao;importorg.model.Dlb;publicinterfaceDlDao{ //方法:根據(jù)學(xué)號(hào)和口令查詢 publicDlbvalidate(Stringxh,Stringkl);}其對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)DlDaoImp.java,代碼為。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)

學(xué)生接口。學(xué)生接口中封裝了getOneXs和update兩個(gè)方法,分別用于獲取指定學(xué)號(hào)的學(xué)生個(gè)人信息和修改某個(gè)學(xué)生的信息。XsDao.java接口,定義如下:packageorg.dao;importorg.model.Xsb;publicinterfaceXsDao{ //方法:根據(jù)學(xué)號(hào)查詢學(xué)生信息 publicXsbgetOneXs(Stringxh); //方法:修改學(xué)生信息 publicvoidupdate(Xsbxs);}其對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)XsDaoImp.java,代碼為。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)

專(zhuān)業(yè)接口。專(zhuān)業(yè)接口中封裝了getOneZy和getAll兩個(gè)方法,分別用于查詢某個(gè)專(zhuān)業(yè)的信息以及獲取所有專(zhuān)業(yè)信息。ZyDao.java接口,定義如下:packageorg.dao;importjava.util.*;importorg.model.Zyb;publicinterfaceZyDao{ //方法:根據(jù)專(zhuān)業(yè)

ID查詢專(zhuān)業(yè)信息 publicZybgetOneZy(IntegerzyId); //方法:查詢所有專(zhuān)業(yè)信息 publicListgetAll();}對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)ZyDaoImp.java,代碼為。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)

課程接口。課程接口中封裝了getOneKc和getAll兩個(gè)方法,分別用于查詢某門(mén)課程的信息以及獲取所有課程的信息。KcDao.java接口,定義如下:packageorg.dao;importjava.util.*;importorg.model.Kcb;publicinterfaceKcDao{ //方法:根據(jù)課程號(hào)查詢課程信息 publicKcbgetOneKc(Stringkch); //方法:查詢所有課程的信息 publicListgetAll();}對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)KcDaoImp.java,代碼為。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)(2)C層開(kāi)發(fā)①加載、配置Struts2。步驟與【實(shí)例四】(3.1.2節(jié))第(2)、(3)步相同,稍有差別的是,這里僅需加載Struts2的9個(gè)jar包即可,因在添加Hibernate時(shí),數(shù)據(jù)庫(kù)的驅(qū)動(dòng)包已被自動(dòng)載入,無(wú)須重復(fù)加載。配置文件web.xml內(nèi)容與【實(shí)例四】完全相同,不再給出。②實(shí)現(xiàn)Action。在項(xiàng)目src文件夾下建立包org.action,在包里創(chuàng)建LoginAction類(lèi),代碼所示。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)③配置Action。在src下創(chuàng)建文件struts.xml,配置如下:…<struts> <packagename="default"extends="struts-default"> <!--用戶登錄

--> <actionname="login"class="org.action.LoginAction"> <resultname="success">/main.jsp</result> <resultname="error">/login.jsp</result> </action> //這里以后添加Action配置,后面配置的Action都要添加在這里 </package></struts>5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)(3)V層開(kāi)發(fā)①登錄界面。登錄界面由login.jsp實(shí)現(xiàn),代碼為。②主頁(yè)面。選課系統(tǒng)的主頁(yè)面main.jsp由head.jsp、left.jsp及rigth.jsp組合而成。

主頁(yè)。主頁(yè)main.jsp,代碼如下:<%@pagelanguage="java"pageEncoding="UTF-8"%><%@tagliburi="/struts-tags"prefix="s"%><html><head> <title>學(xué)生選課系統(tǒng)</title></head><framesetrows="30%,*"border="0"> <framesrc="head.jsp"> <framesetcols="15%,*"border="1"> <framesrc="left.jsp"> <framesrc="right.jsp"name="right"> </frameset></frameset></html>5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)

主頁(yè)頭。主頁(yè)頭部依然是前面的那個(gè)主題標(biāo)頭圖片,head.jsp內(nèi)容為:<%@pagelanguage="java"pageEncoding="UTF-8"%><html><bodybgcolor="#D9DFAA"> <imgsrc="/Struts_Hibernate/image/head.jpg"></body></html>5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)

功能導(dǎo)航。頁(yè)面左部是一系列功能導(dǎo)航的鏈接,單擊提交給不同功能的Action模塊去處理。left.jsp代碼如下:<%@pagelanguage="java"pageEncoding="UTF-8"%><html><bodybgcolor="#D9DFAA"> <ahref="xsInfo.action"target="right">查詢個(gè)人信息</a><p> <ahref="updateXsInfo.action"target="right">修改個(gè)人信息</a><p> <ahref="getXsKcs.action"target="right">個(gè)人選課情況</a><p> <ahref="getAllKc.action"target="right">所有課程信息</a><p></body></html>5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)

內(nèi)容區(qū)。頁(yè)面右部是加載網(wǎng)頁(yè)顯示內(nèi)容的區(qū)域,初始為空白。right.jsp是一個(gè)僅顯示背景色的空頁(yè),如下:<%@pagelanguage="java"pageEncoding="UTF-8"%><html><bodybgcolor="#D9DFAA"></body></html>到目前為止,學(xué)生選課系統(tǒng)的MVC框架及最基本的登錄功能已經(jīng)做好了,部署運(yùn)行一下查看效果。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)初始登錄頁(yè)如圖5.5所示。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)登錄成功后進(jìn)入主界面,如圖5.6所示。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)4.查詢個(gè)人信息主界面左側(cè)第一個(gè)導(dǎo)航功能是“查詢個(gè)人信息”,從left.jsp中可以發(fā)現(xiàn),其提交給xsInfo.action,對(duì)應(yīng)Action配置如下:<actionname="xsInfo"class="org.action.XsAction"> <resultname="success">/xsInfo.jsp</result></action><actionname="getImage"class="org.action.XsAction"method="getImage"></action> 由于學(xué)生的個(gè)人信息中有照片,這里的處理思路是把要處理照片的信息提交給Action類(lèi)來(lái)讀取,所以要加入名為getImage的Action。編寫(xiě)XsAction來(lái)實(shí)現(xiàn)學(xué)生信息的查詢。XsAction.java的代碼所示。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)成功后跳轉(zhuǎn)的頁(yè)面xsInfo.jsp,代碼為。這樣查詢學(xué)生個(gè)人信息的功能就完成了,部署運(yùn)行程序,登錄,單擊“查詢個(gè)人信息”導(dǎo)航鏈接,可以查看當(dāng)前用戶的個(gè)人信息,如圖5.7所示。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)5.修改個(gè)人信息(1)呈現(xiàn)修改學(xué)生信息頁(yè)下面再來(lái)開(kāi)發(fā)修改學(xué)生信息的功能。單擊“修改個(gè)人信息”超鏈接,從left.jsp中可以看出提交給了updateXsInfo.action,該Action的配置為:<actionname="updateXsInfo"class="org.action.XsAction"method="updateXsInfo"> <resultname="success">/updateXsInfo.jsp</result></action>5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)所以就要在XsAction類(lèi)中加入下面的方法:

//進(jìn)入修改學(xué)生信息頁(yè)面 publicStringupdateXsInfo()throwsException{ //獲取當(dāng)前用戶對(duì)象 Mapsession=(Map)ActionContext.getContext().getSession(); Dlbuser=(Dlb)session.get("user");

xsDao=newXsDaoImp(); ZyDaozyDao=newZyDaoImp(); //取出所有專(zhuān)業(yè)信息,因?yàn)樵谛薷膶W(xué)生信息時(shí),專(zhuān)業(yè)欄是下拉列表選擇專(zhuān)業(yè),而不是學(xué)生自己隨便填寫(xiě)

Listzys=zyDao.getAll(); Xsbxs=xsDao.getOneXs(user.getXh()); //得到當(dāng)前學(xué)生的信息 Maprequest=(Map)ActionContext.getContext().get("request"); request.put("zys",zys); request.put("xs",xs); returnSUCCESS; }修改學(xué)生信息頁(yè)面updateXsInfo.jsp的代碼所示。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)(2)修改操作的實(shí)現(xiàn)當(dāng)單擊【修改】按鈕后,就把學(xué)生自己填寫(xiě)的內(nèi)容提交給了updateXs.action,對(duì)應(yīng)Action的配置如下:<actionname="updateXs"class="org.action.XsAction"method="updateXs"> <resultname="success">/updateXs_success.jsp</result></action>XsAction類(lèi)中要加入下面的代碼來(lái)處理請(qǐng)求。修改成功后跳轉(zhuǎn)到updateXs_success.jsp頁(yè)面,代碼如下:<%@pagelanguage="java"pageEncoding="UTF-8"%><html><bodybgcolor="#D9DFAA">

恭喜你,修改成功!</body></html>5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)部署運(yùn)行程序,登錄、單擊主頁(yè)上的“修改個(gè)人信息”導(dǎo)航鏈接,程序以控件表單的方式呈現(xiàn)出該用戶原來(lái)的舊信息以供修改,如圖5.8所示。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)把用戶信息修改為如圖5.9所示狀態(tài):姓名“王林”改為“周何駿”;專(zhuān)業(yè)下拉改選為“通信工程”;出生時(shí)間改為“1995-09-25”(必須嚴(yán)格按此格式填寫(xiě));增加備注信息“輔修計(jì)算機(jī)”;總學(xué)分改為100;單擊【瀏覽…】按鈕,彈出對(duì)話框,選擇某個(gè)路徑下預(yù)先保存的照片。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)完成后單擊【修改】按鈕提交,系統(tǒng)會(huì)提示用戶修改成功。然后再單擊“查詢個(gè)人信息”超鏈接就會(huì)出現(xiàn)新的個(gè)人信息頁(yè),如圖5.10所示。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)6.選課與退選課程(1)查看個(gè)人選課情況left.jsp文件的第三個(gè)超鏈接是查詢學(xué)生的選課情況,這個(gè)功能很容易實(shí)現(xiàn)。只要查出該學(xué)生信息,由于級(jí)聯(lián)到第三張表的信息,所以只要取出該生信息的Set集合的內(nèi)容,遍歷出來(lái)就行了。下面是Action配置代碼:<actionname="getXsKcs"class="org.action.XsAction"method="getXsKcs"> <resultname="success">/xsKcs.jsp</result></action>5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)對(duì)應(yīng)的XsAction類(lèi)中的處理方法,代碼如下:

//得到學(xué)生選修的課程 publicStringgetXsKcs()throwsException{ Mapsession=(Map)ActionContext.getContext().getSession(); Dlbuser=(Dlb)session.get("user"); Stringxh=user.getXh(); Xsbxsb=newXsDaoImp().getOneXs(xh); //得到當(dāng)前學(xué)生的信息 Setlist=xsb.getKcs(); //取出選修的課程

Set Maprequest=(Map)ActionContext.getContext().get("request"); request.put("list",list); //保存 returnSUCCESS; }查詢成功后的xsKcs.jsp頁(yè)面,代碼所示。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)部署運(yùn)行程序,登錄后單擊“個(gè)人選課情況”超鏈接,可以查看當(dāng)前用戶的個(gè)人選課情況,如圖5.11所示。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)(2)查詢所有課程信息在left.jsp中還有一個(gè)鏈接就是查詢所有課程,其實(shí)查詢出所有課程就是為了方便讓學(xué)生選課,其Action配置如下:<actionname="getAllKc"class="org.action.KcAction"> <resultname="success">/allKc.jsp</result></action>5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)對(duì)應(yīng)Action實(shí)現(xiàn)類(lèi),可以發(fā)現(xiàn)一個(gè)新的Action類(lèi)名為KcAction.java,代碼如下:packageorg.action;importjava.util.*;importorg.dao.*;importorg.dao.imp.*;importcom.opensymphony.xwork2.*;publicclassKcActionextendsActionSupport{ publicStringexecute()throwsException{ KcDaokcDao=newKcDaoImp(); Listlist=kcDao.getAll(); //獲取所有課程信息 Maprequest=(Map)ActionContext.getContext().get("request"); request.put("list",list); //保存到request returnSUCCESS; }}顯示所有課程信息列表的JSP頁(yè)allKc.jsp,代碼為。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)部署運(yùn)行程序,登錄、在主頁(yè)上單擊“所有課程信息”超鏈接,可顯示所有課程的信息列表,如圖5.12所示。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)(3)選修課程在圖5.12中,每個(gè)課程的后面都有個(gè)“選修”超鏈接,提交給selectKc.action,該Action的配置如下:<actionname="selectKc"class="org.action.XsAction"method="selectKc"> <resultname="success">/selectKc_success.jsp</result> <resultname="error">/selectKc_fail.jsp</result></action>5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)對(duì)應(yīng)Action實(shí)現(xiàn)類(lèi)的方法(由于是學(xué)生選課,所以該方法在XsAction中),代碼如下:

//選定課程 publicStringselectKc()throwsException{ Mapsession=(Map)ActionContext.getContext().getSession(); Stringxh=((Dlb)session.get("user")).getXh(); xsDao=newXsDaoImp(); Xsbxs3=xsDao.getOneXs(xh); Setlist=xs3.getKcs(); Iteratoriter=list.iterator(); //選修課程時(shí)先遍歷已經(jīng)選的課程,如果在已經(jīng)選修的課程中找到就返回

ERROR while(iter.hasNext()){ Kcbkc3=(Kcb)iter.next(); if(kc3.getKch().equals(kcb.getKch())){ returnERROR; } } list.add(newKcDaoImp().getOneKc(kcb.getKch()));//如果沒(méi)找到,就添加到集合中 xs3.setKcs(list); xsDao.update(xs3); returnSUCCESS; }5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)成功頁(yè)面selectKc_success.jsp,代碼如下:<%@pagelanguage="java"pageEncoding="UTF-8"%><html><bodybgcolor="#D9DFAA">

你已經(jīng)成功選擇該課程!</body></html>失敗頁(yè)面selectKc_fail.jsp,代碼如下:<%@pagelanguage="java"pageEncoding="UTF-8"%><html><bodybgcolor="#D9DFAA">

你已經(jīng)選擇該課程,請(qǐng)不要重復(fù)選?。?lt;/body></html>5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)部署運(yùn)行程序,登錄、單擊“所有課程信息”,單擊課程信息表格(如圖5.12所示)中某門(mén)課右邊的“選修”鏈接,如圖5.13所示(這里以選302號(hào)“軟件工程”課為例演示),后臺(tái)就會(huì)判斷該用戶是否已經(jīng)選修了該門(mén)課,如果已經(jīng)選修就會(huì)提示用戶已選,不要重復(fù)選?。蝗绻麤](méi)有選修,就會(huì)提示用戶選修成功。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)然后再查看個(gè)人選課情況,會(huì)多出剛剛選修的課程信息,如圖5.14所示。5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)(4)退選課程退選操作很簡(jiǎn)單,只要把該學(xué)生的這個(gè)課程從Set中remove就行了。對(duì)應(yīng)的Action配置如下:<actionname="deleteKc"class="org.action.XsAction"method="deleteKc"> <resultname="success">/deleteKc_success.jsp</result></action>5.3.1MVC綜合開(kāi)發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQLServer)對(duì)應(yīng)XsAction類(lèi)中的處理方法,代碼如下:

//退選課程 publ

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論