版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
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)作用組織的核心競(jìng)爭(zhēng)力源自單位對(duì)內(nèi)外部資源的有效利用。對(duì)它們之間的關(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)打造單位的核心競(jìng)爭(zhē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é)同辦公。提高辦公效率,為各級(jí)領(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)步。簡(jiǎn)單的說,有以下兩點(diǎn):1,利用技術(shù)的手段提高辦公的效率2,信息化,可方便的生成統(tǒng)計(jì)報(bào)表等。1.1.3. 設(shè)計(jì)原則以應(yīng)用為核心,要突出“實(shí)用、易用、簡(jiǎn)潔、穩(wěn)定”。既注重實(shí)效,滿足用戶的現(xiàn)實(shí)需要,又為系統(tǒng)的后續(xù)升級(jí)和擴(kuò)展留有余地。在技術(shù)實(shí)現(xiàn)上,要突出“結(jié)構(gòu)清晰、實(shí)現(xiàn)合理、通俗易懂(簡(jiǎn)單)”。1. 實(shí)用:滿足用戶現(xiàn)實(shí)需要,解決實(shí)際問題,做細(xì)核心功能。2. 易用:使用方便,各項(xiàng)功能一目了然。滿足用戶的使用習(xí)慣,易使用、易維護(hù)、易升級(jí)。實(shí)現(xiàn)“傻瓜”式的操作,將實(shí)施、培訓(xùn)成本和周期降到最低。3. 簡(jiǎn)潔:頁面簡(jiǎn)潔,功能簡(jiǎn)潔,每一個(gè)元素都有存在的意義。4. 穩(wěn)
5、定:從底層數(shù)據(jù)庫到功能層經(jīng)過嚴(yán)格測(cè)試,能在不同的硬件環(huán)境中長(zhǎng)期平穩(wěn)運(yùn)行。1.1.4. 功能說明OA是輔助辦公的軟件,使用OA與不使用OA相對(duì)比的好處是:可以用計(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ì)編碼單元測(cè)試集成測(cè)試系統(tǒng)測(cè)試維護(hù)。單元測(cè)試是由程序員自己來完成,最終受益的也是程序員自己??梢赃@么說,程序員有責(zé)任編寫功能代碼,同時(shí)也就有責(zé)任為自己的代碼編寫單元測(cè)試。執(zhí)行單元測(cè)試,就是為
6、了證明這段代碼的行為和我們期望的一致。集成測(cè)試,也叫組裝測(cè)試或聯(lián)合測(cè)試。在單元測(cè)試的基礎(chǔ)上,將所有模塊按照設(shè)計(jì)要求(如根據(jù)結(jié)構(gòu)圖組裝成為子系統(tǒng)或系統(tǒng),進(jìn)行集成測(cè)試。實(shí)踐表明,一些模塊雖然能夠單獨(dú)地工作,但并不能保證連接起來也能正常的工作。程序在某些局部反映不出來的問題,在全局上很可能暴露出來,影響功能的實(shí)現(xiàn)。系統(tǒng)測(cè)試是將已經(jīng)確認(rèn)的軟件、計(jì)算機(jī)硬件、外設(shè)、網(wǎng)絡(luò)等其他元素結(jié)合在一起,進(jìn)行信息系統(tǒng)的各種組裝測(cè)試和確認(rèn)測(cè)試,其目的是通過與系統(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ù)傳輸對(duì)象)要做到任一層換掉后,其他層不受影響。我們?cè)诖隧?xiàng)目中使用兩層:View+Service即在Service中直接操作Hibernate.Session。因?yàn)槿绻褂萌龑?,在Service中就會(huì)有一部分方法只是直接調(diào)用DAO中的方法。一般情況下只有在多個(gè)數(shù)據(jù)源的場(chǎng)合下適合引入DAO層。三、有關(guān)分層的幾個(gè)問題1,一定要分層嗎?不一定。假如公司要求你寫一個(gè)可以給指定員工發(fā)送短信的小程序,用于開會(huì)通知與自動(dòng)發(fā)送生成祝福短信。這個(gè)程序很小,沒有多少行代碼,而且不變,這時(shí)不分層可以嗎?完全可以呀。但我們?cè)趯懗绦驎r(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ǎn)化結(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ù)編號(hào)工具版本說明1.Struts 1.3.82.JSTL 1.13.Hibernate 3實(shí)現(xiàn)持久化操作4.jBPM工作流支持5.Junit4單元測(cè)試6.jQuery說明:還有jQuery.validate與jQuery.treeview等小插件1.3.3. 開發(fā)環(huán)境操作系統(tǒng)Windows XP開發(fā)工具M(jìn)yEclipse6.0數(shù)據(jù)庫MySql5.0.22Web容器Tomcat6.0瀏覽器IE6說明:1, 推薦使用MyEclipse,這樣出現(xiàn)工具問題可以一起解決。當(dāng)
11、然也可以使用自已熟悉的工具,如Eclipse、NetBeans、IntelliJ?,F(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) 常量:全字字母都大寫,單詞之間使用_隔開。例,DE
12、FAULT_PAGE_SIZEd) 使用有意義的名稱,慎用縮寫。2, 注釋:在代碼中加入適當(dāng)?shù)淖⑨專赫f明步驟,與說明非簡(jiǎn)單邏輯。3, 空行:在代碼中加入適當(dāng)?shù)目招?,就像寫文章時(shí)要分段一樣(增強(qiáng)可讀性)。總之,要保證代碼的有效、清晰、簡(jiǎn)潔(可讀)。1, 有效:這是第一目標(biāo),代碼要是可以解決問題的。2, 清晰:在有效的前提下,讓代碼清晰。3, 簡(jiǎn)潔:代碼與邏輯應(yīng)盡量的簡(jiǎn)單,不要是給別人講別人都聽不明白。1.3.5. 約定1, 工程中所有的文件都采用utf-8編碼。所有的頁面都是使用utf-8編碼,這樣方便解決表單內(nèi)容的亂碼問題。亂碼一般情況下是亂用編碼產(chǎn)生的。2, 實(shí)體的主鍵屬性的類型使用Long
13、型。1.3.6. 項(xiàng)目計(jì)劃功能知識(shí)點(diǎn)預(yù)計(jì)時(shí)間1. 基礎(chǔ)功能a) Dao設(shè)計(jì)b) 事務(wù)管理c) 表單亂碼d) 對(duì)象管理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
15、.1.1. 配置快捷鍵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
16、+LeftAlt+RightCtrl+Shift+X變?yōu)榇髮慍trl+Shift+Y變?yōu)樾? 配置文件的默認(rèn)編碼1, 設(shè)置工程的默認(rèn)編碼為UTF-8。2, 配置JSP的默認(rèn)編碼為utf-83, 配置JavaScript的默認(rèn)編碼為utf-8說明:在MyEclipse7.x或MyEclipse8.x中不用修改,使用的是工程的編碼。. 配置格式化的代碼樣式1, 使用Ctrl+Shift+F可以格式化代碼。2, 在WindowPreferencesJavaCode StyleFormatter中可以設(shè)置代碼樣式。 要把Java代碼與注釋的行寬設(shè)為130。(其他使用默認(rèn)樣
17、式)3, 搜索XML Sources,修改xml的行寬為130。(不考慮打印的情況). MyEclipse工具使用說明1, 導(dǎo)入工程時(shí)可以直接選擇一個(gè)zip文檔:FileImportExisting Projects into Workspace-Select archive file。2, 工程改名后,發(fā)果發(fā)布到Tomcat下,對(duì)應(yīng)的應(yīng)用的名稱不一定改變。這個(gè)名稱是在MyEclipse Web中的Web Context-root中配置的。新建一個(gè)Web Project,并設(shè)置工程的編碼為UTF-8。2.2.2. 添加框架環(huán)境1, 添加Junit4的Jar包。2, JSTL1.1
18、。JavaEE5中已經(jīng)帶了JSTL,但是發(fā)布時(shí)不會(huì)把JavaEE發(fā)布到Tomcat中,有時(shí)會(huì)報(bào)錯(cuò),說找不到JSTL。所以最好再加一下JSTL1.1的環(huán)境。3, 添加Struts1.3.8環(huán)境:(使用向?qū)膳渲梦募缓笤僮约禾砑觠ar包)a) jar包(不要加antlr-2.7.2、jstl-1.0.2、standard-1.0.2,因?yàn)橛袥_突)b) 配置文件(struts-config.xml、修改web.xml)、國際化資源文件、自定義標(biāo)簽庫的TLD文件。配為*.do攔截的請(qǐng)求。4, 添加Hibernate環(huán)境:a) jar包(含JDBC驅(qū)動(dòng)的jar包)b) 配置文件(hibernate
19、.cfg.xml)。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中做如下配置:trueupdate2.3. 工程中的資源分類(目錄與包結(jié)構(gòu))2.3.1. 目錄結(jié)構(gòu)源碼文件夾src項(xiàng)目源代碼 config配置文件 test單元測(cè)試WebRoot文件夾下 scriptJavaScript腳本文件 styleCSS樣式文件 WEB-INF/jspjsp頁面文件(再創(chuàng)建子文件夾分類存放)2.
20、3.2. 包結(jié)構(gòu)使用三層:顯示層(View),業(yè)務(wù)層(Service),數(shù)據(jù)訪問層(Dao)(部分)包名說明cn.itcast.oa.domain實(shí)體(Domain)cn.itcast.oa.daoDao接口cn.itcast.oa.dao.implDao的實(shí)現(xiàn)類cn.itcast.oa.serviceService接口cn.itcast.oa.service.implService的實(shí)現(xiàn)類cn.itcast.oa.web.strutsStruts有關(guān)的類cn.itcast.oa.web.struts.actionStruts的Actioncn.itcast.oa.web.struts.for
21、mbeanStruts的FormBean(ActionForm)cn.itcast.oa.util一些工具類cn.itcast.oa.cfgcn.itcast.oa.web.filterView顯示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接口與Bas
22、eDaoImpl類每個(gè)實(shí)體都應(yīng)有一個(gè)對(duì)應(yīng)的Dao,他封裝了對(duì)這個(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)與List getBy
23、IdList(Long idList)不要合并為L(zhǎng)ist getById(Long. ids),因?yàn)楂@取一個(gè)對(duì)象時(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可以嗎?答:不可以。否則UserDao user
24、Dao = new UserDaoImpl(); 就不成立。使用反射獲取類型參數(shù)的真實(shí)類型的代碼如下:public DaoBaseImpl () Type type = this.getClass().getGenericSuperclass();ParameterizedType pt = (ParameterizedType) type;this.clazz = (Class) pt.getActualTypeArguments()0;說明:1, 使用Session時(shí),不要自己創(chuàng)建,也不要管理事務(wù),直接調(diào)用getSession()即可。2, 暫時(shí)不實(shí)現(xiàn)getSession()方法,在后面的
25、事務(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è)Session?2,怎么不重復(fù)的寫Session與Transact
26、ion的管理代碼?1,同時(shí)執(zhí)行的多個(gè)請(qǐng)求使用的不同的多個(gè)線程。2,先后執(zhí)行的兩個(gè)請(qǐng)求有可能是使用的同一個(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,而不管理Session與事務(wù)3,一次請(qǐng)求的執(zhí)行過程1,在Action中要做什么?1
27、,獲取用戶輸入2,進(jìn)行業(yè)務(wù)處理(調(diào)用業(yè)務(wù)方法)3,給用戶反饋(轉(zhuǎn)到一個(gè)顯示頁面)1, 事務(wù)說明:事務(wù)的范圍是一個(gè)業(yè)務(wù)方法,而不是一個(gè)數(shù)據(jù)庫操作。可以用銀行轉(zhuǎn)賬的例子來說明。2, 事務(wù)管理就是要解決兩個(gè)問題:a) 在同一個(gè)請(qǐng)求中怎么使用同一個(gè)Session?b) 怎么才能不重復(fù)寫業(yè)務(wù)方法中的開關(guān)Session與管理事務(wù)的模板代碼?3, 解決思路:a) 第一個(gè)問題:使用SessionFactory.getCurrentSession()b) 第二個(gè)問題:使用過濾器,攔截的地址為“*.do”。4, 說明:a) 每個(gè)請(qǐng)求使用一個(gè)線程來執(zhí)行。b) 同時(shí)執(zhí)行的多個(gè)請(qǐng)求是多個(gè)不同的線程。c) 先后的兩次請(qǐng)求
28、,有可能使用的是同一個(gè)線程(Web容器有線程池)。要使用SessionFactory.getCurrentSession()方法,需要先在hibernate配置文件中做如下配置,否則不能使用(會(huì)報(bào)錯(cuò)):“thread”配置后影響的行為如下:SessionFactory.getCurrentSession()獲取當(dāng)前線程對(duì)應(yīng)的Session,如果沒有(一個(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說明
29、:如果配置了currentSessionContext,在提交或回滾事務(wù)后會(huì)自動(dòng)關(guān)閉Session。使用時(shí)就不要再調(diào)用關(guān)閉的代碼了。注意:SessionFactory.openSession()后,本次打開的Session不會(huì)與當(dāng)前線程綁定,也就是說用SessionFactory.getCurrentSession()是拿不到的!采用前面的方式時(shí),每一次請(qǐng)求到達(dá)Filter時(shí)都將開啟一個(gè)事務(wù),而不論Service層是否會(huì)真正的與數(shù)據(jù)庫進(jìn)行交互,為了避免在許多不會(huì)與數(shù)據(jù)庫進(jìn)行交互但又開啟事務(wù)在性能上的損失,可以將事務(wù)的開啟延遲到具體的Service層中,這樣,僅僅在Service層需要進(jìn)行交互的
30、時(shí)候才開啟事務(wù)。不在使用Hibernate來獲取當(dāng)前線程關(guān)聯(lián)的Session,就需要我們自己來實(shí)現(xiàn)這樣的功能。ThreadLocal派上了用場(chǎng):private static ThreadLocal sessionMap = new ThreadLocal();ThreadLocal可以存放以當(dāng)前線程對(duì)象為key,以一個(gè)Session對(duì)象為value存的信息。3.3. 解決提交的表單內(nèi)容的中文亂碼因?yàn)樗械捻撁娑紝⑹褂胾tf-8編碼,所以提交的表單也是utf-8編碼。在過濾器中設(shè)置request的編碼為utf-8就可以解決POST方式提交表單的中文亂碼問題: public void doFilt
31、er(ServletRequest request, ServletResponse response, FilterChain chain) request.setCharacterEncoding(utf-8);chain.doFilter(request, response);對(duì)于GET方式亂碼不做處理。如做處理,可使用包裝或代理的方式。3.4. 對(duì)象管理(BeanFactory)使用工廠模式完解決對(duì)實(shí)現(xiàn)類依賴的問題,并使用配置文件配置要使用的實(shí)現(xiàn)類。需要一個(gè)工具類,名為BeanFactory,其中有一個(gè)獲取實(shí)現(xiàn)類的方法,可以定義為:Object BeanFactory.getBean( clazz ); 或 T BeanFactory.getBean(Class clazz)在實(shí)現(xiàn)時(shí),所使
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全員A證考試押題模擬附參考答案詳解(考試直接用)
- 2025年人力資源管理師綜合能力測(cè)評(píng)試題及答案
- 安全員A證考試模擬考試高能及答案詳解【各地真題】
- 招聘考試考試《綜合基礎(chǔ)知識(shí)》絕密真題庫及答案解析
- 一站到底知識(shí)競(jìng)賽題目及答案
- 安全員A證考試題庫含答案詳解【綜合題】
- 法檢系統(tǒng)書記員考試歷年參考題庫含答案解析(5卷合輯)
- 2024屆單招試卷及答案
- 安全員A證考試真題匯編含答案詳解【培優(yōu)a卷】
- 導(dǎo)游證書考試試題及答案解析
- 農(nóng)藝工教學(xué)計(jì)劃
- TSZSA 015-2024 COB LED光源封裝產(chǎn)品技術(shù)規(guī)范
- 2024新外研社版英語七下單詞默寫表(開學(xué)版)
- 衛(wèi)生管理組織制度模版(2篇)
- 《游園》課件統(tǒng)編版高中語文必修下冊(cè)
- 質(zhì)量責(zé)任劃分制度
- JT∕T 1496-2024 公路隧道施工門禁系統(tǒng)技術(shù)要求
- 2024版美團(tuán)商家合作協(xié)議合同范本
- 一年級(jí)上冊(cè)數(shù)學(xué)應(yīng)用題50道(重點(diǎn))
- 嵌入式系統(tǒng)實(shí)現(xiàn)與創(chuàng)新應(yīng)用智慧樹知到期末考試答案章節(jié)答案2024年山東大學(xué)
- 線纜及線束組件檢驗(yàn)標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論