版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 編 號(hào): </p><p> 審定成績(jī): </p><p><b> 畢業(yè)設(shè)計(jì)(論文)</b></p><p> 填表時(shí)間:2010年 04月</p><p><b> 教務(wù)處制</b></p><
2、p> 設(shè)計(jì)(論文)題目:基于mvc模式的CRM框架的研究與改進(jìn)</p><p><b> 摘 要</b></p><p> 目前,國(guó)內(nèi)中小企業(yè)迅速發(fā)展,導(dǎo)致落后的客戶關(guān)系管理能力已經(jīng)很難滿足這些企業(yè)的需求,在這樣的狀況之下,開發(fā)新的客戶關(guān)系管理系統(tǒng)成了企業(yè)提高管理能力的有效手段。為了解決這一問題,我開始研究針對(duì)中小企業(yè)的客戶關(guān)系管理系統(tǒng)框架Bosent C
3、RM,通過(guò)研究開發(fā)更好的客戶關(guān)系管理系統(tǒng)。</p><p> 軟件開發(fā)框架是一個(gè)值得我們研究的課題,一個(gè)優(yōu)秀的框架可以節(jié)約大量的開發(fā)成本。在當(dāng)今J2EE開發(fā)領(lǐng)域,MVC設(shè)計(jì)模式是一個(gè)非常重要的架構(gòu)模式,它能幫助我們建立起強(qiáng)壯的、高效率的、可伸縮的框架平臺(tái)。</p><p> 本論文首先簡(jiǎn)述了MVC設(shè)計(jì)模式的基本概念,其次論述了針對(duì)客戶關(guān)系管理系統(tǒng)的Bosent CRM框架實(shí)現(xiàn)MVC模式
4、的原理,并且詳細(xì)論述了mvc各個(gè)部分的實(shí)現(xiàn)原理,其中包括它的視圖形成過(guò)程、控制器的原理以及模型原理,重點(diǎn)在于菜單形成過(guò)程以及表單數(shù)據(jù)的綁定機(jī)制。最后分析本框架的一些優(yōu)點(diǎn)與不足。</p><p> 最后本論文結(jié)合北京長(zhǎng)信通信息技術(shù)有限公司的客戶關(guān)系管理系統(tǒng),在使用Bosent Crm開發(fā)與測(cè)試過(guò)程中發(fā)現(xiàn)的問題對(duì)框架進(jìn)行改進(jìn)。</p><p> 【關(guān)鍵詞】 CRM MVC設(shè)計(jì)模式
5、 改進(jìn) </p><p><b> ABSTRACT</b></p><p> At present, the rapid development of domestic small and medium enterprises, leading to customer relationship management capabilities backwar
6、d has been difficult to meet the needs of these enterprises in under such a situation to develop new enterprise customer relationship management system became an effective means to improve management capacity. To solve t
7、his problem, I began to study customer relationship management for small and medium system framework Bosent CRM, through research and develo</p><p> [Key words] CRM MVC Transformation</p><p&
8、gt;<b> 聲明</b></p><p><b> 畢業(yè)論文獨(dú)創(chuàng)性聲明</b></p><p> 秉承學(xué)校嚴(yán)謹(jǐn)?shù)膶W(xué)風(fēng)和優(yōu)秀的科學(xué)道德,本人鄭重聲明,所呈交的論文是我個(gè)人在導(dǎo)師與項(xiàng)目經(jīng)理指導(dǎo)下進(jìn)行的研究工作及取得的研究成果。盡我所知,除了論文中特別注明和致謝的地方外,論文中不包含其他人已經(jīng)發(fā)表和撰寫的研究成果。特此聲明。</p>
9、;<p> 本人簽名: 日期:</p><p><b> 目 錄</b></p><p><b> 摘 要2</b></p><p> ABSTRACT3</p><p><b> 聲明4</b
10、></p><p><b> 目 錄5</b></p><p><b> 緒 論7</b></p><p> 第一章研究概述8</p><p> 第一節(jié)研究背景8</p><p> 第二節(jié)研究?jī)?nèi)容及目標(biāo)8</p><p&
11、gt; 第三節(jié)本章小結(jié)8</p><p> 第二章J2EE平臺(tái)與MVC設(shè)計(jì)模式9</p><p> 第一節(jié)J2EE體系結(jié)構(gòu)9</p><p><b> 一、概述9</b></p><p><b> 二、體系結(jié)構(gòu)9</b></p><p> 第二
12、節(jié)MVC設(shè)計(jì)模式概述10</p><p> 第三節(jié)本章小結(jié)11</p><p> 第三章Bosent Crm框架MVC原理12</p><p> 第四節(jié)控制器13</p><p> 一、控制器類13</p><p> 二、共享數(shù)據(jù)區(qū)17</p><p> 三、
13、配置文件18</p><p><b> 第五節(jié)模型20</b></p><p> 一、Action錯(cuò)誤!未定義書簽。</p><p> 二、JavaBean22</p><p> 三、數(shù)據(jù)庫(kù)連接池23</p><p><b> 第六節(jié)視圖25</b
14、></p><p> 一、視圖原理25</p><p><b> 二、菜單27</b></p><p><b> 三、標(biāo)簽庫(kù)30</b></p><p> 第七節(jié)本章小結(jié)30</p><p> 第四章Bosent Crm平臺(tái)的功能改進(jìn)30&
15、lt;/p><p> 第一節(jié)權(quán)限體系改造30</p><p> 一、功能需求30</p><p> 二、改造基本思路31</p><p> 三、修改過(guò)程31</p><p> 第二節(jié)表單重復(fù)提交問題32</p><p> 一、問題描述32</p>&
16、lt;p> 二、同步令牌機(jī)制32</p><p> 三、Bonsent CRM改造詳細(xì)說(shuō)明34</p><p> 第三節(jié)標(biāo)簽顯示錯(cuò)誤問題36</p><p> 一、錯(cuò)誤現(xiàn)象36</p><p> 二、錯(cuò)誤分析37</p><p> 三、修改說(shuō)明37</p><
17、;p> 第四節(jié)增強(qiáng)日志功能錯(cuò)誤!未定義書簽。</p><p> 一、問題描述錯(cuò)誤!未定義書簽。</p><p> 二、實(shí)現(xiàn)方案錯(cuò)誤!未定義書簽。</p><p> 第五節(jié)增加集群功能38</p><p> 一、集群(cluster)和負(fù)載均衡的基本概念38</p><p> 二、
18、Bosent CRM平臺(tái)可以使用集群39</p><p> 三、使用JGroups技術(shù)實(shí)現(xiàn)集群40</p><p> 第六節(jié)本章小結(jié)41</p><p><b> 結(jié) 論42</b></p><p><b> 致 謝43</b></p><p>&l
19、t;b> 參考文獻(xiàn)44</b></p><p><b> 附 錄45</b></p><p><b> 緒 論</b></p><p> 客戶關(guān)系管理系統(tǒng)是企業(yè)為了滿足每個(gè)客戶的特殊需求,同每個(gè)客戶建立聯(lián)系,通過(guò)同客戶的聯(lián)系來(lái)了解客戶的不同需求,并在此基礎(chǔ)上進(jìn)行"一對(duì)一"
20、;個(gè)性化服務(wù)。</p><p> CRM廠商大致可以分成三類,第一類是國(guó)際大型軟件廠商,如Oracle、SAP等,他們的客戶定位主要在國(guó)內(nèi)特大型企業(yè),或者國(guó)內(nèi)五百?gòu)?qiáng)企業(yè)。另外一類是用友、金蝶,還有國(guó)內(nèi)傳統(tǒng)的幾家大型管理軟件的企業(yè),這類企業(yè)更多的是聚焦在中大型企業(yè)身上,他們可能有自己獨(dú)立的產(chǎn)品,包括自己的服務(wù)體系,金額大概幾百萬(wàn)到幾千萬(wàn)范圍。第三類是一些中小型軟件廠商,這類廠商主要聚焦在中小型企業(yè)或者快速發(fā)展型的
21、企業(yè)身上。</p><p> 目前的中小企業(yè)在發(fā)展過(guò)程中,往往存在著非常多的困難,特別是客戶管理,從最早的紙質(zhì)表格到之后的excel報(bào)表,到如今的CRM系統(tǒng),可以說(shuō),每一次改革,都是一次質(zhì)的飛躍。而如今,市場(chǎng)競(jìng)爭(zhēng)異常激烈,一個(gè)企業(yè)最重要的資源是什么:無(wú)非就是公司的員工和客戶資源;而客戶資源如何獲???如何非常好的管理這些客戶資源,也許這是一個(gè)令中小企業(yè)一個(gè)非常頭痛的難題。 </p><p>
22、; 本論文研究的是針對(duì)中小企業(yè)客戶關(guān)系管理的Bosent Crm框架,它是一種基于MVC模式的B/S結(jié)構(gòu)的框架,它的前身是Intel公司投資的一個(gè)小型開源應(yīng)用框架Centric CRM 2.9 。在研究Bosent Crm框架基礎(chǔ)上對(duì)該框架的各個(gè)層次的組成、功能進(jìn)行了詳細(xì)的描述,并在熟悉框架的基礎(chǔ)上對(duì)框架進(jìn)行改進(jìn),包括權(quán)限體系改進(jìn)、表單重復(fù)提交、標(biāo)簽顯示錯(cuò)誤、增強(qiáng)日志功能和集群功能。</p><p><b
23、> 研究概述</b></p><p><b> 研究背景</b></p><p> 上世紀(jì)90年代初,隨著Internet的出現(xiàn)和迅速發(fā)展,國(guó)外的CRM應(yīng)用開始投入使用 ,到如今發(fā)展已經(jīng)非常的強(qiáng)大,例如美國(guó)的ORACLE、德國(guó)的SAP等。</p><p> 目前隨著國(guó)內(nèi)中小企業(yè)的迅速發(fā)展,國(guó)內(nèi)中小企業(yè)為了提高客戶滿意度
24、,必須完整掌握客戶信息,準(zhǔn)確把握客戶要求,快速響應(yīng)個(gè)性化需求,提供便捷的購(gòu)買渠道、良好的售后服務(wù)。但是傳統(tǒng)的客戶關(guān)系管理系統(tǒng)難以達(dá)到目的,尤其是在國(guó)內(nèi),許多企業(yè)的內(nèi)部管理混亂隨意,有的企業(yè)從過(guò)去的“計(jì)劃經(jīng)濟(jì)”體制下改革而來(lái),對(duì)客戶管理缺乏了解,沒有經(jīng)驗(yàn)。因此對(duì)客戶關(guān)系管理系統(tǒng)的研究具有重要意義。</p><p><b> 研究?jī)?nèi)容及目標(biāo)</b></p><p>
25、該論題來(lái)源于北京長(zhǎng)信通信息技術(shù)有限公司的客戶關(guān)系管理系統(tǒng)的二次開發(fā),在公司的客戶關(guān)系管理系統(tǒng)需求等變化的情況下,我開始研究公司的客戶關(guān)系管理系統(tǒng)開發(fā)所使用的Bosent CRM框架。</p><p> 研究的主內(nèi)容就是Bosent CRM 框架在J2EE平臺(tái)體系之下實(shí)現(xiàn)MVC設(shè)計(jì)模式的原理。論文首先介紹J2EE平臺(tái)的體系結(jié)構(gòu)與MVC設(shè)計(jì)模式,其次論述了Bosent CRM實(shí)現(xiàn)MVC設(shè)計(jì)模式的整個(gè)過(guò)程。<
26、/p><p> 研究目標(biāo)是在深入理解J2EE體系結(jié)構(gòu)的基礎(chǔ)上,深入研究Bosent CRM 框架的原理,并對(duì)Bosent CRM框架進(jìn)行改進(jìn),使開發(fā)出更好的客戶關(guān)系管理系統(tǒng)。</p><p><b> 本章小結(jié)</b></p><p> 本章主要介紹我研究的課題的背景,并介紹了在這樣的背景之下我研究的課題的內(nèi)容以及研究的目標(biāo)。</p&
27、gt;<p> J2EE平臺(tái)與MVC設(shè)計(jì)模式</p><p><b> J2EE體系結(jié)構(gòu)</b></p><p><b> 概述</b></p><p> J2EE是一種利用Java2平臺(tái)來(lái)簡(jiǎn)化企業(yè)解決方案的開發(fā)部署和管理相關(guān)的復(fù)雜的體系結(jié)構(gòu)。它的核心技術(shù)就是java平臺(tái)標(biāo)準(zhǔn)版,J2EE中不僅保留了j
28、ava2標(biāo)準(zhǔn)中的優(yōu)點(diǎn),例如平臺(tái)的可移植性特性,數(shù)據(jù)庫(kù)處理的JDBC接口,CORBA技術(shù)已經(jīng)能夠在Internet應(yīng)用中保護(hù)數(shù)據(jù)的安全模式,還提供了對(duì)EJB,Servlet,JSP、XML技術(shù)的支持。J2EE平臺(tái)的出現(xiàn)使得企業(yè)開發(fā)者大幅度縮短軟件開發(fā)時(shí)間,它提供中間件集成框架用來(lái)滿足無(wú)需太多費(fèi)用而又需要高可靠性,高可用性和可擴(kuò)展性的需求。</p><p> 實(shí)際上,J2EE平臺(tái)最大的優(yōu)點(diǎn)在于它提供了統(tǒng)一標(biāo)準(zhǔn),并且
29、是開源的。只要按照J(rèn)2EE標(biāo)準(zhǔn)開發(fā)出的中間件,都可以在J2EE容器中運(yùn)行,這是得中間件的可移植性提高,并且專注于J2EE標(biāo)準(zhǔn)的進(jìn)行開發(fā)web應(yīng)用的人員可以自由編寫中間件。</p><p><b> 體系結(jié)構(gòu)</b></p><p> J2EE體系結(jié)構(gòu)主要包括客戶端、表示層、業(yè)務(wù)邏輯層、后臺(tái)支持系統(tǒng)組成。詳述如下:</p><p> 客戶端
30、:括IE和應(yīng)用客戶端。</p><p> 表示層:主要是web服務(wù)器,典型的web表示層包括jsp、servlet組件。</p><p> 業(yè)務(wù)邏輯層:包括JavaBean、EJB,它們根據(jù)規(guī)則進(jìn)行業(yè)務(wù)邏輯處理。</p><p> 后臺(tái)支持系統(tǒng):主要是指數(shù)據(jù)庫(kù)服務(wù)器。</p><p><b> J2EE體系結(jié)構(gòu)圖</b
31、></p><p> 本論文主要研究的是表示層和業(yè)務(wù)邏輯層用MVC結(jié)構(gòu)實(shí)現(xiàn)。</p><p><b> MVC設(shè)計(jì)模式概述</b></p><p> 模型-視圖-控制器(下文簡(jiǎn)稱為“MVC”)設(shè)計(jì)模式是Xerox PARC 在20世紀(jì)80年代為編程語(yǔ)言Smalltalk 80發(fā)明的用于用戶交互應(yīng)用程序的一種軟件設(shè)計(jì)模式,它將表現(xiàn)邏輯
32、與業(yè)務(wù)邏輯分開,并且使用一個(gè)控制器控制表現(xiàn)邏輯與業(yè)務(wù)邏輯,使它們能夠有序的工作。這種三層架構(gòu)廣泛應(yīng)用于基于J2EE的web系統(tǒng)中,其原理如下圖所示:</p><p> 模型-視圖-控制器三層架構(gòu)圖</p><p> MVC設(shè)計(jì)模式主要的組成部分包括:</p><p> 視圖:它是和用戶交互的界面,用來(lái)顯示應(yīng)用系統(tǒng)數(shù)據(jù),并能接收用戶輸入的數(shù)據(jù)。但是它并不進(jìn)行任何
33、實(shí)際的業(yè)務(wù)處理。視圖可以向模型查詢業(yè)務(wù)狀態(tài),但是不能改變模型。視圖還能接受模型發(fā)出的數(shù)據(jù)更新事件,從而對(duì)用戶界面進(jìn)行同步更新。需要注意的是:在基于請(qǐng)求/響應(yīng)模式的web應(yīng)用系統(tǒng)中,模型位于web服務(wù)器端,視圖位于用戶瀏覽器端,而無(wú)法做到模型向視圖主動(dòng)發(fā)出數(shù)據(jù)更新事件,使用戶界面能自動(dòng)刷新。</p><p> 模型:它是應(yīng)用系統(tǒng)的主體。模型表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯。一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于同一個(gè)模型可以被
34、多個(gè)視圖重用,因此提高了應(yīng)用的可重用性。</p><p> 控制器:它是用來(lái)接受用戶的輸入并調(diào)用模型和視圖完成用戶的需求。當(dāng)web用戶單擊web頁(yè)面中的提交按鈕發(fā)送HTML表單時(shí),控制器接收請(qǐng)求并調(diào)用相應(yīng)的模型組件來(lái)處理請(qǐng)求,然后調(diào)用相應(yīng)的視圖顯示模型返回的數(shù)據(jù)。</p><p><b> MVC模型的優(yōu)點(diǎn):</b></p><p> 在
35、傳統(tǒng)的web系統(tǒng)中,通常將操作數(shù)據(jù)庫(kù)的數(shù)據(jù)層代碼和html這樣的表現(xiàn)層代碼混合在一起。而MVC模型從根本上強(qiáng)制性的將它們分開,這樣的好處是:</p><p> 多個(gè)視圖可以共享一個(gè)模型。在MVC模型中,模型響應(yīng)用戶請(qǐng)求并返回響應(yīng)數(shù)據(jù),視圖負(fù)責(zé)格式化數(shù)據(jù)并將數(shù)據(jù)顯示給用戶,業(yè)務(wù)邏輯和表示層分離,同一個(gè)模型可以被不同的視圖重用,大大提高了代碼的可重用性;</p><p> 模型是自包含的,
36、和控制器、視圖保持相對(duì)獨(dú)立,可以方便改變應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)邏輯,能構(gòu)造良好的松耦合的構(gòu)件;</p><p> 控制器提高了應(yīng)用程序的靈活性和可配置性。控制器可以用來(lái)連接不同的模型和視圖去完成用戶的需求,也可以為構(gòu)造應(yīng)用程序提供強(qiáng)有力的手段。</p><p><b> 本章小結(jié)</b></p><p> 本章主要介紹了J2EE體系結(jié)構(gòu)和
37、MVC設(shè)計(jì)模式的原理。</p><p> Bosent Crm框架MVC原理</p><p> Bosent Crm架構(gòu)是基于J2EE體系之下的中間件框架,它采用MVC設(shè)計(jì)模式,它是類似struts1.x的架構(gòu),其中使用一個(gè)servlet作為控制器,目前使用jsp模板構(gòu)建視圖(框架支持Xsl模板,但目前還沒有實(shí)現(xiàn)),使用自定義標(biāo)簽庫(kù)使業(yè)務(wù)邏輯與視圖分離,使用JavaBean實(shí)現(xiàn)數(shù)據(jù)模型
38、,使用action處理業(yè)務(wù)邏輯。它的架構(gòu)如下圖所示:</p><p> Bosent CRM請(qǐng)求-應(yīng)答的具體流程描述如下:</p><p><b> 控制器部分</b></p><p> 當(dāng)客戶端發(fā)出web請(qǐng)求時(shí),請(qǐng)求將被控制器中的Service方法接收到;</p><p> 首先,在Service方法中會(huì)調(diào)用
39、SecurityHook(安全鉤子)對(duì)請(qǐng)求進(jìn)行安全檢驗(yàn),但是不處理名稱為L(zhǎng)OGIN、SETUP、UPGRADE、LICENSESERVER和PROCESS的請(qǐng)求;對(duì)PORTAL請(qǐng)求進(jìn)行特殊處理,以創(chuàng)建用戶session,在SecurityHook中如果檢查到是第一次調(diào)用,則還會(huì)創(chuàng)建SystemStatus對(duì)象;</p><p> 然后,將從頁(yè)面?zhèn)鬟f來(lái)的數(shù)據(jù)綁定為和Action對(duì)應(yīng)的Formbean對(duì)象;<
40、/p><p> 隨后,調(diào)用Action,執(zhí)行Action中定義的方法;</p><p> 最后,處理完后調(diào)用Forward方法;</p><p> Action:架構(gòu)中的模型部分</p><p> Action中定義了業(yè)務(wù)邏輯,實(shí)現(xiàn)業(yè)務(wù)處理和數(shù)據(jù)庫(kù)的交互。</p><p><b> 視圖部分</b
41、></p><p> 在Forward方法中,根據(jù)action配置文件,決定是調(diào)用action,還是根據(jù)XSL模板生成頁(yè)面(目前沒有實(shí)現(xiàn)),還是返回jsp頁(yè)面,在jsp頁(yè)面中菜單的形成是可配置的,通過(guò)在XML文件中配置菜單包括它的鏈接,使得在視圖非常的靈活可配置。最終將生成的菜單添加到JSP模板中形成視圖發(fā)送給客戶端瀏覽器。</p><p><b> 控制器</b
42、></p><p><b> 控制器類</b></p><p> 控制器類是一個(gè)Servlet類,它是MVC機(jī)制的核心類,它控制整個(gè)框架有秩序的工作。這個(gè)控制器除了實(shí)現(xiàn)了HttpServlet接口外,還實(shí)現(xiàn)了其它的鉤子接口,這也是框架可擴(kuò)展性的體現(xiàn)??刂破鱯ervlet主要的三個(gè)生命周期方法init、service、destroy。</p>&
43、lt;p> 在init方法中解析一個(gè)xml文件得到視圖與模型之間的映射關(guān)系,并提供全局的HashMap類型的變量保存這些映射關(guān)系提供多線程使用。當(dāng)用戶請(qǐng)求URL被service方法接收到,首先解析整個(gè)URL得到要處理的action名稱,根據(jù)名稱反射生成action類的實(shí)例并調(diào)用相關(guān)的方法處理請(qǐng)求,servlet提供全局的HashMap類型的變量緩存這些action實(shí)例,這樣做的好處是當(dāng)服務(wù)器配置支持多線程時(shí),第一個(gè)用戶請(qǐng)求了這個(gè)
44、action后其它用戶可以直接到HashMap類型的實(shí)例緩存中查找并使用這個(gè)實(shí)例。詳細(xì)論述如下:</p><p><b> 控制器初始化</b></p><p> 控制器類的初始化包括整個(gè)匡架的共享數(shù)據(jù)初始化、鉤子類的初始化,這些類都是通過(guò)配置文件配置,然后解析XML文件得到配置信息,再通過(guò)反射機(jī)制生成這些類的實(shí)例。所有這個(gè)框架的很多資源都是可配置的。例如,在we
45、b.xml文件中配置servlet的初始化參數(shù),容器解析初始化參數(shù)并傳遞給控制器servlet的初始化方法。具體的處理流程如左圖所示。</p><p> 控制器的service方法</p><p> service方法是整個(gè)框架核心的方法,客戶端瀏覽器發(fā)出請(qǐng)求,Tomcat容器將請(qǐng)求參數(shù)封裝成HttpRequest對(duì)象,并創(chuàng)建HttpResponse對(duì)象,將這兩個(gè)對(duì)象傳遞到servic
46、e方法,service方法中讀取HttpRequest對(duì)象中封裝的請(qǐng)求信息,從請(qǐng)求URL中讀取出處理請(qǐng)求的action名稱,再反射生成action實(shí)例,調(diào)用action中的哪一個(gè)方法處理請(qǐng)求是由請(qǐng)求URL中的command參數(shù)值決定的。其中在數(shù)據(jù)傳遞過(guò)程中,框架的數(shù)據(jù)綁定機(jī)制是非常重要的,它不同于struts1.x數(shù)據(jù)綁定機(jī)制,在Struts1.x中表單bean類繼承ActionForm類才能實(shí)現(xiàn)參數(shù)綁定,而本框架是根據(jù)URL中傳遞的a
47、uto-populate參數(shù)值決定是否綁定參數(shù)的,這樣做了使系統(tǒng)的與框架之間的耦合性降低,系統(tǒng)可移植性得到提高。最終action的方法執(zhí)行返回常量字符串,調(diào)用forward方法跳轉(zhuǎn)到視圖。</p><p><b> 具體流程如圖所示:</b></p><p><b> 安全校驗(yàn)</b></p><p> 安全校驗(yàn)是框
48、架的重要的一個(gè)方面,它保證了框架的安全性。安全性校驗(yàn)是在控制器類的service方法中進(jìn)行的,它主要包括SSL安全驗(yàn)證、驗(yàn)證用戶會(huì)話的有效性、將用戶信息存放到session中,重點(diǎn)在于創(chuàng)建共享數(shù)據(jù)區(qū)SystemStatus對(duì)象,這個(gè)對(duì)象是一個(gè)框架本身提供的一個(gè)共享數(shù)據(jù)區(qū),它存放所有用戶共享數(shù)據(jù),這個(gè)在論文后面框架改進(jìn)的集群(緩存同步)部分得到體現(xiàn)。流程圖如下圖所示:</p><p> 創(chuàng)建SystemStatu
49、s對(duì)象</p><p><b> 流程圖如下圖所示:</b></p><p> 獲取所有用戶數(shù)據(jù)(Hashtable類型)</p><p> 獲取系統(tǒng)參數(shù)數(shù)據(jù)(Site Preferences) (LinkedHashMap類型)</p><p> 配置工作流管理器參數(shù)</p><p>
50、 獲取全局權(quán)限數(shù)據(jù)(Role permission cache)</p><p> 獲取WebdavResources數(shù)據(jù)</p><p><b> 參數(shù)自動(dòng)綁定</b></p><p> 參數(shù)綁定是整個(gè)框架中的重點(diǎn),它是框架中數(shù)據(jù)從視圖層傳遞到模型層的關(guān)鍵所在。參數(shù)是否自動(dòng)綁定是由請(qǐng)求URL中參數(shù)auto-populate參數(shù)值決定,
51、只要參數(shù)值為true,則會(huì)將請(qǐng)求對(duì)象HttpRequest中的參數(shù)信息綁定到相匹配的JavaBean中,再將JavaBean傳遞到模型層進(jìn)行業(yè)務(wù)邏輯處理。</p><p> 而頁(yè)面數(shù)據(jù)和JavaBean數(shù)據(jù)的自動(dòng)綁定是類com.darkhorseventures.framework.beans.BeanUtils實(shí)現(xiàn)的,原理是:</p><p> 從requset區(qū)域中獲得所有的參數(shù);
52、</p><p> 反射創(chuàng)建配置文件(cfs-config.xml)中定義的JavaBean;</p><p> 循環(huán)參數(shù),根據(jù)參數(shù)的名字,調(diào)用JavaBean中的“set+參數(shù)名字”方法,將參數(shù)值寫入JavaBean中;</p><p> 將JavaBean存放到requset區(qū)域中;</p><p> 控制器forward方法&l
53、t;/p><p> forward方法根據(jù)action執(zhí)行結(jié)果進(jìn)行跳轉(zhuǎn),目前框架使用jsp模板實(shí)現(xiàn)視圖,框架也支持xsl模板。這個(gè)方法重點(diǎn)在于形成菜單的過(guò)程,包括主菜單、子菜單,然后把菜單信息封裝在JavaBean中傳遞到前臺(tái)的jsp模板中構(gòu)建視圖。這里的菜單是比較特別的,它是通過(guò)xml文件配置的,配置中包括主菜單、子菜單的層次結(jié)構(gòu)、名稱、鏈接、菜單權(quán)限以及格式css文件,通過(guò)解析配置文件得這些信息并封裝在Java
54、Bean中,傳遞給jsp模板。其實(shí)這樣做的好處是菜單非常的靈活,通過(guò)xml文件配置主菜單、子菜單,而不用修改代碼即可增加一個(gè)模塊。</p><p> 在流程圖如下圖所示:</p><p><b> 共享數(shù)據(jù)區(qū)</b></p><p> 共享數(shù)據(jù)區(qū)是這個(gè)框架比交重要的一個(gè)點(diǎn),也是我在研究過(guò)程中遇到問題最多的一個(gè)地方,當(dāng)然最終還是理解了。&l
55、t;/p><p> 在Bosent CRM系統(tǒng)中共享數(shù)據(jù)區(qū)是用來(lái)存放系統(tǒng)共用的數(shù)據(jù),一般在系統(tǒng)啟動(dòng)過(guò)程中構(gòu)建,用于存放系統(tǒng)級(jí)數(shù)據(jù),或者用戶共享的數(shù)據(jù)。</p><p> 共享數(shù)據(jù)區(qū)的層次關(guān)系如下圖所示:</p><p> 架構(gòu)內(nèi)置的共享數(shù)據(jù)區(qū)一共有三種:</p><p> SystemStatus:虛擬主機(jī)(Virtual Host)共享
56、數(shù)據(jù)區(qū)。主要從system.xml、workflow.xml等配置文件中載入數(shù)據(jù)。以及系統(tǒng)共享的“緩存的用戶數(shù)據(jù)”、 “Lookup Lists對(duì)象”和“workflow”對(duì)象等。</p><p> ServletContext:存放全局共享對(duì)象,例如ApplicationPrefs對(duì)象、ImportManager對(duì)象、Crontab、Scheduler等。</p><p> Appl
57、icationPrefs:上下文共享數(shù)據(jù)區(qū),存放全局共享對(duì)象的參數(shù)。需要特別注意:ApplicationPrefs存放的是存放在Servlet Context中對(duì)象的參數(shù),而不是對(duì)象本身,這點(diǎn)很重要。ApplicationPrefs主要從build.properties文件(build.properties文件位于安裝路徑下)中讀取參數(shù)。特別注意:build.properties文件包括數(shù)據(jù)庫(kù)連接數(shù)量這個(gè)重要參數(shù)。</p>
58、<p><b> 配置文件</b></p><p><b> 配置文件類型</b></p><p> 架構(gòu)內(nèi)置的共享數(shù)據(jù)區(qū)其數(shù)據(jù)主要來(lái)源于各種配置文件,將其分為三類:</p><p> 框架級(jí)配置文件,主要指web.xml,cfs-config.xml主要用于配置CRM框架;</p>&l
59、t;p> 安裝配置文件,主要指build.properties,此文件在安裝過(guò)程中形成;此參數(shù)主要存放在ApplicationPrefs對(duì)象中,是非常重要的數(shù)據(jù)對(duì)象;</p><p> 應(yīng)用系統(tǒng)配置文件:用于配置應(yīng)用系統(tǒng)模塊,例如action、菜單等。</p><p><b> 配置文件參數(shù)</b></p><p><b>
60、; 框架級(jí)配置文件</b></p><p><b> web.xml</b></p><p> web.xml配置文件主要用于配置CRM框架,它與容器交互。</p><p> cfs-config.xml</p><p> 該配置文件配置了action、jsp視圖和表單Bean三者之間的關(guān)系。通過(guò)該
61、配置文件控制器就可以按照規(guī)則來(lái)調(diào)用Bean綁定請(qǐng)求參數(shù)并調(diào)用相關(guān)的action處理請(qǐng)求,最終返回相應(yīng)的JSP視圖。這個(gè)配置文件在整個(gè)MVC框架中起到核心作用,控制整個(gè)流程。</p><p><b> 安裝配置文件</b></p><p> 安裝過(guò)程中會(huì)產(chǎn)生配置文件build.properties,此配置文件位于安裝路徑下(例如:C:\BosentCRM),主要存放
62、用戶配置系統(tǒng)的一些參數(shù). </p><p><b> 資源文件</b></p><p> 存放系統(tǒng)共用的數(shù)據(jù)字典數(shù)據(jù)。</p><p> 語(yǔ)言資源文件位于web應(yīng)用的\WEB-INF\languages目錄中,不同語(yǔ)種資源文件是一個(gè)由dictionary 加上語(yǔ)言代碼組成.xml文件,例如:dictionary_zh_CN.xml,具體
63、位置如下圖所示:</p><p> 資源文件主要內(nèi)容包括下面四個(gè)組成部分:</p><p> 標(biāo)識(shí)字符串標(biāo)志"system.fields.label"</p><p> 菜單字符串標(biāo)志"system.container.menu.label"</p><p> 子菜單字符串標(biāo)志"sys
64、tem.submenu.label"</p><p> 模板字符串標(biāo)志"system.modules.label"</p><p> system.xml</p><p> 在安裝過(guò)程中,system.xml文件被復(fù)制到安裝路徑下的數(shù)據(jù)庫(kù)名稱文件夾中,即fileLibrary/[database name]/system.xml。
65、</p><p> 此文件包含安裝時(shí)的配置數(shù)據(jù),標(biāo)簽庫(kù)和模塊能訪問這些數(shù)據(jù)。例如開發(fā)一個(gè)action能訪問第三方的數(shù)據(jù)庫(kù),那么可以把數(shù)據(jù)庫(kù)連接信息存放在此文件中,而不用在action類中寫死。 </p><p><b> 應(yīng)用系統(tǒng)配置文件</b></p><p> cfs-modules.xml</p><p>
66、 此配置文件用于確定主菜單和子菜單的顯示順序,以及每個(gè)菜單項(xiàng)的權(quán)限。</p><p> Action以URL的形式映射到菜單項(xiàng)。</p><p> 其他的參數(shù)用來(lái)定義顯示在菜單項(xiàng)上的文字、定義權(quán)限標(biāo)識(shí)以及顯示在HTML頁(yè)面的標(biāo)題。例如下面的配置信息:</p><p><b> 模型</b></p><p> 模
67、型(Action)表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個(gè)部件中,模型擁有最多的處理任務(wù)。例如它可能用象EJBs和ColdFusion Components這樣的構(gòu)件對(duì)象來(lái)處理數(shù)據(jù)庫(kù)。被模型返回的數(shù)據(jù)是中立的,就是說(shuō)模型與數(shù)據(jù)格式無(wú)關(guān),這樣一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫一次就可以被多個(gè)視圖重用,所以減少了代碼的重復(fù)性。</p><p><b> 基類</b><
68、/p><p> 在Bosent CRM框架中,所有的模型Action類都必須繼承基類org.aspcfs.modules.actions.CFSModule,其實(shí)也就是說(shuō)基類CFSModule中定義了Action的公共功能,此類包含的比較重要的方法有:</p><p> freeConnection方法</p><p> 要對(duì)整個(gè)action中的異常捕獲,以釋放資
69、源,如數(shù)據(jù)庫(kù)連接的釋放。調(diào)用基類的方法。</p><p> 執(zhí)行Action缺省動(dòng)作的executeCommandDefault方法;</p><p> 獲取SystemStatus共享數(shù)據(jù)的getSystemStatus(ActionContext context)方法;</p><p> 獲取當(dāng)前用戶的getUser方法;</p><p
70、> 獲取用戶列表的getUserTable方法;</p><p><b> 映射特性</b></p><p> 如果在Action中定義了多個(gè)處理業(yè)務(wù)邏輯的方法,就必須處理好映射特性:一般的,struts Web框架中的action只有一個(gè)固定服務(wù)方法(execute),而Bosent CRM的Action是一個(gè)多方法的action。通過(guò)在URL中定義方法
71、,讓控制器識(shí)別,并調(diào)用Action中對(duì)應(yīng)的方法。 </p><p> 之所以如此設(shè)計(jì),是為減少action類的數(shù)量,選擇了在請(qǐng)求中映射方法的策略,也就是說(shuō)Action在cfs-config.xml中可以有多個(gè)返回資源,各個(gè)資源在action中是一個(gè)方法的多個(gè)程序分支的返回,也可以是action的不同方法的返回。即:通過(guò)URL中的“command”參數(shù),可以將一個(gè)控制器中定義的方法映射到命令中。而不用像Strut
72、s1.0中為一個(gè)命令定義一個(gè)控制器。</p><p><b> 數(shù)據(jù)傳遞機(jī)制</b></p><p> 數(shù)據(jù)傳遞機(jī)制是框架的核心,無(wú)論是什么框架都必須思考的問題。通過(guò)配置文件,配置頁(yè)面中的JavaBean數(shù)據(jù)(例如<input>標(biāo)簽定義的數(shù)據(jù))和控制器之間的映射關(guān)系。</p><p> 例如cfs-config.xml文件中A
73、ction配置內(nèi)容如下所示: </p><p> 上述配置文件將名稱是“user”的UserBean類和名稱是login的action相關(guān)聯(lián)。特別注意的是:如果在URL中設(shè)置了“auto-populate=true”,則將實(shí)現(xiàn)參數(shù)自動(dòng)綁定功能。例如下面的代碼:</p><p> <form name="login" method="POST"
74、; action="Login.do?command=Login&auto-populate=true"> </p><p> 將頁(yè)面中的用戶名和密碼自動(dòng)綁定到JavaBean類LoginBean。</p><p> 開發(fā)者不需要在直接從request數(shù)據(jù)區(qū)中獲取數(shù)據(jù),而是頁(yè)面元素和JavaBean能自動(dòng)綁定,這種功能其實(shí)類似于Struts1.0中的
75、ActionForm類的作用 auto-populate功能將HTML的“名稱-值”對(duì)映射到特定的JavaBean。</p><p> Action配置文件</p><p> Action配置文件包括\WebContent\WEB-INF 路徑下的cfs-config.xml和cfs-config-globalactions.xml, 主要用于配置用戶開發(fā)的Action。</p&
76、gt;<p><b> JavaBean</b></p><p> JavaBean是實(shí)現(xiàn)業(yè)務(wù)邏輯的關(guān)鍵類,因此必須遵守一定的規(guī)范,以加強(qiáng)代碼質(zhì)量。在Bosent CRM框架中必須按照如下規(guī)則開發(fā)JavaBean:</p><p> 所有新增JavaBean仍然依靠程序員手寫。</p><p> 不考慮加入DAO框架。原因
77、:加入DAO框架會(huì)破壞CRM原有的持久層體系,并且沒有直接手寫JavaBean靈活。</p><p> JavaBean繼承于GenericBean</p><p> 所有新增JavaBean都繼承于GenericBean,這個(gè)類是在包</p><p> com.darkhorseventures.framework.beans中的。</p>&
78、lt;p> 采用“主動(dòng)域?qū)ο竽J健遍_發(fā)JavaBean</p><p> 并且仍然采用原來(lái)JavaBean的“主動(dòng)域?qū)ο竽J健眮?lái)開發(fā),增,刪,改,查操作全部都封裝在同一個(gè)對(duì)象中,查詢返回的參數(shù)統(tǒng)一為泛型的ArrayList對(duì)象。原因:原有JavaBean的查詢模式太過(guò)復(fù)雜,直接在JavaBean的查詢方法里面返回結(jié)果集更易于理解和操作。</p><p> 沒有復(fù)雜的多表關(guān)聯(lián)查詢
79、功能,只對(duì)一個(gè)表進(jìn)行操作</p><p> 數(shù)據(jù)庫(kù)連接仍然從外部傳入。所有新增的JavaBean都只針對(duì)本表操作,不操作其他JavaBean,SQL語(yǔ)句里面也不會(huì)有多表聯(lián)合操作,具體邏輯由上層程序去實(shí)現(xiàn)。原因:這樣做是為了簡(jiǎn)化JavaBean的編寫,把邏輯從持久層抽取出來(lái),由上層程序去實(shí)現(xiàn)。</p><p> 所有新增的JavaBean都不管理事務(wù)</p><p&g
80、t; 不容許在JavaBean的方法里出現(xiàn)commit和rollback。原因:如果在持久層管理事務(wù)的話會(huì)對(duì)程序邏輯造成混亂,特別是多表聯(lián)合操作的時(shí)候,并且使程序?qū)哟尾磺逦?,CRM原有的邏輯層次確實(shí)不夠清晰,但我們至少保證新增的程序邏輯層次清晰。</p><p><b> 數(shù)據(jù)庫(kù)連接池</b></p><p> Bosent CRM系統(tǒng)中會(huì)啟動(dòng)多個(gè)線程,包括:
81、日志線程、后臺(tái)管理線程、主線程等。每個(gè)線程都要使用單獨(dú)的數(shù)據(jù)庫(kù)連接對(duì)象。為了讓多個(gè)線程高效使用數(shù)據(jù)庫(kù)連接,所以設(shè)計(jì)了復(fù)雜的數(shù)據(jù)庫(kù)連接緩存機(jī)制(即數(shù)據(jù)庫(kù)連接池)。</p><p><b> 數(shù)據(jù)庫(kù)連接管理類</b></p><p> 連接類(ConnectionElement類)</p><p> ConnectionElement類只是輔
82、助類,包含完整的建立新的數(shù)據(jù)庫(kù)連接對(duì)象所需的所有參數(shù),以及兩個(gè)輔助ConnectionPool類管理的兩個(gè)屬性:</p><p> activeDate屬性:表示激活(包括創(chuàng)建和再次使用)的時(shí)間</p><p> allowCloseOnIdle:當(dāng)連接空閑時(shí),是否允許刪除,一般設(shè)置為true</p><p> 數(shù)據(jù)庫(kù)連接池類(ConnectionPool類)
83、</p><p> ConnectionPool類本身是個(gè)“假連接池”,其本質(zhì)只是使用HashMap結(jié)構(gòu)實(shí)現(xiàn)的數(shù)據(jù)庫(kù)連接對(duì)象緩存,其中存放的都是數(shù)據(jù)庫(kù)連接類Connection對(duì)象,而不是真正的應(yīng)用程序服務(wù)器數(shù)據(jù)庫(kù)連接池資源(例如WebSphere Server中定義的數(shù)據(jù)庫(kù)源)。</p><p> ConnectionPool對(duì)象不是在session中創(chuàng)建的,不是為每一個(gè)用戶都創(chuàng)建一
84、個(gè)。</p><p> ConnectionPool類用定時(shí)器管理這兩個(gè)數(shù)據(jù)庫(kù)連接池:定時(shí)器會(huì)定時(shí)(設(shè)置為5秒)檢查和關(guān)閉空閑JDBC數(shù)據(jù)庫(kù)連接的定時(shí)器。此定時(shí)器在創(chuàng)建ConnectionPool對(duì)象5秒后開始啟動(dòng)此定時(shí)器。 每5秒鐘開始循環(huán)檢測(cè)。定時(shí)器的循環(huán)時(shí)間在程序中寫死了,如果要加快速度,必須修改代碼。檢測(cè)ConnectionPool主要包括兩個(gè)任務(wù):</p><p> 1)刪
85、除空閑隊(duì)列中的JDBC數(shù)據(jù)庫(kù)連接,管理空閑JDBC連接緩存。</p><p> 2)刪除使用隊(duì)列中死鎖的JDBC數(shù)據(jù)庫(kù)連接,管理正在使用的JDBC連接緩存。</p><p><b> 配置連接池參數(shù)</b></p><p> 本框架的優(yōu)點(diǎn)就在與大部分參數(shù)是可配置的,其中數(shù)據(jù)庫(kù)連接池參數(shù)也是可以配置的,當(dāng)然在程序中提供了默認(rèn)的配置。即安裝
86、路徑下的build.properties文件,其參數(shù)含義如下所述:</p><p><b> 連接池的問題</b></p><p> 連接池類本身是個(gè)假連接池,只是使用HashMap結(jié)構(gòu)實(shí)現(xiàn)的數(shù)據(jù)庫(kù)連接對(duì)象緩存,其中存放的都是數(shù)據(jù)庫(kù)連接類Connection對(duì)象,而不是真正的應(yīng)用程序服務(wù)器數(shù)據(jù)庫(kù)連接池資源。而且,當(dāng)系統(tǒng)中數(shù)據(jù)庫(kù)連接對(duì)象超過(guò)設(shè)定值后,將不再創(chuàng)建新的連
87、接對(duì)象,而是拋出異常、或者處于等待狀態(tài)。因此,當(dāng)應(yīng)用程序沒有及時(shí)用free方法從HashMap中釋放資源、或者系統(tǒng)客戶端很多,導(dǎo)致數(shù)據(jù)庫(kù)連接超出設(shè)定值時(shí),系統(tǒng)性能急劇下降,或者有的功能無(wú)法正常使用。</p><p> 因此,建議不要讓CRM系統(tǒng)框架管理應(yīng)用系統(tǒng)的數(shù)據(jù)庫(kù)連接,而是讓應(yīng)用程序服務(wù)器(例如Netweaver)來(lái)管理;不再使用ConnectionPool類,而是使用應(yīng)用程序服務(wù)器(例如Netweaver
88、)本身提供的數(shù)據(jù)庫(kù)連接池獲取數(shù)據(jù)庫(kù)連接對(duì)象。</p><p><b> 視圖</b></p><p><b> 視圖概述</b></p><p> 視圖是用戶看到并與之交互的界面。對(duì)老式的Web應(yīng)用程序來(lái)說(shuō),視圖就是由HTML元素組成的界面,在新式的Web應(yīng)用程序中,HTML依舊在視圖中扮演著重要的角色,但一些新的技
89、術(shù)已層出不窮,它們包括Adobe Flash和象XHTML,XML/XSL,WML等一些標(biāo)識(shí)語(yǔ)言和Web services. </p><p> 如何處理應(yīng)用程序的界面變得越來(lái)越有挑戰(zhàn)性。MVC一個(gè)大的好處是它能為你的應(yīng)用程序處理很多不同的視圖。在視圖中其實(shí)沒有真正的處理發(fā)生,不管這些數(shù)據(jù)是聯(lián)機(jī)存儲(chǔ)的還是一個(gè)雇員列表,作為視圖來(lái)講,它只是作為一種輸出數(shù)據(jù)并允許用戶操縱的方式。</p><p&
90、gt;<b> 視圖框架模型</b></p><p> 在Bosent Crm框架中支持三種Action和JSP的設(shè)計(jì)模式:</p><p> 模式1:各自獨(dú)立的Action和JSP</p><p> 模式2:復(fù)用JSP代碼,包括Form數(shù)據(jù)和JSP頁(yè)面</p><p> 模式3:復(fù)用Action</p&
91、gt;<p> 模式1:各自獨(dú)立的Action和JSP</p><p><b> 模式如下圖所示:</b></p><p> 一個(gè)Action對(duì)應(yīng)一個(gè)JSP頁(yè)面,即Action返回后僅僅轉(zhuǎn)向一個(gè)JSP。</p><p> 模式2:復(fù)用JSP代碼,包括Form數(shù)據(jù)和JSP頁(yè)面</p><p><
92、b> 模式如下圖所示:</b></p><p> 一個(gè)JSP頁(yè)面能響應(yīng)多個(gè)Action。模式2增強(qiáng)了模型1的可重復(fù)利用能力。</p><p> 模式3:復(fù)用Action</p><p> 一個(gè)Action能返回多個(gè)值,以對(duì)應(yīng)多個(gè)JSP頁(yè)面。而在這個(gè)Action中其實(shí)實(shí)現(xiàn)了多個(gè)Action功能。這種方法充分?jǐn)U展了Action的功能。也是Bos
93、ent Crm平臺(tái)中最常使用的方式。</p><p><b> JSP模板</b></p><p> JSP模板文件提供一種標(biāo)準(zhǔn)的統(tǒng)一的頁(yè)面展示風(fēng)格,除了顯示的內(nèi)容不同外,頁(yè)面的整體框架都一致。使用JSP模板,大大減輕了頁(yè)面的編程工作,而一般web系統(tǒng)中,頁(yè)面的編程工作量占到全部工作量的70%。</p><p> 所有模板文件存放在\We
94、bContent\templates路徑下。</p><p> 基于布局的JSP頁(yè)面,頁(yè)面由下面幾個(gè)部分組成,Templates目錄下的JSP頁(yè)面:</p><p> template1bosent.jsp(標(biāo)準(zhǔn)layout布局)</p><p> template1nav.jsp(導(dǎo)航布局頁(yè)面)</p><p> 多數(shù)請(qǐng)求由導(dǎo)航布局
95、頁(yè)返回,對(duì)應(yīng)cfs-config.xml配置文件中forward配置項(xiàng)的layout="nav",例如:</p><p> <forward name="OK" resource="/accounts/accounts_orders_add.jsp" layout="nav"/> </p><
96、p><b> 菜單</b></p><p><b> 菜單類型</b></p><p> 在Bosent Crm系統(tǒng)中,菜單主要包括下面三種類型:</p><p> 顯示主模塊的頂層菜單(Top-level menu displaying modules)</p><p> 顯示每個(gè)
97、具體模塊的子菜單(Sub-menus for each module)</p><p> 標(biāo)簽樣式菜單(Tab-style container menus)</p><p> 而在平臺(tái)初始化過(guò)程中一共生成三種類型的菜單數(shù)據(jù):</p><p> 標(biāo)簽樣式(a tabbed version)</p><p> 圖形樣式(a graphic
98、 version)</p><p> 文本樣式(a text version)</p><p> 這些菜單數(shù)據(jù)存放在Request中,包括:</p><p><b> 菜單生成過(guò)程</b></p><p> 在ControllerServlet的初始化函數(shù)中,載入所有的菜單數(shù)據(jù)。</p><p
99、> ControllerServlet類從cfs-modules.xml配置文件獲得所有菜單的數(shù)據(jù),存放在主菜單鉤子類MainMenuHook的菜單屬性(類型是MainMenuItem)中。</p><p> 在ControllerServlet的forward函數(shù)中,根據(jù)用戶權(quán)限生成菜單 </p><p> 在ControllerServlet的service函數(shù)中,如果ac
100、tion對(duì)應(yīng)的forward中的“l(fā)ayout”屬性定義為“nav”,則調(diào)用MainMenuHook類的generateMenu方法,根據(jù)用戶權(quán)限生成HTML格式的主菜單和子菜單 </p><p> 和菜單相關(guān)的配置文件</p><p> 菜單配置文件(cfs-modules.xml)</p><p> 此配置文件用于確定主菜單和子菜單的顯示順序,以及每個(gè)菜單
101、項(xiàng)的權(quán)限信息。Action以URL的形式映射到菜單項(xiàng)。其他參數(shù)用來(lái)定義顯示在菜單項(xiàng)上的文字、定義權(quán)限標(biāo)識(shí)以及顯示在HTML頁(yè)面的標(biāo)題。</p><p> 例如下面的配置信息:</p><p> 系統(tǒng)配置文件(即build.properties)</p><p> 在安裝路徑下有系統(tǒng)配置文件(即build.properties),其中的“SYSTEM.LANGU
102、AGE”屬性應(yīng)該設(shè)置為“zh_CN”,即:SYSTEM.LANGUAGE=zh_CN,這樣設(shè)置菜單才能顯示為中文。即在SystemStatus對(duì)象中屬性Language才會(huì)設(shè)置為“zh_CN”。</p><p> 資源文件(dictionary_zh_CN.xml)</p><p> 存放系統(tǒng)共用的數(shù)據(jù)字典數(shù)據(jù)。</p><p> 語(yǔ)言資源文件位于web應(yīng)用的
103、\WEB-INF\languages目錄中,不同語(yǔ)種資源文件是一個(gè)由dictionary 加上語(yǔ)言代碼組成.xml文件,例如:dictionary_zh_CN.xm。</p><p> system.xml</p><p> 在安裝過(guò)程中,system.xml文件被復(fù)制到安裝路徑下的數(shù)據(jù)庫(kù)名稱文件夾中,即fileLibrary/[database name]/system.xml。&l
104、t;/p><p> 此文件包含安裝時(shí)的配置數(shù)據(jù),標(biāo)簽庫(kù)和模塊能訪問這些數(shù)據(jù)。例如開發(fā)一個(gè)action能訪問第三方的數(shù)據(jù)庫(kù),那么可以把數(shù)據(jù)庫(kù)連接信息存放在此文件中,而不用在action類中寫死。此文件一般內(nèi)容如下所示:</p><p><b> 其中:</b></p><p> system.fields.ignore:用于定義可以動(dòng)態(tài)忽略的J
105、SP模塊;</p><p> system.fields.label:用于定義JSP頁(yè)面中使用的可重命名的字符串標(biāo)識(shí)。</p><p><b> 菜單兩種配置</b></p><p> 在實(shí)際使用中,需要特別注意:system.xml和資源文件(dictionary_zh_CN.xml)可能同時(shí)對(duì)同一個(gè)數(shù)據(jù)字典進(jìn)行了定義,例如system
106、.modules.label和system.container.menu.label在這兩個(gè)文件中都定義了相同的數(shù)據(jù)字典:</p><p> system.xml中定義了“system.modules.label”, 在資源文件dictionary_zh_CN.xml中同樣也定義有system.modules.label, 而system.xml和資源文件都同時(shí)存放在SystemStatus類中,只不過(guò)存放在
107、不同的對(duì)象中:system.xml存放在preferences對(duì)象中,資源文件存放在ApplicationPrefs對(duì)象的dictionaries對(duì)象中。</p><p> 因此SystemStatus類規(guī)定了優(yōu)先級(jí),system.xml的優(yōu)先級(jí)大于資源文件。 如果要覆蓋資源文件中某菜單的標(biāo)識(shí),可以在system.xml中覆蓋此標(biāo)識(shí)。但是此功能必須謹(jǐn)慎使用。在有的項(xiàng)目組中,出現(xiàn)的菜單中英文混雜問題,可能就是因?yàn)?/p>
108、這個(gè)原因造成的。</p><p><b> 標(biāo)簽庫(kù)</b></p><p> Bosent Crm平臺(tái)使用標(biāo)簽庫(kù)在頁(yè)面上按規(guī)則顯現(xiàn)信息。</p><p> Bosent Crm平臺(tái)使用的標(biāo)簽庫(kù)有:JSTL、dhv-taglib、zeroio-taglib。</p><p> 標(biāo)簽是SUN JSP的標(biāo)準(zhǔn)實(shí)現(xiàn),這里不
109、做介紹。</p><p><b> 本章小結(jié)</b></p><p> 在本章中,詳細(xì)闡述了Bosent Crm框架實(shí)現(xiàn)MVC設(shè)計(jì)模式的原理,包括模型、視圖、控制器編程規(guī)范實(shí)現(xiàn)原理等。</p><p> Bosent Crm平臺(tái)的功能改進(jìn)</p><p> 在研究Bosent CRM 框架的基礎(chǔ)上,我對(duì)公司所使用
110、的CRM系統(tǒng)進(jìn)行了相關(guān)的改進(jìn)。</p><p><b> 權(quán)限體系改造</b></p><p><b> 功能需求</b></p><p> 現(xiàn)有系統(tǒng)中一個(gè)用戶只有一個(gè)角色,要求改造為一個(gè)用戶能擁有多個(gè)角色。</p><p><b> 改造基本思路</b></p&
111、gt;<p> 首先,改造基本的業(yè)務(wù)邏輯,將用戶和角色之間一對(duì)一的關(guān)系修改為一對(duì)多;修改完后需要檢驗(yàn)一下是否能兼容處理一對(duì)一的關(guān)系;</p><p> 然后,修改頁(yè)面,能通過(guò)頁(yè)面配置用戶和角色之間一對(duì)多的關(guān)系;</p><p> 最后,測(cè)試系統(tǒng)和權(quán)限相關(guān)的模塊,檢查是否有遺留的地方。</p><p><b> 修改過(guò)程</b&g
112、t;</p><p><b> 創(chuàng)建用戶-角色表</b></p><p> 創(chuàng)建用戶-角色表,把用戶和角色一對(duì)一的關(guān)系轉(zhuǎn)換為一對(duì)多的關(guān)系,但是同時(shí)又要保證一對(duì)一的關(guān)系不變。</p><p> CREATE TABLE user_role (</p><p> user_id INTEGER NOT NULL
113、,</p><p> role_id INTEGER NOT NULL</p><p><b> );</b></p><p> 改造之后的表結(jié)構(gòu)之間的關(guān)系如下圖所示:</p><p><b> 修改業(yè)務(wù)邏輯 </b></p><p> CRM權(quán)限體系主要包括
114、和權(quán)限相關(guān)的業(yè)務(wù)邏輯和頁(yè)面。 </p><p> 角色類:org.aspcfs.modules.admin.base.Role:修改計(jì)算屬于某角色的用戶數(shù)函數(shù)buildUserCount。</p><p> 修改角色集合類:org.aspcfs.modules.admin.base.RoleList</p><p> 修改用戶類:org.aspcfs.modu
115、les.admin.base.User類 </p><p> 用戶集合類:org.aspcfs.modules.admin.base.UserList 類</p><p> 修改用戶權(quán)限列表類org.aspcfs.modules.admin.base.UserPermissionList </p><p> 修改SystemStatus全局?jǐn)?shù)據(jù)類</p&
116、gt;<p> 即org.aspcfs.controller.SystemStatus類。修改權(quán)限校驗(yàn)函數(shù)boolean hasPermission(int userId, String thisPermission)。這個(gè)函數(shù)很重要,是權(quán)限認(rèn)證最核心的函數(shù)。</p><p><b> 修改用戶管理</b></p><p> 用戶列表,用戶的角色需
117、要能顯示多個(gè)。</p><p> 用戶詳細(xì)信息,角色需要能顯示多個(gè)。</p><p><b> 表單重復(fù)提交問題</b></p><p><b> 問題描述</b></p><p> Bonsent CRM平臺(tái)存在刷新引起的表單重復(fù)提交問題,即當(dāng)用戶提交完表單,進(jìn)行頁(yè)面刷新操作,表單會(huì)重復(fù)
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計(jì)(論文)基于mvc模式的web開發(fā)框架研究
- [優(yōu)秀畢業(yè)設(shè)計(jì)精品] 基于mvc模式的人力資源管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于MVC設(shè)計(jì)模式的Struts的研究與改進(jìn).pdf
- 基于MVC設(shè)計(jì)模式的系統(tǒng)框架研究與設(shè)計(jì).pdf
- 基于MVC模式的STRUTS框架的研究與設(shè)計(jì).pdf
- 畢業(yè)設(shè)計(jì)題目基于mvc框架的web開發(fā)技術(shù)
- 基于MVC設(shè)計(jì)模式的Struts框架的研究與應(yīng)用.pdf
- 基于MVC模式的框架設(shè)計(jì)與實(shí)例開發(fā).pdf
- 基于MVC模式的Struts框架的研究與實(shí)現(xiàn).pdf
- 基于MVC模式的Spring框架的應(yīng)用與研究.pdf
- 基于MVC模式的JavaWeb框架研究與應(yīng)用.pdf
- 基于MVC設(shè)計(jì)模式的Struts框架設(shè)計(jì)與應(yīng)用.pdf
- 基于MVC模式Web應(yīng)用框架的研究與應(yīng)用.pdf
- 基于MVC模式的AOP安全框架的研究與實(shí)現(xiàn).pdf
- 基于MVC模式的Web應(yīng)用框架的研究與開發(fā).pdf
- 基于MVC設(shè)計(jì)模式的WEB開發(fā)框架的研究及應(yīng)用.pdf
- 基于MVC模式輕量級(jí)框架SSH的研究與應(yīng)用.pdf
- 基于MVC模式的CORBA-Web框架的研究與應(yīng)用.pdf
- MVC設(shè)計(jì)模式下SSH組合框架的研究與設(shè)計(jì).pdf
- 軟件工程畢業(yè)設(shè)計(jì)--基于mvc設(shè)計(jì)模式的加班管理系統(tǒng)
評(píng)論
0/150
提交評(píng)論