




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目錄1. 客商信息編碼系統(tǒng)之ssh技術(shù)支持41.1 任務(wù)目標(biāo)101.2任務(wù)描述111.3 任務(wù)實(shí)施111.4 任務(wù)小結(jié)211.5 知識(shí)拓展221.5.1action221.5.2 bean標(biāo)簽261.5.3 web.xml常用元素271.5.4 checkbox291.5.5 div291.5.6 hidden301.5.7 label301.5.8 param311.5.9 password311.5.10 property311.5.11 radio321.5.12 set331.5.13 submit341.5.14 text361.5.15 textarea361.5.16 textf
2、ield371.5.17 url381.6 課后實(shí)踐392、客商信息編碼系統(tǒng)之系統(tǒng)設(shè)計(jì)392.1 任務(wù)目標(biāo)392.2 任務(wù)描述402.3 任務(wù)實(shí)施402.4 任務(wù)小結(jié)492.5 知識(shí)拓展492.6 課后實(shí)踐533、客商信息編碼系統(tǒng)之?dāng)?shù)據(jù)庫(kù)設(shè)計(jì)533.1 任務(wù)目標(biāo)533.2 任務(wù)描述543.3 任務(wù)實(shí)施543.4 任務(wù)小結(jié)633.5 知識(shí)拓展633.6 課后實(shí)踐634.客商信息編碼系統(tǒng)之用戶管理644.1任務(wù)目標(biāo)644.2任務(wù)描述644.3.1任務(wù)實(shí)施654.3.2普通用戶管理模塊774.3.3代碼編寫(xiě)794.3.4 struts配置854.3.5 application配置864.4任務(wù)小結(jié)9
3、04.5知識(shí)拓展904.6課后實(shí)踐(博客系統(tǒng))905、客商信息編碼系統(tǒng)之新增客商申請(qǐng)與審批905.1任務(wù)目標(biāo)915.2任務(wù)描述915.3任務(wù)實(shí)施915.3.1.客商申請(qǐng)模塊915.3.2客商申請(qǐng)審批模塊1005.3.3 代碼編寫(xiě)1105.3.4 struts配置1145.3.5application1155.4任務(wù)小結(jié)1175.5知識(shí)拓展1175.6課后實(shí)踐(博客系統(tǒng))1216.客商信息編碼系統(tǒng)之客商變更申請(qǐng)與審批1216.1任務(wù)目標(biāo)1216.2任務(wù)描述1216.3任務(wù)實(shí)施1226.3.1 客商變更申請(qǐng)1226.3.2客商變更審批1306.3.3代碼編寫(xiě)1386.3.4 struts配置142
4、6.3.5 application配置1436.4任務(wù)小結(jié)1476.5知識(shí)拓展1476.6課后實(shí)踐(博客系統(tǒng))1507.客商信息編碼系統(tǒng)之客商合并申請(qǐng)與審批1507.1任務(wù)目標(biāo)1517.2任務(wù)描述1517.2.1.普通用戶的合并申請(qǐng)1517.2.2.管理員的合并審批1517.3任務(wù)實(shí)施1517.3.1相關(guān)操作(注:普通用戶只有申請(qǐng)的權(quán)限)1517.3.2管理員用戶的相關(guān)操作(注:管理員用戶只有審批的權(quán)限)1587.3.3 代碼編寫(xiě)1707.3.5 struts配置1757.3.5 application配置1767.4任務(wù)小結(jié)1817.5知識(shí)拓展1817.6課后實(shí)踐1818.客商信息編碼系統(tǒng)之
5、消息管理1828.1任務(wù)目標(biāo)1838.2任務(wù)描述1838.3任務(wù)實(shí)施1858.3.1個(gè)人消息管理模塊1858.3.2.系統(tǒng)消息管理模塊2068.3.3.公告消息管理模塊2208.3.4 struts.xml文件代碼2448.3.5 applicationcontext.xml文件代碼2478.4任務(wù)小結(jié)2528.5知識(shí)拓展2528.6課后實(shí)踐(博客系統(tǒng))2629.客商信息編碼系統(tǒng)之系統(tǒng)測(cè)試與發(fā)布2629.1任務(wù)目標(biāo)2629.2任務(wù)描述2639.3任務(wù)實(shí)施2659.4任務(wù)小結(jié)2669.5知識(shí)拓展2689.6課后實(shí)踐(博客系統(tǒng))26810、客商信息編碼系統(tǒng)之實(shí)用組件(第三方組件)26810.1 任
6、務(wù)目標(biāo)26810.2 任務(wù)描述26810.3 任務(wù)實(shí)施26910.3.1日歷組件26910.3.2文本編輯器組件27310.4 任務(wù)小結(jié)27710.5 知識(shí)拓展27710.6 課后實(shí)踐2781. 客商信息編碼系統(tǒng)之ssh技術(shù)支持 內(nèi)容導(dǎo)讀ssh 在j2ee項(xiàng)目中表示了3種框架,即 spring + struts +hibernate。如圖1圖1-1 ssh框架圖1)struts:struts 對(duì)model,view和controller都提供了對(duì)應(yīng)的組件。 actionservlet,這個(gè)類是struts的核心控制器,負(fù)責(zé)攔截來(lái)自用戶的請(qǐng)求。圖2中,actionservlet,這個(gè)類是stru
7、ts的核心控制器,負(fù)責(zé)攔截來(lái)自用戶的請(qǐng)求。 圖1-2 struts 結(jié)構(gòu)圖 action,這個(gè)類通常由用戶提供,該控制器負(fù)責(zé)接收來(lái)自actionservlet的請(qǐng)求,并根據(jù)該請(qǐng)求調(diào)用模型的業(yè)務(wù)邏輯方法處理請(qǐng)求,并將處理結(jié)果返回給jsp頁(yè)面顯示。(1)model部分 由javabean構(gòu)成。javabean則封裝了底層的業(yè)務(wù)邏輯,包括數(shù)據(jù)庫(kù)訪問(wèn)等。(2)view部分 該部分采用jsp實(shí)現(xiàn)。 struts提供了豐富的標(biāo)簽庫(kù),通過(guò)標(biāo)簽庫(kù)可以減少腳本的使用,自定義的標(biāo)簽庫(kù)可以實(shí)現(xiàn)與 model的有效交互,并增加了現(xiàn)實(shí)功能。對(duì)應(yīng)上圖的jsp部分。(3)controller組件 controller組件有
8、兩個(gè)部分組成系統(tǒng)核心控制器,業(yè)務(wù)邏輯控制器。 系統(tǒng)核心控制器,對(duì)應(yīng)上圖的actionservlet。該控制器由struts框架提供,繼承httpservlet類,因此可以配置成標(biāo)注的servlet。該控制器負(fù)責(zé)攔截所有的http請(qǐng)求,然后根據(jù)用戶請(qǐng)求決定是否要轉(zhuǎn)給業(yè)務(wù)邏輯控制器。 業(yè)務(wù)邏輯控制器,負(fù)責(zé)處理用戶請(qǐng)求,本身不具備處理能力,而是調(diào)用model來(lái)完成處理。對(duì)應(yīng) action部分。2)spring: spring是一個(gè)開(kāi)源框架,它由rod johnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。spring使用基本的javabean來(lái)完成以前只可能由ejb完成的事情。然而,spri
9、ng的用途不僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何java應(yīng)用都可以從spring中受益。 目的:解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性 功能:使用基本的javabean代替ejb,并提供了更多的企業(yè)應(yīng)用功能 范圍:任何java應(yīng)用 簡(jiǎn)單來(lái)說(shuō),spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(ioc)和面向切面(aop)的容器框架。輕量從大小與開(kāi)銷兩方面而言spring都是輕量的。完整的spring 框架可以在一個(gè)大小只有1mb多的jar文件里發(fā)布。并且spring所需的處理開(kāi)銷也是微不足道的。此外,spring是非侵入式的:典型地,spring應(yīng)用中的對(duì)象不依賴于spring的特定類。控制反轉(zhuǎn)
10、spring通過(guò)一種稱作控制反轉(zhuǎn)(ioc)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了ioc,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過(guò)被動(dòng)的方式傳遞進(jìn)來(lái),而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴對(duì)象。你可以認(rèn)為ioc與jndi相反不是對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴傳遞給它。面向切面spring提供了面向切面編程的豐富支持,允許通過(guò)分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開(kāi)發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的完成業(yè)務(wù)邏輯僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。容器spring包含并管理應(yīng)用對(duì)象
11、的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配置你的每個(gè)bean如何被創(chuàng)建基于一個(gè)可配置原型(prototype),你的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例以及它們是如何相互關(guān)聯(lián)的。然而,spring不應(yīng)該被混同于傳統(tǒng)的重量級(jí)的ejb容器,它們經(jīng)常是龐大與笨重的,難以使用??蚣躶pring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。在 spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)xml文件里。spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開(kāi)發(fā)留給了你。 所有spring的這些特征使你能夠編寫(xiě)更干凈、更可管理、并且更易于測(cè)試
12、的代碼。它們也為 spring中的各種模塊提供了基礎(chǔ)支持。spring 框架結(jié)構(gòu)如圖圖1-3 spring 框架結(jié)構(gòu)如圖3)hibernate: hibernate是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架,它對(duì)jdbc進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得java程序員可以隨心所欲的使用對(duì)象編程思維來(lái)操縱數(shù)據(jù)庫(kù)。 hibernate可以應(yīng)用在任何使用jdbc的場(chǎng)合,既可以在java的客戶端程序使用,也可以在servlet/jsp的web應(yīng)用中使用,最具革命意義的是,hibernate可以在應(yīng)用ejb的j2ee架構(gòu)中取代cmp,完成數(shù)據(jù)持久化的重任。 hibernate的核心接口一共有5個(gè),分別為:sess
13、ion、sessionfactory、 transaction、query和configuration。這5 個(gè)核心接口在任何開(kāi)發(fā)中都會(huì)用到。通過(guò)這些接口,不僅可以對(duì)持久化對(duì)象進(jìn)行存取,還能夠進(jìn)行事務(wù)控制。下面對(duì)這五個(gè)核心接口分別加以介紹。 (1) session接口:session接口負(fù)責(zé)執(zhí)行被持久化對(duì)象的crud操作 (crud的任務(wù)是完成與數(shù)據(jù)庫(kù)的交流,包含了很多常見(jiàn)的sql語(yǔ)句。)。但需要注意的是session對(duì)象是非線程安全的。同時(shí),hibernate的 session不同于jsp應(yīng)用中的httpsession。這里當(dāng)使用session這個(gè)術(shù)語(yǔ)時(shí),其實(shí)指的是hibernate中的se
14、ssion,而以后會(huì)將httpsesion對(duì)象稱為用戶session。 (2) sessionfactory接口:sessionfactory接口負(fù)責(zé)初始化hibernate。它充當(dāng)數(shù)據(jù)存儲(chǔ)源的代理,并負(fù)責(zé)創(chuàng)建session對(duì)象。這里用到了工廠模式。需要注意的是sessionfactory并不是輕量級(jí)的,因?yàn)橐话闱闆r下,一個(gè)項(xiàng)目通常只需要一個(gè)sessionfactory就夠,當(dāng)需要操作多個(gè)數(shù)據(jù)庫(kù)時(shí),可以為每個(gè)數(shù)據(jù)庫(kù)指定一個(gè) sessionfactory。 (3) configuration接口:configuration 接口負(fù)責(zé)配置并啟動(dòng)hibernate,創(chuàng)建sessionfactory對(duì)
15、象。在hibernate的啟動(dòng)的過(guò)程中,configuration類的實(shí)例首先定位映射文檔位置、讀取配置,然后創(chuàng)建sessionfactory對(duì)象。 (4) transaction接口:transaction接口負(fù)責(zé)事務(wù)相關(guān)的操作。它是可選的,開(kāi)發(fā)人員也可以設(shè)計(jì)編寫(xiě)自己的底層事務(wù)處理代碼。 (5)query和criteria接口:query和criteria接口負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫(kù)查詢。它可以使用hql語(yǔ)言或sql語(yǔ)句兩種表達(dá)方式。(6)反射hibernate 對(duì)象三種狀態(tài):圖1-4 hibernate 對(duì)象三種狀態(tài)圖持久態(tài)對(duì)象的標(biāo)志是它有id值,并且會(huì)被存入session的一級(jí)緩存。特點(diǎn)是對(duì)它
16、們的操作hibernate是能夠知道的并且在調(diào)用session.flush()方法時(shí)將對(duì)它們的更新操作(如obj.setxxx()方法)同步到數(shù)據(jù)庫(kù)。在調(diào)用commit()方法前會(huì)自動(dòng)調(diào)用flush()方法,用戶也可以自己調(diào)用flush()方法。調(diào)用session.clear()方法會(huì)清空一級(jí)緩存,將所有的持久化對(duì)象變?yōu)槊摴艿?,因此調(diào)用clear()方法前一定要調(diào)用session.flush()方法,將一級(jí)緩存中的持久化對(duì)象同步到數(shù)據(jù)庫(kù)。脫管對(duì)象與瞬時(shí)對(duì)象都不在hibernate的管理中,它們的區(qū)別是脫管對(duì)象有id值,數(shù)據(jù)庫(kù)中有記錄和它對(duì)應(yīng),但瞬時(shí)對(duì)象沒(méi)有id值也沒(méi)有數(shù)據(jù)庫(kù)記錄和它對(duì)應(yīng)。要強(qiáng)調(diào)
17、的是瞬時(shí)對(duì)象調(diào)用session.save(obj)方法后對(duì)象雖然變?yōu)槌志脩B(tài)的,有id值,但是此時(shí)數(shù)據(jù)庫(kù)中不一定有一條記錄和對(duì)象對(duì)應(yīng)。如果對(duì)象的主鍵生成策略是“native”,那么hibernate使用數(shù)據(jù)庫(kù)自身的機(jī)制生成主鍵(mysql是auto_increment,oracle使用squence機(jī)制),這時(shí)只有當(dāng)數(shù)據(jù)插入到數(shù)據(jù)庫(kù)后才會(huì)得到它的主鍵,因此會(huì)在session.save(obj)方法時(shí)向數(shù)據(jù)庫(kù)發(fā)送insert語(yǔ)句,因此session.save(obj)后數(shù)據(jù)庫(kù)中有記錄和對(duì)象對(duì)應(yīng),但是如果對(duì)象的主鍵生成策略是“uuid”或“hilo”,這時(shí)要生成對(duì)象的id不需要將對(duì)象插入數(shù)據(jù)庫(kù)(uu
18、id方式不需要訪問(wèn)數(shù)據(jù)庫(kù),根據(jù)主機(jī)ip等信息生成,hilo方式hiberhinate維護(hù)數(shù)據(jù)庫(kù)中一張用于生成id的表),這時(shí)session.save(obj)后對(duì)象有id值,但數(shù)據(jù)庫(kù)中沒(méi)有記錄和它對(duì)應(yīng),只有調(diào)用flush()方法后才會(huì)發(fā)送insert語(yǔ)句,將對(duì)象和數(shù)據(jù)庫(kù)同步。(7)實(shí)體對(duì)象的生命周期有三種狀態(tài): ransient(自由狀態(tài)) 此時(shí)的實(shí)體對(duì)象和數(shù)據(jù)庫(kù)中的記錄無(wú)關(guān)聯(lián),只是一個(gè)普通的javabean。 persistent(持久狀態(tài)) 此時(shí)的實(shí)體對(duì)象和數(shù)據(jù)庫(kù)中的記錄有關(guān)聯(lián),其變更將由hibernate固化到數(shù)據(jù)庫(kù)中。該實(shí)體對(duì)象處于由hibernate框架所管理的狀態(tài)。 detache
19、d(游離狀態(tài)) 處于persistent狀態(tài)的對(duì)象,其對(duì)應(yīng)的session實(shí)例關(guān)閉之后,那么,此對(duì)象就處于detached狀態(tài)。detached狀態(tài)和transient狀態(tài)的區(qū)別在于detached狀態(tài)的對(duì)象可以再次與某個(gè)session實(shí)例相關(guān)聯(lián)而成為persistent對(duì)象。 從實(shí)體對(duì)象是否被納入hibernate實(shí)體管理容器的角度,transient和detached狀態(tài)的實(shí)體對(duì)象可以統(tǒng)稱為vo(value object),而被管理的實(shí)體對(duì)象稱為po(persistent object)。兩者的區(qū)別: vo是相對(duì)獨(dú)立的實(shí)體對(duì)象,處于非管理狀態(tài)。 po是hibernate納入其實(shí)體管理容器(
20、entity map)的對(duì)象,它代表了與數(shù)據(jù)庫(kù)中某條記錄對(duì)應(yīng)的hibernate實(shí)體,po的變化在事務(wù)提交時(shí)將反映到實(shí)際數(shù)據(jù)庫(kù)中。 如果一個(gè)po與其對(duì)應(yīng)的session實(shí)例分離,那么此時(shí),它又會(huì)變成一個(gè)vo。 hibernate的對(duì)象有3種狀態(tài), 分別為: 瞬時(shí)態(tài)(transient)、 持久態(tài)(persistent)、 脫管態(tài)(detached). 處于持久態(tài)的對(duì)象也稱為po(persistenceobject),瞬時(shí)對(duì)象和脫管對(duì)象也稱為vo(valueobject).瞬時(shí)態(tài)由new命令開(kāi)辟內(nèi)存空間的java對(duì)象,eg.person person=new person(xiaoxiao,女)
21、;如果沒(méi)有變量對(duì)該對(duì)象進(jìn)行引用,它將被java虛擬機(jī)回收.瞬時(shí)對(duì)象在內(nèi)存孤立存在,它是攜帶信息的載體,不和數(shù)據(jù)庫(kù)的數(shù)據(jù)有任何關(guān)聯(lián)關(guān)系,在hibernate中,可通過(guò)session的save()或saveorupdate()方法將瞬時(shí)對(duì)象與數(shù)據(jù)庫(kù)相關(guān)聯(lián),并將數(shù)據(jù)對(duì)應(yīng)的插入數(shù)據(jù)庫(kù)中,此時(shí)該瞬時(shí)對(duì)象轉(zhuǎn)變成持久化對(duì)象.持久態(tài)處于該狀態(tài)的對(duì)象在數(shù)據(jù)庫(kù)中具有對(duì)應(yīng)的記錄,并擁有一個(gè)持久化標(biāo)識(shí).如果是用hibernate的delete()方法,對(duì)應(yīng)的持久對(duì)象就變成瞬時(shí)對(duì)象,因數(shù)據(jù)庫(kù)中的對(duì)應(yīng)數(shù)據(jù)已被刪除,該對(duì)象不再與數(shù)據(jù)庫(kù)的記錄關(guān)聯(lián).當(dāng)一個(gè)session執(zhí)行close()或clear()、evict()之后,持
22、久對(duì)象變成脫管對(duì)象,此時(shí)持久對(duì)象會(huì)變成脫管對(duì)象,此時(shí)該對(duì)象雖然具有數(shù)據(jù)庫(kù)識(shí)別值,但它已不在hibernate持久層的管理之下.持久對(duì)象具有如下特點(diǎn): 和session實(shí)例關(guān)聯(lián); 在數(shù)據(jù)庫(kù)中有與之關(guān)聯(lián)的記錄.脫管態(tài)當(dāng)與某持久對(duì)象關(guān)聯(lián)的session被關(guān)閉后,該持久對(duì)象轉(zhuǎn)變?yōu)槊摴軐?duì)象.當(dāng)脫管對(duì)象被重新關(guān)聯(lián)到session上時(shí),并再次轉(zhuǎn)變成持久對(duì)象.脫管對(duì)象擁有數(shù)據(jù)庫(kù)的識(shí)別值,可通過(guò)update()、saveorupdate()等方法,轉(zhuǎn)變成持久對(duì)象.脫管對(duì)象具有如下特點(diǎn): 質(zhì)上與瞬時(shí)對(duì)象相同,在沒(méi)有任何變量引用它時(shí),jvm會(huì)在適當(dāng)?shù)臅r(shí)候?qū)⑺厥? 瞬時(shí)對(duì)象多了一個(gè)數(shù)據(jù)庫(kù)記錄標(biāo)識(shí)值.例子:hiber
23、nate生命周期會(huì)經(jīng)歷三種不同的狀態(tài): 1.transient(瞬態(tài)):實(shí)體對(duì)象在內(nèi)存是自由存在的,即與數(shù)據(jù)庫(kù)中的數(shù)據(jù)沒(méi)有任何關(guān)系.換句話說(shuō)就是:該實(shí)體從未與任何持久化上下文關(guān)聯(lián)過(guò),它沒(méi)有持久化標(biāo)識(shí).例如: /創(chuàng)建一個(gè)transient對(duì)象 user user=new user();user.setname(username); user.setpassword(password); /此時(shí)的user為一個(gè)transient對(duì)象,因?yàn)闆](méi)有與任何數(shù)據(jù)庫(kù)的任何記錄相關(guān)聯(lián). 特征: 與數(shù)據(jù)庫(kù)中的記錄沒(méi)有任何關(guān)系,即沒(méi)有與其相關(guān)聯(lián)的數(shù)據(jù)庫(kù)記錄.與session沒(méi)有任何關(guān)系.即沒(méi)有通過(guò)session對(duì)象
24、的實(shí)例對(duì)其進(jìn)行任何持久化的操作. 2.persistent(持久態(tài)):該實(shí)體對(duì)象處于hibernate框架所管理的狀態(tài),即這個(gè)實(shí)體對(duì)象與session對(duì)象的實(shí)例相關(guān)聯(lián).例如:/創(chuàng)建一個(gè)transient對(duì)象user user=new user(); user.setname(username); user.setpassword(password); /此時(shí)的user為一個(gè)transient對(duì)象,因?yàn)闆](méi)有與任何數(shù)據(jù)庫(kù)的任何記錄相關(guān)聯(lián). session session = sessionfactory.opensession(); transaction tx=session.begintran
25、saction(); /此時(shí)的user仍為一個(gè)transient對(duì)象session.save( user ); /此時(shí)的user為persistent mit(); /提交后向數(shù)據(jù)庫(kù)中加入一條記錄. transaction tx2=session.begintransaction(); user.setpassword(abc); mit();/雖然在這個(gè)事務(wù)中沒(méi)有調(diào)用session的save()方法來(lái)保存user對(duì)象/但由于user對(duì)象處于persistent狀態(tài),所以對(duì)user所做的任何修改都將被持久/化到數(shù)據(jù)庫(kù),所以這時(shí)數(shù)據(jù)庫(kù)中的密碼已經(jīng)變?yōu)?abc; sess
26、ion.close(); 特征: 每個(gè)persistent狀態(tài)的實(shí)體對(duì)象都與一個(gè)session對(duì)象的實(shí)例相關(guān)聯(lián)處于persistent狀態(tài)的實(shí)體對(duì)象是與數(shù)據(jù)庫(kù)中的記錄相關(guān)聯(lián)的.hibernate會(huì)依據(jù)persistent狀態(tài)的實(shí)體對(duì)象的屬性變化而改變數(shù)據(jù)庫(kù)中相對(duì)應(yīng)的記錄. 3.detached(游離態(tài)):對(duì)于persistent對(duì)象,當(dāng)不再與它所對(duì)應(yīng)的session對(duì)象相關(guān)聯(lián)時(shí),這個(gè)對(duì)象就是游離態(tài). /創(chuàng)建一個(gè)transient對(duì)象 user user=new user();/posteditplain.aspx個(gè)人空間后臺(tái) user.setna
27、me(username); user.setpassword(password); /此時(shí)的user為一個(gè)transient對(duì)象,因?yàn)闆](méi)有與任何數(shù)據(jù)庫(kù)的任何記錄相關(guān)聯(lián). session session = sessionfactory.opensession(); transaction tx=session.begintransaction(); /此時(shí)的user仍為一個(gè)transient對(duì)象 session.save( user ); /此時(shí)的user為persistent mit(); /提交后向數(shù)據(jù)庫(kù)中加入一條記錄. session.close(); /此時(shí)user為det
28、ached 狀態(tài),此時(shí)對(duì)user所進(jìn)行的任何修改, /將不會(huì)對(duì)數(shù)據(jù)庫(kù)有任何影響. 特征: 游離態(tài)是由持久態(tài)實(shí)體對(duì)象轉(zhuǎn)變而來(lái)的.游離態(tài)實(shí)體不再與session對(duì)象相關(guān)聯(lián).游離態(tài)實(shí)體對(duì)象與數(shù)據(jù)庫(kù)中的記錄沒(méi)有直接聯(lián)系,對(duì)其所做的任何修改將不會(huì)影響到到數(shù)據(jù)庫(kù)中的數(shù)據(jù).游離態(tài)實(shí)體對(duì)象在數(shù)據(jù)庫(kù)有相對(duì)應(yīng)的數(shù)據(jù)記錄,如果沒(méi)有被其他事務(wù)刪除. 掌握要點(diǎn)ssh的環(huán)境搭建和基本配置。1. 搭建簡(jiǎn)單的struts2 web工程2. 添加spring2.0支持,整合spring2.03. 添加hibernate3.1支持,整合hibernate3.11.1 任務(wù)目標(biāo) 搭建ssh開(kāi)發(fā)環(huán)境,熟悉其配置過(guò)程,從而完成對(duì)客商信
29、息編碼系統(tǒng)的開(kāi)發(fā)和設(shè)計(jì)。1.2任務(wù)描述配置ssh開(kāi)發(fā)環(huán)境首先要了解ssh框架的結(jié)構(gòu)。根據(jù)相應(yīng)的要求制作各層。ssh技術(shù)是典型的j2ee三層結(jié)構(gòu),分為表現(xiàn)層,中間層(業(yè)務(wù)邏輯層)和數(shù)據(jù)服務(wù)層。三層體系將業(yè)務(wù)規(guī)則、數(shù)據(jù)訪問(wèn)及合法性校驗(yàn)等工作放在中間層處理??蛻舳瞬恢苯优c數(shù)據(jù)庫(kù)交互,而是通過(guò)組件與中間層建立連接,再由中間層與數(shù)據(jù)庫(kù)交互。表現(xiàn)層是傳統(tǒng)的jsp技術(shù)。struts負(fù)責(zé)控制業(yè)務(wù)邏輯層與表現(xiàn)層的交互,調(diào)用業(yè)務(wù)邏輯層,并將業(yè)務(wù)數(shù)據(jù)返回給表現(xiàn)層作組織表現(xiàn)。service層(就是業(yè)務(wù)邏輯層),負(fù)責(zé)實(shí)現(xiàn)業(yè)務(wù)邏輯。業(yè)務(wù)邏輯層以dao層為基礎(chǔ),通過(guò)對(duì)dao組件的正面模式包裝,完成系統(tǒng)所要求的業(yè)務(wù)邏輯。da
30、o層負(fù)責(zé)與持久化對(duì)象交互。該層封裝了數(shù)據(jù)的增、刪、查、改的操作。po,持久化對(duì)象。通過(guò)實(shí)體關(guān)系映射工具將關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)映射成對(duì)象,很方便的實(shí)現(xiàn)以面向?qū)ο蠓绞讲僮鲾?shù)據(jù)庫(kù)。1.3 任務(wù)實(shí)施在myeclipse中可以增加對(duì)struts2.0, spring2.0, hibernate3.1的支持,具體如下:1). 搭建簡(jiǎn)單的struts2 web工程(1) 下載和安裝struts2框架在此下載最新的struts-2.0.14-all完整包,里面包括apps(示例)、docs(文檔)、lib(核心類庫(kù)及struts2第三方插件類庫(kù))、src(源代碼)。(2) 創(chuàng)建web工程,添加jar包將下載資源
31、包中l(wèi)ib下的struts2-core-2.0.14.jar、xwork-2.0.7.jar和ognl-2.6.11.jar(三個(gè)為必須jar包)添加,就可以開(kāi)發(fā)應(yīng)用,但是會(huì)有錯(cuò)誤消息。添加commons-logging-1.0.4.jar和freemarker-2.3.8.jar就不會(huì)報(bào)錯(cuò)。(3) 編輯web.xml文件,配置struts2的核心filter 文件名稱web.xml文件描述該文件為系統(tǒng)登記文件實(shí)現(xiàn)代碼12345678910111213141516171819202122232425262728293031323334 org.springframework.web.conte
32、xt.contextloaderlistenerstruts2org.apache.struts2.dispatcher.filterdispatcherstruts2/*login.jspbasic 代碼貼士:在代碼第1行中將pageencoding的屬性設(shè)定為utf-8,為了能夠正確表示字體,防止出現(xiàn)亂碼情況。在代碼第8到第13行中為監(jiān)聽(tīng)器配置。在代碼第15到第24行中過(guò)濾器配置:將一個(gè)名字與一個(gè)實(shí)現(xiàn)javaxs.servlet.filter接口的類相關(guān)聯(lián)。在代碼第26到第31行為指定文件頁(yè)配置。 2). 添加spring2.0支持(1) 右鍵工程名,選擇myeclipse-add spr
33、ing capabilities打開(kāi)添加spring支持配置頁(yè)面,如下圖:圖1-5 myeclipse配置spring頁(yè)面2) 打開(kāi)如下配置頁(yè)面,進(jìn)行配置:圖1-6 myeclipse配置spring頁(yè)面選擇spring2.0,勾取spring2.0支持包,要選擇spring2.0 orm/dao/hibernate3 libraries ,選擇copy checked libraty contents to project folder(tlds always copied) ,并將其拷貝到路徑為/webroot/web-inf/lib,然后選擇next,進(jìn)行下一步設(shè)置。3) 進(jìn)入appli
34、cation生成頁(yè)面,如下圖:圖1-7 myeclipse配置spring頁(yè)面選擇new,folder選擇工程下的webroot/web-inf, file為applicationcontext.xml,最后點(diǎn)擊finish完成對(duì)spring2.0的添加。3.添加hibernate3.1支持1)添加hibernate3.1支持,右鍵工程-myeclipse-add hibernate capabilities,如下圖:圖1-8 myeclipse配置hibernate圖1-9 myeclipse配置hibernate設(shè)置數(shù)據(jù)源,填寫(xiě)bean id 為datasource,選擇jdbc,db d
35、river為設(shè)置好的mysql driver,如下圖,然選擇next圖1-10 myeclipse配置hibernate取消創(chuàng)建sessinfactory class,不勾取,因?yàn)榍懊嬉呀?jīng)將sessionfactory交給了spring來(lái)產(chǎn)生,如下圖配置,然后finishi完成hibernate支持的添加。圖1-11 myeclipse配置hibernate完成后applicationcontext.xml中已經(jīng)添加了數(shù)據(jù)源和sessionfactory的配置,如下圖:圖1-12 myeclipse配置hibernate配置數(shù)據(jù)源在myeclipse右上角選擇myeclipse databas
36、e explorer,打開(kāi)數(shù)據(jù)庫(kù)管理視圖。圖1-13 配置數(shù)據(jù)源在左側(cè)的db browser點(diǎn)擊右鍵,選擇new,打開(kāi)database driver對(duì)話框。圖 1-14 配置數(shù)據(jù)源在database driver對(duì)話框中按照如下配置選擇數(shù)據(jù)庫(kù)驅(qū)動(dòng)。首先選擇driver template,在這里我們選擇mysql。driver name是以后配置時(shí)使用的驅(qū)動(dòng)名字,用以區(qū)分驅(qū)動(dòng),這里使用mysql即可。然后根據(jù)實(shí)際情況填寫(xiě)url,user name和password。點(diǎn)擊add jars添加數(shù)據(jù)庫(kù)驅(qū)動(dòng)文件。為方便配置,可以選擇save password保存密碼。配置完畢后finish即可。圖 1-
37、15配置數(shù)據(jù)源此時(shí)項(xiàng)目的目錄結(jié)構(gòu)如下所示。其中的users.java是myeclipse生成的使用面向?qū)ο蟮膉ava語(yǔ)言對(duì)數(shù)據(jù)庫(kù)表格進(jìn)行的抽象,users.hbm.xml是將數(shù)據(jù)庫(kù)表格中的字段和pojo類的屬性進(jìn)行映射的定義。圖 1-16配置數(shù)據(jù)源建action包,將action類寫(xiě)入。建立一個(gè)dao包,為了將實(shí)現(xiàn)與接口進(jìn)行解耦,建議在dao包下面添加接口,然后建立dao.impl包,將實(shí)際的dao類放在這里。dao類是直接與數(shù)據(jù)庫(kù)打交道的類,為了對(duì)業(yè)務(wù)邏輯進(jìn)行封裝,我們將業(yè)務(wù)全部寫(xiě)在service類里面,和dao一樣,我們先建立service包,里面添加業(yè)務(wù)接口,具體的實(shí)現(xiàn)放在service
38、.impl里面。工程整體結(jié)構(gòu)如下圖圖1-17工程整體結(jié)構(gòu)注:struts.xml在src文件夾下,applicationcontext.xml在web-inf文件夾下代碼文件名稱applicationcontext.xml文件描述該文件為系統(tǒng)登記文件實(shí)現(xiàn)代碼123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年面板檢測(cè)系統(tǒng)項(xiàng)目建議書(shū)
- 辦公新環(huán)境啟用儀式講話稿
- 酒店投資開(kāi)發(fā)建設(shè)合同
- 2025年硅粉系列項(xiàng)目合作計(jì)劃書(shū)
- 商鋪轉(zhuǎn)讓合同協(xié)議
- 關(guān)于辦公室日常行政工作的推進(jìn)情況
- 國(guó)際運(yùn)輸服務(wù)提供商合作框架協(xié)議
- 紅星照耀中國(guó)的革命情懷解讀
- L-Tyrosinamide-生命科學(xué)試劑-MCE
- 辦公事務(wù)處理規(guī)范與流程文書(shū)
- 2025版大學(xué)食堂冷鏈?zhǔn)巢呐渌头?wù)合同模板3篇
- 《中醫(yī)體重管理臨床指南》
- 2024年青島港灣職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 廣西壯族自治區(qū)公路發(fā)展中心2025年面向社會(huì)公開(kāi)招聘657名工作人員高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《中國(guó)的宗教》課件
- 2025年山東魯商集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 大學(xué)轉(zhuǎn)專業(yè)高等數(shù)學(xué)試卷
- 大型活動(dòng)中的風(fēng)險(xiǎn)管理與安全保障
- 公司廠區(qū)保潔培訓(xùn)
- 課題申報(bào)書(shū):個(gè)體衰老差異視角下社區(qū)交往空間特征識(shí)別與優(yōu)化
- 江蘇省招標(biāo)中心有限公司招聘筆試沖刺題2025
評(píng)論
0/150
提交評(píng)論