




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1. 整體說明1.1. 項(xiàng)目說明1.1.1. OA概述OA是Office Automation的縮寫,本意為利用技術(shù)的手段提高辦公的效率,進(jìn)而實(shí)現(xiàn)辦公的自動(dòng)化處理。實(shí)現(xiàn)信息化、無紙化辦公,可方便的生成統(tǒng)計(jì)報(bào)表等。OA是OFFICE AUTOMATION的縮寫,本意為利用技術(shù)的手段提高辦公的效率,進(jìn)而實(shí)現(xiàn)辦公的自動(dòng)化處理。采用Internet/Intranet技術(shù),基于工作流的概念,使企業(yè)內(nèi)部人員方便快捷地共享信息,高效地協(xié)同工作;改變過去復(fù)雜、低效的手工辦公方式,實(shí)現(xiàn)迅速、全方位的信息采集、信息處理,為企業(yè)的管理和決策提供科學(xué)的依據(jù)。OA軟件解決企業(yè)的日常管理規(guī)范化、增加企業(yè)的可控性、提高企業(yè)
2、運(yùn)轉(zhuǎn)的效率的基本問題。范圍涉及日常行政管理、各種事項(xiàng)的審批、辦公資源的管理、多人多部門的協(xié)同辦公、以及各種信息的溝通與傳遞??梢愿爬ǖ恼f,OA軟件跨越了生產(chǎn)、銷售、財(cái)務(wù)等具體的業(yè)務(wù)范疇,更集中關(guān)注于企業(yè)日常辦公的效率和可控性,是企業(yè)提高整體運(yùn)轉(zhuǎn)能力不可缺少的軟件工具。1.1.2. 本系統(tǒng)作用組織的核心競爭力源自單位對內(nèi)外部資源的有效利用。對它們之間的關(guān)系進(jìn)行協(xié)調(diào),最大限度的發(fā)揮所有資源的作用,并用系統(tǒng)的觀點(diǎn),在整個(gè)系統(tǒng)價(jià)值最大化的基礎(chǔ)上來發(fā)揮各個(gè)資源的作用,使資源的運(yùn)作產(chǎn)生協(xié)同效用。因此可通過協(xié)同辦公系統(tǒng)打造單位的核心競爭力。本協(xié)同辦公系統(tǒng)的主要作用為:1、 建立內(nèi)部的通信平臺(tái)。2、 建立信息
3、發(fā)布的平臺(tái)。3、 文檔管理的自動(dòng)化。4、 工作流程的自動(dòng)化。5、 行政日常事務(wù)處理。6、 安全機(jī)制的可靠性。本系統(tǒng)旨在加速單位信息化進(jìn)程,充分利用計(jì)算機(jī)和現(xiàn)代通訊手段面向單位服務(wù)。建立單位內(nèi)部信息交流的快速通道,以共享信息資源。強(qiáng)化部門業(yè)務(wù)管理,加強(qiáng)各業(yè)務(wù)部門之間的交流。實(shí)現(xiàn)單位信息的快速上傳下達(dá),促進(jìn)協(xié)同辦公。提高辦公效率,為各級領(lǐng)導(dǎo)及業(yè)務(wù)人員提供輔助辦公和決策服務(wù)。1、 本系統(tǒng)將最大限度地提高辦公效率和辦公質(zhì)量,降低管理和辦公成本,改善辦公環(huán)境和條件,提高辦公管理和決策的自動(dòng)化和科學(xué)化水平。2、 以人為中心,致力于幫助用戶實(shí)現(xiàn)共享資源、規(guī)范流程、推動(dòng)執(zhí)行的目的。幫助用戶節(jié)省辦公費(fèi)用,減少中
4、間環(huán)節(jié),優(yōu)化業(yè)務(wù)流程,提高整體效率,促進(jìn)管理進(jìn)步。簡單的說,有以下兩點(diǎn):1,利用技術(shù)的手段提高辦公的效率2,信息化,可方便的生成統(tǒng)計(jì)報(bào)表等。1.1.3. 設(shè)計(jì)原則以應(yīng)用為核心,要突出“實(shí)用、易用、簡潔、穩(wěn)定”。既注重實(shí)效,滿足用戶的現(xiàn)實(shí)需要,又為系統(tǒng)的后續(xù)升級和擴(kuò)展留有余地。在技術(shù)實(shí)現(xiàn)上,要突出“結(jié)構(gòu)清晰、實(shí)現(xiàn)合理、通俗易懂(簡單)”。1. 實(shí)用:滿足用戶現(xiàn)實(shí)需要,解決實(shí)際問題,做細(xì)核心功能。2. 易用:使用方便,各項(xiàng)功能一目了然。滿足用戶的使用習(xí)慣,易使用、易維護(hù)、易升級。實(shí)現(xiàn)“傻瓜”式的操作,將實(shí)施、培訓(xùn)成本和周期降到最低。3. 簡潔:頁面簡潔,功能簡潔,每一個(gè)元素都有存在的意義。4. 穩(wěn)
5、定:從底層數(shù)據(jù)庫到功能層經(jīng)過嚴(yán)格測試,能在不同的硬件環(huán)境中長期平穩(wěn)運(yùn)行。1.1.4. 功能說明OA是輔助辦公的軟件,使用OA與不使用OA相對比的好處是:可以用計(jì)算機(jī)管理所有的數(shù)據(jù),并可以方便的實(shí)現(xiàn)統(tǒng)計(jì)與報(bào)表的功能。提高辦公效率。(實(shí)現(xiàn)信息化)。以下是一個(gè)OA系統(tǒng)的全部功能列表:說明:不是所有的OA都有全部的功能,而是根據(jù)需要確定的。1.2. 項(xiàng)目實(shí)現(xiàn)說明1.2.1. 軟件開發(fā)的步驟說明需求確認(rèn)概要設(shè)計(jì)詳細(xì)設(shè)計(jì)編碼單元測試集成測試系統(tǒng)測試維護(hù)。單元測試是由程序員自己來完成,最終受益的也是程序員自己??梢赃@么說,程序員有責(zé)任編寫功能代碼,同時(shí)也就有責(zé)任為自己的代碼編寫單元測試。執(zhí)行單元測試,就是為
6、了證明這段代碼的行為和我們期望的一致。集成測試,也叫組裝測試或聯(lián)合測試。在單元測試的基礎(chǔ)上,將所有模塊按照設(shè)計(jì)要求(如根據(jù)結(jié)構(gòu)圖組裝成為子系統(tǒng)或系統(tǒng),進(jìn)行集成測試。實(shí)踐表明,一些模塊雖然能夠單獨(dú)地工作,但并不能保證連接起來也能正常的工作。程序在某些局部反映不出來的問題,在全局上很可能暴露出來,影響功能的實(shí)現(xiàn)。系統(tǒng)測試是將已經(jīng)確認(rèn)的軟件、計(jì)算機(jī)硬件、外設(shè)、網(wǎng)絡(luò)等其他元素結(jié)合在一起,進(jìn)行信息系統(tǒng)的各種組裝測試和確認(rèn)測試,其目的是通過與系統(tǒng)的需求相比較,發(fā)現(xiàn)所開發(fā)的系統(tǒng)與用戶需求不符或矛盾的地方,從而提出更加完善的方案。1.2.2. 在項(xiàng)目開發(fā)中,我們處于什么位置,要做哪些事情?1.2.3. 在課堂
7、上,我們要完成哪些功能,具體需求是什么?模塊功能說明組織與用戶管理崗位管理部門管理用戶管理系統(tǒng)權(quán)限初始化權(quán)限分配權(quán)限驗(yàn)證權(quán)限網(wǎng)上交流-論壇版塊管理看帖、發(fā)帖、回帖文章管理審批流轉(zhuǎn)(工作流)表單模板管理審批流程管理審批流轉(zhuǎn)表單查詢說明:按列出的順序?qū)崿F(xiàn)功能。效果以靜態(tài)頁面為準(zhǔn)(需求)。按靜態(tài)頁面做1.3. ItcastOA的整體設(shè)計(jì)1.3.1. 分層一、JavaEE的三層架構(gòu)二、關(guān)于分層的說明1,上面調(diào)用下面,即View調(diào)用Service,Service調(diào)用Dao。2,層與層之間用接口。除定義的接口外,不能使用其它層的特有類或接口。3,使用實(shí)體作為DTO(Data Transfer Object
8、,數(shù)據(jù)傳輸對象)要做到任一層換掉后,其他層不受影響。我們在此項(xiàng)目中使用兩層:View+Service即在Service中直接操作Hibernate.Session。因?yàn)槿绻褂萌龑?,在Service中就會(huì)有一部分方法只是直接調(diào)用DAO中的方法。一般情況下只有在多個(gè)數(shù)據(jù)源的場合下適合引入DAO層。三、有關(guān)分層的幾個(gè)問題1,一定要分層嗎?不一定。假如公司要求你寫一個(gè)可以給指定員工發(fā)送短信的小程序,用于開會(huì)通知與自動(dòng)發(fā)送生成祝福短信。這個(gè)程序很小,沒有多少行代碼,而且不變,這時(shí)不分層可以嗎?完全可以呀。但我們在寫程序時(shí),還是要分層的,分層的程序結(jié)構(gòu)清晰,可維護(hù)性高。2,一定要3層嗎?不一定。分3層是
9、推薦的,而不是必須的,應(yīng)根據(jù)自己的具體情況進(jìn)行安排。我們?nèi)绻褂?層的結(jié)構(gòu),用起來就麻煩,因?yàn)樵赟ervice中會(huì)有一部分方法只是直接調(diào)用Dao中的方法,而Dao中的方法只是調(diào)用Session完成某操作。此時(shí)分2層更好,即在Service中可直接操作Session,以簡化結(jié)構(gòu)。其實(shí)Hibernate已經(jīng)可以支持多種數(shù)據(jù)庫。3,一定要使用接口嗎?不一定。以前就有同學(xué)問我:“在設(shè)計(jì)程序時(shí)確定的技術(shù)在開發(fā)完成后一般不會(huì)更換的,實(shí)現(xiàn)類一般也不會(huì)更換,這種情況還用接口嗎,一般的小項(xiàng)目是不是可以不使用接口?”。是的,如果不會(huì)變(一般也不會(huì)變),這是完全可以的。我們所學(xué)習(xí)的框架、技術(shù)都是解決問題的推薦方案,
10、而不是必須要用的。遇到問題后優(yōu)先使用成熟的技術(shù)與方案,以避免很多潛在的或后發(fā)的問題,避免走不必要的彎路。1.3.2. 所用框架、技術(shù)編號工具版本說明1.Struts 2.JSTL 1.13.Hibernate 3實(shí)現(xiàn)持久化操作4.jBPM工作流支持5.Junit4單元測試6.jQuery說明:還有jQuery.validate與jQuery.treeview等小插件1.3.3. 開發(fā)環(huán)境操作系統(tǒng)Windows XP開發(fā)工具M(jìn)yEclipse6.0數(shù)據(jù)庫MySqlWeb容器Tomcat6.0瀏覽器IE6說明:1, 推薦使用MyEclipse,這樣出現(xiàn)工具問題可以一起解決。當(dāng)然也可以使用自已熟悉的
11、工具,如Eclipse、NetBeans、IntelliJ。現(xiàn)在的重點(diǎn)是代碼實(shí)現(xiàn),不是工具。應(yīng)使用有效的工具。2, 要注意使用的MySql與JDBC驅(qū)動(dòng)的版本要兼容。3, 顯示的技術(shù)有兼容的問題,寫出的代碼可能在某些瀏覽器中不能正常運(yùn)行,這就需要在寫代碼時(shí)多使用JS框架,讓框架幫我們解決兼容的問題。1.3.4. 代碼規(guī)范1, 命名:使用駝峰命名法。a) 類、接口:每個(gè)單詞的首字母大寫。例:MyDateConverterb) 變量、方法:第一個(gè)單詞的首字母小寫,其他單詞的首字母都大寫。例:myDateConverterc) 常量:全字字母都大寫,單詞之間使用_隔開。例,DEFAULT_PAGE_
12、SIZEd) 使用有意義的名稱,慎用縮寫。2, 注釋:在代碼中加入適當(dāng)?shù)淖⑨專赫f明步驟,與說明非簡單邏輯。3, 空行:在代碼中加入適當(dāng)?shù)目招校拖駥懳恼聲r(shí)要分段一樣(增強(qiáng)可讀性)??傊?,要保證代碼的有效、清晰、簡潔(à可讀)。1, 有效:這是第一目標(biāo),代碼要是可以解決問題的。2, 清晰:在有效的前提下,讓代碼清晰。3, 簡潔:代碼與邏輯應(yīng)盡量的簡單,不要是給別人講別人都聽不明白。1.3.5. 約定1, 工程中所有的文件都采用utf-8編碼。所有的頁面都是使用utf-8編碼,這樣方便解決表單內(nèi)容的亂碼問題。亂碼一般情況下是亂用編碼產(chǎn)生的。2, 實(shí)體的主鍵屬性的類型使用Long型。1.3
13、.6. 項(xiàng)目計(jì)劃功能知識(shí)點(diǎn)預(yù)計(jì)時(shí)間1. 基礎(chǔ)功能a) Dao設(shè)計(jì)b) 事務(wù)管理c) 表單亂碼d) 對象管理1. Struts基礎(chǔ)2. Hibernate基礎(chǔ)3. 過濾器1天2. 組織用戶管理a) 崗位管理b) 部門管理c) 用戶管理1. 一般的實(shí)體設(shè)計(jì)2. 實(shí)體映射(映射文件)3. 增刪改查功能4. 樹狀顯示5. 使用jQuery.validate進(jìn)行表單驗(yàn)證2天3. 系統(tǒng)權(quán)限a) 創(chuàng)建權(quán)限b) 分配權(quán)限c) 使用權(quán)限1. jQuery的一般使用2. 權(quán)限控制方案2天4. 論壇a) 論壇管理b) 論壇基本功能c) 文章管理1. 分頁2. 在線編輯器FCKeditor3天5. jBPM + 審批
14、流轉(zhuǎn)a) 工作流框架jBPMb) 審批流轉(zhuǎn)功能1. 工作流框架jBPM2. 工作流的一般應(yīng)用4天2. 準(zhǔn)備環(huán)境2.1. 創(chuàng)建數(shù)據(jù)庫,要注意編碼1,使用MySql數(shù)據(jù)庫。2,創(chuàng)建數(shù)據(jù)庫時(shí),要注意編碼要支持中文。3,建表語句如下:create database itcastoa default character set utf8;show create database itcastoa;說明:需要先運(yùn)行Mysql的配置向?qū)?,把編碼配為GBK或UTF8。如果配成UTF8,在mysql命令行客戶端中就有亂碼,所以最好用GBK。2.2. 新建Web工程并進(jìn)行配置2.2.1. 配置工具2.2.1.1.
15、 配置快捷鍵1, 把Context Assist設(shè)為Alt+/2, 把Word Completion 設(shè)為Alt+.3,其他常用快捷鍵說明:Alt+/Content Assist代碼提示Ctrl+T顯示類的繼承結(jié)構(gòu)Ctrl+O列出類中的成員(成員變量、方法等)Ctrl+/注釋/取消注釋Ctrl+Shift+O導(dǎo)入要使用的包、并去除不使用的包Ctrl+Shift+F格式化當(dāng)前文件中的代碼/格式化選中的代碼Ctrl+Alt+Up復(fù)制當(dāng)前行到下面Ctrl+Alt+Down復(fù)制當(dāng)前行到上面Ctrl+D刪除當(dāng)前行/刪除選中文本占的所有行Shift+Enter相當(dāng)于按End后再按EnterAlt+Left
16、Alt+RightCtrl+Shift+X變?yōu)榇髮慍trl+Shift+Y變?yōu)樾?.2.1.2. 配置文件的默認(rèn)編碼1, 設(shè)置工程的默認(rèn)編碼為UTF-8。2, 配置JSP的默認(rèn)編碼為utf-83, 配置JavaScript的默認(rèn)編碼為utf-8說明:在MyEclipse7.x或MyEclipse8.x中不用修改,使用的是工程的編碼。2.2.1.3. 配置格式化的代碼樣式1, 使用Ctrl+Shift+F可以格式化代碼。2, 在WindowàPreferencesàJavaàCode StyleàFormatter中可以設(shè)置代碼樣式。 要把Java代碼與
17、注釋的行寬設(shè)為130。(其他使用默認(rèn)樣式)3, 搜索XML Sources,修改xml的行寬為130。(不考慮打印的情況)2.2.1.4. MyEclipse工具使用說明1, 導(dǎo)入工程時(shí)可以直接選擇一個(gè)zip文檔:FileàImportàExisting Projects into Workspace->Select archive file。2, 工程改名后,發(fā)果發(fā)布到Tomcat下,對應(yīng)的應(yīng)用的名稱不一定改變。這個(gè)名稱是在MyEclipseà Web中的Web Context-root中配置的。新建一個(gè)Web Project,并設(shè)置工程的編碼為UTF-8
18、。2.2.2. 添加框架環(huán)境1, 添加Junit4的Jar包。2, JSTL1.1。JavaEE5中已經(jīng)帶了JSTL,但是發(fā)布時(shí)不會(huì)把JavaEE發(fā)布到Tomcat中,有時(shí)會(huì)報(bào)錯(cuò),說找不到JSTL。所以最好再加一下JSTL1.1的環(huán)境。3, 添加Struts環(huán)境:(使用向?qū)膳渲梦募?,然后再自己添加jar包)a) jar包(不要加antlr-、jstl-1.0.2、standard-1.0.2,因?yàn)橛袥_突)b) 配置文件(struts-config.xml、修改web.xml)、國際化資源文件、自定義標(biāo)簽庫的TLD文件。配為*.do攔截的請求。4, 添加Hibernate環(huán)境:a) jar包
19、(含JDBC驅(qū)動(dòng)的jar包)b) 配置文件()。5, 添加jBPM環(huán)境(Jbpm的jar包中已包含Hibernate的jar包)。說明:1, 不要引用外面的Jar包,應(yīng)全部拷貝到工程中。2.2.3. 配置數(shù)據(jù)庫修改Hibernate.cfg.xml中的數(shù)據(jù)庫連接信息。并在hibernate.cfg.xml中做如下配置:<!- 顯示sql語句 -><property name="show_sql">true</property><!- 自動(dòng)更新表結(jié)構(gòu) -><property name="hbm2ddl.auto&
20、quot;>update</property>2.3. 工程中的資源分類(目錄與包結(jié)構(gòu))2.3.1. 目錄結(jié)構(gòu)源碼文件夾src項(xiàng)目源代碼 config配置文件 test單元測試WebRoot文件夾下 scriptJavaScript腳本文件 styleCSS樣式文件 WEB-INF/jspjsp頁面文件(再創(chuàng)建子文件夾分類存放)2.3.2. 包結(jié)構(gòu)使用三層:顯示層(View),業(yè)務(wù)層(Service),數(shù)據(jù)訪問層(Dao)(部分)包名說明cn.itcast.oa.domain實(shí)體(Domain)Dao接口Dao的實(shí)現(xiàn)類Service接口cn.itcast.oa.service
21、.implService的實(shí)現(xiàn)類Struts有關(guān)的類Struts的ActionStruts的FormBean(ActionForm)一些工具類cnView顯示Jsp + JSTL + Struts + jQuery Service業(yè)務(wù)邏輯JBPMDao數(shù)據(jù)訪問Hibernate3. 基礎(chǔ)功能有的環(huán)境,就可以寫具體功能了嗎?不可以。因?yàn)樵趯懢唧w功能時(shí)會(huì)用到一些公共的功能(基礎(chǔ)功能。如事務(wù)管理,在每個(gè)模塊中都會(huì)用到,我們就需要先把這此公共的功能完成,再專心的寫每個(gè)模塊的具體功能。這些基礎(chǔ)功能要求都要理解,并獨(dú)立寫一遍。3.1. 設(shè)計(jì)BaseDao接口與BaseDaoImpl類每個(gè)實(shí)體都應(yīng)有一個(gè)對應(yīng)
22、的Dao,他封裝了對這個(gè)實(shí)體的數(shù)據(jù)庫操作。例實(shí)體Dao接口實(shí)現(xiàn)類=User-> UserDao-> UserDaoImplRole-> RoleDao-> RoleDaoImplDepartment-> DepartmentDao-> DepartmentDaoImplArticle-> ArticleDao-> ArticleDaoImpl.說明:4, 實(shí)體的Dao接口要繼承BaseDao接口。5, Dao的實(shí)現(xiàn)類要繼承DaoImplBase類。6, 也可以不繼承指定的接口或類,這樣就要自己寫相應(yīng)的方法。7, T getById(Long id
23、)與List<T> getByIdList(Long idList)不要合并為List getById(Long. ids),因?yàn)楂@取一個(gè)對象時(shí)也是返回List,不方便。獲取 BaseDao的類型參數(shù)T的Class問題:1, 有了DaoBase與DaoImplBase,還要用UserDao、RoleDao嗎?答:要用。因?yàn)閁serDao或RoleDao中的方法可以分為有公有的方法與特有的方法兩部分。公有的方法是通過繼承BaseDao得到的,特有的方法要寫在自己里面(BaseDao中是沒有的)。2, UserDaoImpl已經(jīng)繼承了BaseDaoImpl,就不實(shí)現(xiàn)UserDao可以嗎
24、?答:不可以。否則UserDao userDao = new UserDaoImpl(); 就不成立。使用反射獲取類型參數(shù)的真實(shí)類型的代碼如下:public DaoBaseImpl () Type type = this.getClass().getGenericSuperclass();ParameterizedType pt = (ParameterizedType) type;this.clazz = (Class<T>) pt.getActualTypeArguments()0;說明:1, 使用Session時(shí),不要自己創(chuàng)建,也不要管理事務(wù),直接調(diào)用getSession()
25、即可。2, 暫時(shí)不實(shí)現(xiàn)getSession()方法,在后面的事務(wù)管理中實(shí)現(xiàn):protected Session getSession() throw new UnsupportedOperationException();3.2. 事務(wù)管理(Session管理)/ 返回與當(dāng)前線程綁定的Session,如果沒有,就創(chuàng)建一個(gè),與當(dāng)前線程綁定后返回。/ 需要先配置hibernate.current_session_context_class=thread,才能使用SessionFactory.getCurrentSession();事務(wù)管理1,在同一個(gè)Service中調(diào)用的Dao中應(yīng)使用同一個(gè)Ses
26、sion?2,怎么不重復(fù)的寫Session與Transaction的管理代碼?1,同時(shí)執(zhí)行的多個(gè)請求使用的不同的多個(gè)線程。2,先后執(zhí)行的兩個(gè)請求有可能是使用的同一個(gè)線程。(線程池)ThreadLocalFilter.doFilter()打開Sessionchain.doFilter(); / 放行 -> ActionServlet -> Action -> Service關(guān)閉Session事務(wù)邊界。1,一個(gè)事務(wù)的范圍是一個(gè)業(yè)務(wù)操作。轉(zhuǎn)帳()A - 100; / update/ throw exceptionB + 100; / update2,在Dao中只是使用Session
27、,而不管理Session與事務(wù)3,一次請求的執(zhí)行過程1,在Action中要做什么?1,獲取用戶輸入2,進(jìn)行業(yè)務(wù)處理(調(diào)用業(yè)務(wù)方法)3,給用戶反饋(轉(zhuǎn)到一個(gè)顯示頁面)1, 事務(wù)說明:事務(wù)的范圍是一個(gè)業(yè)務(wù)方法,而不是一個(gè)數(shù)據(jù)庫操作??梢杂勉y行轉(zhuǎn)賬的例子來說明。2, 事務(wù)管理就是要解決兩個(gè)問題:a) 在同一個(gè)請求中怎么使用同一個(gè)Session?b) 怎么才能不重復(fù)寫業(yè)務(wù)方法中的開關(guān)Session與管理事務(wù)的模板代碼?3, 解決思路:a) 第一個(gè)問題:使用SessionFactory.getCurrentSession()b) 第二個(gè)問題:使用過濾器,攔截的地址為“*.do”。4, 說明:a) 每個(gè)請
28、求使用一個(gè)線程來執(zhí)行。b) 同時(shí)執(zhí)行的多個(gè)請求是多個(gè)不同的線程。c) 先后的兩次請求,有可能使用的是同一個(gè)線程(Web容器有線程池)。要使用SessionFactory.getCurrentSession()方法,需要先在hibernate配置文件中做如下配置,否則不能使用(會(huì)報(bào)錯(cuò)):“<property name="hibernate.current_session_context_class">thread</property>”配置后影響的行為如下:SessionFactory.getCurrentSession()獲取當(dāng)前線程對應(yīng)的Sessi
29、on,如果沒有(一個(gè)線程中的第一次調(diào)用),就會(huì)創(chuàng)建一個(gè)Session并關(guān)聯(lián)到當(dāng)前線程后返回。Tmit()提交事務(wù),在提交后會(huì)自動(dòng)關(guān)閉SessionTransaction.rollback()回滾事務(wù),在回滾后會(huì)自動(dòng)關(guān)閉Session說明:如果配置了currentSessionContext,在提交或回滾事務(wù)后會(huì)自動(dòng)關(guān)閉Session。使用時(shí)就不要再調(diào)用關(guān)閉的代碼了。注意:SessionFactory.openSession()后,本次打開的Session不會(huì)與當(dāng)前線程綁定,也就是說用SessionFactory.getCurrentSession()是拿不到的!采用前面的方式時(shí),每一次請求到達(dá)
30、Filter時(shí)都將開啟一個(gè)事務(wù),而不論Service層是否會(huì)真正的與數(shù)據(jù)庫進(jìn)行交互,為了避免在許多不會(huì)與數(shù)據(jù)庫進(jìn)行交互但又開啟事務(wù)在性能上的損失,可以將事務(wù)的開啟延遲到具體的Service層中,這樣,僅僅在Service層需要進(jìn)行交互的時(shí)候才開啟事務(wù)。不在使用Hibernate來獲取當(dāng)前線程關(guān)聯(lián)的Session,就需要我們自己來實(shí)現(xiàn)這樣的功能。ThreadLocal派上了用場:private static ThreadLocal<Session> sessionMap = new ThreadLocal<Session>();ThreadLocal可以存放以當(dāng)前線程對象
31、為key,以一個(gè)Session對象為value存的信息。3.3. 解決提交的表單內(nèi)容的中文亂碼因?yàn)樗械捻撁娑紝⑹褂胾tf-8編碼,所以提交的表單也是utf-8編碼。在過濾器中設(shè)置request的編碼為utf-8就可以解決POST方式提交表單的中文亂碼問題: public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) request.setCharacterEncoding("utf-8");chain.doFilter(request, response);對于GET方式亂碼不做處理。如做處理,可使用包裝或代理的方式。3.4. 對象管理(BeanFactory)使用工廠模式完解決對實(shí)現(xiàn)類依賴的問題,并使用配置文件配置要使用的實(shí)現(xiàn)類。需要一個(gè)工具類,名為BeanFactory,其中有一個(gè)獲取實(shí)現(xiàn)類的方法,可以定義為:Object BeanFactory
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園常識(shí)《有趣的瓶蓋》教案
- 建筑施工特種作業(yè)-建筑司索指揮信號工真題庫-3
- 山東高考默寫題目及答案
- 2023-2024學(xué)年福建省福清市高二下學(xué)期期末質(zhì)量檢測數(shù)學(xué)試題(解析版)
- 2025屆湖南省郴州市高三三模語文試題(解析版)
- 2025屆甘肅省天水市武山縣部分學(xué)校高三下學(xué)期3月模擬聯(lián)考語文試題(解析版)
- 的全球觀演講稿
- 高一英語摸底考試
- 課桌椅產(chǎn)品質(zhì)量省監(jiān)督抽查實(shí)施細(xì)則
- 電力變壓器產(chǎn)品質(zhì)量省監(jiān)督抽查實(shí)施細(xì)則
- 《花的話完整》課件
- 《上海市溫室氣體排放核算與報(bào)告指南(試行)》(SHMRV-001-2024)文
- 文獻(xiàn)學(xué) 重點(diǎn)知識(shí)全套
- 兒科學(xué)(石河子大學(xué))知到智慧樹章節(jié)測試課后答案2024年秋石河子大學(xué)
- 工程售后服務(wù)管理方案
- DB43∕T 862-2014 保靖黃金茶 毛尖功夫紅茶
- 中職語文高二上學(xué)期拓展模塊上冊期末模擬卷1解析版
- 經(jīng)濟(jì)師考試建筑與房地產(chǎn)經(jīng)濟(jì)高級經(jīng)濟(jì)實(shí)務(wù)試卷及答案指導(dǎo)(2025年)
- 外研版初中英語九年級下冊教案 全冊
- 2024年新《反洗錢法》修訂要點(diǎn)解讀
- 2022-2023學(xué)年廣東省深圳市南山區(qū)七年級(下)期末歷史試卷
評論
0/150
提交評論