前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇spring框架范文,相信會為您的寫作帶來幫助,發(fā)現(xiàn)更多的寫作思路和靈感。
關鍵詞 spring; J2EE; 控制反轉(zhuǎn); 事務處理
引 言
在軟件開發(fā)中出現(xiàn)過各種各樣的框架,開源軟件的興起,使得各種各樣的框架紛紛出現(xiàn),例如,Apache組織下就擁有諸多的框架類產(chǎn)品。框架就是一組協(xié)同工作的類,它們?yōu)樘囟愋偷能浖?gòu)筑了一個可重用的設計。然而,傳統(tǒng)的框架使得應用程序組件過分依賴于框架中的類,這種耦合度的提高降低了組件的復用性。Spring框架的出現(xiàn),使得組件之間更松散的耦合成為了可能。
Spring框架簡介
Spring框架是一個2003年2月才出現(xiàn)的開源項目,該開源項目起源自Rod Johnson在2002年末出版的《Expert One-on-One J2EE Design and Development》一書中的基礎性代碼。在該書中,Rod Johnson倡導J2EE實用主義的設計思想,而Spring框架正是這一思想的更全面和具體的實現(xiàn)。Spring框架由一個容器,一個配置和組織組件的框架,和一組內(nèi)置的為事務、持久化和Web用戶接口提供的服務組成。作為一種輕量級的J2EE框架,Spring提供了一種有效的方式來建立和組織J2EE應用程序。
1、Spring特性
IoC(Inversion of Control;控制反轉(zhuǎn));又稱DI(Dependency Injection;依賴注入);是面向?qū)ο箢I域新興的編程思想;也是Spring的精髓所在。簡單地說;IoC就是指程序之間的關系由容器來控制;而不是傳統(tǒng)實現(xiàn)中由程序代碼直接操控。這也就是所謂“控制反轉(zhuǎn)”的概念所在:控制權(quán)由應用代碼轉(zhuǎn)到外部容器,控制權(quán)的轉(zhuǎn)移,也就是所謂的反轉(zhuǎn)。IoC將控制創(chuàng)建的職責搬進了框架中;并把它從應用代碼脫離開來。當使用Spring的IoC容器時只需指出組件需要的對象,在運行時Spring的IoC容器會根據(jù)XML配置數(shù)據(jù)提供給它。
Spring IoC,借助于依賴注入設計模式,使得開發(fā)者不用理會對象自身的生命周期極其關系,而且能夠改善開發(fā)者對模式的使用。對于一個對象的管理不是什么困難,難就難在對整個對象群的管理。依賴注入可以讓容器管理對象,即“Don’t call me, I will call you”。這樣對象本身的生命周期以及對象之間的關系就不再讓開發(fā)者費神了。
Spring AOP,借助于Spring實現(xiàn)攔截器,開發(fā)者能夠?qū)崿F(xiàn)以聲名方式使用企業(yè)級服務,比如安全、事務服務。AOP 合理的補充了OOP,借助于Spring AOP,開發(fā)者能夠高效的使用J2EE服務。
Spring服務抽象,借助于各種J2EE API抽象,使得開發(fā)者能夠一致地使用J2EE 技術(shù),而不管具體是使用什么J2EE API,借助于Spring服務抽象,使代碼大大減少,滿足“更少代碼,更少BUG”的軟件設計原則。
Spring IoC+Spring AOP+Spring服務抽象,一起形成Spring,這樣一個有機體,使構(gòu)建輕量級J2EE成為可能。
Spring提供的事務管理
Spring提供的事務管理可以分為兩類:編程式的和聲明式的。編程式的,比較靈活,但是代碼量大,存在重復的代碼比較多;聲明式的比編程式的更靈活方便。
1、傳統(tǒng)使用JDBC的事務管理
以往使用JDBC進行數(shù)據(jù)操作,使用DataSource,從數(shù)據(jù)源中得到Connection,我們知道數(shù)據(jù)源是線程安全的,而連接不是線程安全的,所以對每個請求都是從數(shù)據(jù)源中重新取出一個連接。一般的數(shù)據(jù)源由容器進行管理,包括連接池。例如TOMCAT,WEBSPHERE,WEBLOGIC等這些J2EE商業(yè)容器都提供了這個功能。
以往的我們使用JDBC在寫代碼時,事務管理可能會是這樣:
Connection conn = null;
try{
conn = DBConnectionFactory.getConnection;
conn.setAutoCommit(false);
//do something
conn.commit(); //commit transcation
}catch(Exception e){
conn.rollback();
}
finally{
try{
conn.close();
} catch(SQLException se){ //do sth.}
//close ResultSet,PreparedStatement,Connection
//notice:Maybe ocurr Exception when u close rs,pstmt,conn
}
按照以往的思路來寫代碼,代碼量比較長,而且容易疏忽,忘掉一些try/catch,引發(fā)一些異常無法catch,雖然有時候我們會寫DBTool類,來關閉這些資源,并且保證在關閉這些資源時,不向外拋異常,但是這樣做會導致額外的麻煩。
2、Spring提供的編程式的事務處理
Spring提供了幾個關于事務處理的類:TransactionDefinition //事務屬性定義
TranscationStatus //代表了當前的事務,可以提交,回滾。
PlatformTransactionManager這個是spring提供的用于管理事務的基礎接口,其下有一個實現(xiàn)的抽象類AbstractPlatformTransactionManager,我們使用的事務管理類例如DataSourceTransactionManager等都是這個類的子類。
我們使用編程式的事務管理流程可能如下:
(1) 聲明數(shù)據(jù)源。
(2) 聲明一個事務管理類,例如:DataSourceTransactionManager,HibernateTransactionManger,JTATransactionManager等
(3) 在我們的代碼中加入事務處理代碼:
TransactionDefinition td = new TransactionDefinition();
TransactionStatus ts = transactionManager.getTransaction(td);
try{
//do sth
transactionManager.commit(ts);
}catch(Exception e){transactionManager.rollback(ts);}
使用Spring提供的事務模板TransactionTemplate:
void add()
{
transactionTemplate.execute( new TransactionCallback(){
pulic Object doInTransaction(TransactionStatus ts)
{ //do sth}
}
}
TransactionTemplate也是為我們省去了部分事務提交、回滾代碼;定義事務模板時,需注入事務管理對象。
3、Spring聲明式事務處理
Spring聲明式事務處理也主要使用了IoC,AOP思想,提供了TransactionInterceptor攔截器和常用的類TransactionProxyFactoryBean,可以直接對組件進行事務。
使用TransactionInterceptor的步驟:
(1)定義數(shù)據(jù)源,事務管理類
(2)定義事務攔截器,例如:
<bean id = "transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="transactionAttributeSource">
<value>
com.test.UserManager.*r=PROPAGATION_REQUIRED
</value>
</property>
</bean>
(3)為組件聲明一個類:ProxyFactoryBean
<bean id="userManager" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces"><value>com.test.UserManager</value></property>
<property name="interceptorNames">
<list>
<idref local="transactionInterceptor"/>
</list>
</property>
</bean>
使用TransactionProxyFactoryBean:
<bean id="userManager"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="target"><ref local="userManagerTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
TransactionProxyFactoryBean只是為組件的事務,如果我們要給組件添加一些業(yè)務方面的驗證等,可以使用TransactionTemplate加攔截器方式,為組件添加多個攔截器,spring AOP中提供了三類Advice,即前增強,后增強,拋出異常時的增強,可以靈活使用。
關鍵詞:Spring MVC框架;Web登錄系統(tǒng);B/S架構(gòu);session對象
1 概述
隨著世界經(jīng)濟的繁榮和科技的迅猛發(fā)展,信息化的程度越來越高,各種軟件相繼出現(xiàn)。大批量種類繁多的軟件雖然提高了信息處理的效率,但是安全方面的隱患也日益突出。用戶想要進入到不同的應用軟件和服務系統(tǒng)時都必須進行登錄認證,隨之而來的遺忘密碼、黑客攻擊、密碼泄露等問題,都將嚴重干擾到業(yè)務運作。在這種情況下,一種安全可靠的用戶登錄模塊就顯得必不可少。
基于這種情況,該文研究了如何利用Spring MVC框架開發(fā)一款安全、靈活的Web登錄模塊。系統(tǒng)的任何用戶操作界面都可以提供登錄入口,提示用戶進行登錄,通過認證后,合法用戶就可以使用他相應的權(quán)限功能。
2 Spring MVC框架概述
Spring是分層的Java SE/EE應用一站式的輕量級開源框架,是為了解決企業(yè)應用程序開發(fā)復雜性而創(chuàng)建的。Spring框架提供了構(gòu)建Web應用程序的全功能 MVC 模塊。在Spring的MVC中,支持各種視圖技術(shù),例如JSP、Velocity、Tiles等。Spring MVC分離了控制器、模型對象、分派器以及處理程序?qū)ο蟮慕巧?,這種分離讓它們更容易進行定制。
Spring MVC的角色劃分非常清晰,各組件的功能單一,很好地達到了高內(nèi)聚低耦合的效果。Spring MVC相當靈活,且可以擴展,其MVC框架是圍繞 DispatcherServlet這個核心展開的。核心控制器的作用就是截獲請求,并將其分發(fā)到相應的業(yè)務控制器中,由業(yè)務控制器調(diào)用業(yè)務處理方法處理業(yè)務邏輯,返回一個模型和視圖對象,核心控制器再根據(jù)此對象找到視圖顯示出處理結(jié)果。
3 登錄模塊的設計與實現(xiàn)
本登錄模塊采用B/S的三層結(jié)構(gòu)模式,分為服務器、用戶和數(shù)據(jù)庫三個部分。客戶端與服務器之間采用HTTP協(xié)議進行通信,Web服務器采用Tomcat6.0,數(shù)據(jù)庫服務器采用Oracle10.0.2。在用戶登錄模塊的開發(fā)過程中,提供對身份認證、權(quán)限分配等有效的安全策略,來實現(xiàn)用戶的驗證與登錄,在沒有得到系統(tǒng)授權(quán)的前提下是無權(quán)對文檔進行瀏覽和管理的。
3.1 總體設計
用戶登錄模塊按照不同的人員職責,提供不同的登錄界面,具體包括系統(tǒng)管理員、管理員、游客等登錄界面。有游客,管理員,身份證,電話號碼+密碼等多種登錄方式。
登錄模塊采用基于角色的身份認證技術(shù),根據(jù)不同的用戶角色,提供不同的登錄選項,分配不同的使用權(quán)限。根據(jù)實際情況定義了三種角色:超級管理員、管理員、注冊用戶,通過登錄界面確認用戶的身份,再根據(jù)不同的用戶類型確定其相應的操作權(quán)限。
其中,超級管理員具有對角色、權(quán)限、菜單等進行增刪改查操作以及角色的賦權(quán)。管理員具有對用戶賬號管理,信息的修改、統(tǒng)計等處理權(quán)限。注冊用戶具有修改個人資料,信息瀏覽等權(quán)限。
3.2 數(shù)據(jù)庫配置
public UserInfo getUserByUserName(String userName){
UserInfo userInfo=null;
try{
userInfo=(UserInfo)
getSqlMapClientTemplate().queryForObject("USERINFO.getUserByUserName", userName);
}catch(Exception e){
logger.error(e);}
return userInfo;}
3.3登錄模塊的實現(xiàn)
本模塊登錄時沒有區(qū)分用戶角色,當進入系統(tǒng)后根據(jù)角色權(quán)限加載菜單項。用戶通過輸入用戶名和密碼,然后單擊登陸按鈕實現(xiàn)以上信息的提交并驗證,若正確無誤進入系統(tǒng)。
3.3.1錯誤鎖定
登陸模塊根據(jù)用戶身份進入系統(tǒng),顯示擁有權(quán)限的操作菜單。如果用戶不存在,則找不到數(shù)據(jù);如果用戶存在,密碼錯誤,同樣找不到數(shù)據(jù),均提示用戶名密碼錯誤;如果用戶名和密碼同時存在,則獲取用戶信息,并進入相應的界面。為系統(tǒng)安全考慮,若用戶連續(xù)而且超過三次輸入密碼錯誤,則需要輸入驗證碼。errorTime為輸入錯誤次數(shù),當驗證碼輸入為空,或輸入錯誤,就返回-1,此時對該賬號鎖定, 登錄失敗,必須經(jīng)過超級管理員解鎖才能重新使用。部分代碼分析如下:
if(errorTime>=3){
if(entryVlidateCode==null||(!entryVlidateCode.equals(realValidateCode))){
map.put("errorMsg","驗證碼錯誤");
map.put("userInfo",null);
map.put("errorCode",-1);
return map;
}}
3.3.2在線提示
用戶在登錄時,會創(chuàng)建一個session,用于保存用戶信息。如果在線用戶列表中查找到該用戶已經(jīng)在線,同時又在其他機器登錄,那么首先提示用戶已經(jīng)在線,然后給出選擇擠下或者取消登錄。如果擠下,那么被擠機器就無法繼續(xù)前后臺的數(shù)據(jù)交互,自動退出,登錄失敗。也就是限制用戶重復登錄,每個時刻只允許在一臺機器上登錄。
先從ServletContext中取出存放用戶登錄的session相關信息,檢查這個列表,若已經(jīng)存在相同的登錄信息,則說明用戶之前已經(jīng)登錄過,移除前面一條記錄。再把此次登錄的信息加入到ServletContext中。監(jiān)聽實現(xiàn)SessionListener類,當session失效的時候,從ServletContext中移除相應記錄。過濾所有頁面,sesison失效后轉(zhuǎn)向登錄頁面。但是要實現(xiàn)用戶二次登錄后強制先前的登錄失效,需要在這里控制。登錄時存入的是session值和session ID,用戶二次登錄時移除了前次記錄,存入的session值是相同的,但是ID卻不同。 當?shù)谝淮蔚卿涰撁嬲埱蟮臅r候,在這里檢查ServletContext中是否存在當前的session值與ID,如果沒有就銷毀這個session。
3.3.3非法退出
對于WEB系統(tǒng)來說,均遵循HTTP協(xié)議的請求/應答模型。所以網(wǎng)站本身是不能保存數(shù)據(jù)的,用戶正確登錄后,系統(tǒng)更改當前用戶的狀態(tài)為在線。如果用戶在使用系統(tǒng)時,不通過退出按鈕來執(zhí)行退出操作,而是非法退出,包括網(wǎng)絡斷線、系統(tǒng)癱瘓、突然斷電等情況。這些都使系統(tǒng)沒有給用戶記錄一個退出系統(tǒng)的操作機會,這種情況下用戶的在線狀態(tài)會一直保留,從而影響下次登錄。因此,系統(tǒng)應該設置一個定時器,定時清理并且還原用戶的初始狀態(tài)。
當用戶以登陸身份請求服務器資源時,記錄用戶的最后活躍時間。接著擬定一個失效時間,假設某個用戶的最后活躍時間和當前時間的差值大于這個失效時間,也就是說該用戶這一段時間都沒有和服務器交互了,那么就認為該用戶已下線,否則認為他是在線的。
3.3.4超時管理
Session對象是由服務器自動創(chuàng)建的與用戶請求相關的對象。服務器為每個用戶都生成一個session對象,用于保存該用戶的信息,跟蹤用戶的操作狀態(tài)。應用session對象時要注意它的生命周期,當用戶首次訪問時將產(chǎn)生一個新的會話,從用戶打開網(wǎng)站生成,關閉瀏覽器刪除,以后服務器就會記住這個會話狀態(tài),在這一段時間內(nèi),用戶都可以訪問到會話對象中保存的信息。當會話生命周期超時,或者服務器端強制使會話失效時,這個session就不能使用了,需要用戶重新登錄。
通過setMaxInactiveInterval()方法可以設置Session的生命周期,通過getMaxInactiveInterval()方法可獲得Session的生命周期,如果超過這個時間則失效。
4 結(jié)束語
信息的規(guī)范化、高效化管理在很大程度上體現(xiàn)了一個組織的工作效率,而登陸功能在其中起到了關鍵性作用,同時也為系統(tǒng)提供了安全性保障。該文對Web登錄模塊進行了分析,使用Spring MVC框架進行設計,提出了解決方案,實現(xiàn)了系統(tǒng)用戶的登錄、出錯處理、超時檢查等功能,使系統(tǒng)的重用性和擴展性更好,用戶界面簡潔統(tǒng)一,功能靈活,提高了系統(tǒng)的易用性、安全性及穩(wěn)定性。
參考文獻 :
[1] 劉震宇,肖武魁.基于J2EE框架與ExtJS的Web系統(tǒng)登錄設計[J].中南林業(yè)科技大學學報,2010(8).
[2] 張瑞青,李鐵柱.基于SpringMVC的用戶登錄系統(tǒng)的設計與實現(xiàn)[J].科技信息,2012(10).
關鍵詞:Struts;Spring;Hibernate;人力資源管理系統(tǒng);依賴注入
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2010)11-2637-03
Human Resource Management System Design and Implementation Based on Struts/Spring/Hibernate Integration Framework
HU Zhi-min
(Department of Information Engineering, Hunan Urban Construction College, Xiangtan 411100, China)
Abstract: Modern enterprise competition is the competition for talent, human resource management system can improve the efficiency of corporate talent management. Based on the Java EE platform, human resources management system has been designed, using Struts/Spring/Hibernate integration framework for the development of human resources management system, using the MVC pattern to the user interface and business logic completely separate, using dependency injection to improve the system components of the between independence. The use of Struts/Spring/Hibernate integration frameworks for information systems development, than the traditional multi-layer model has a higher flexibility and scalability.
Key words: struts; spring; hibernate; human resources management system; dependency injection
人力資源管理是知識經(jīng)濟時代企業(yè)管理的主要內(nèi)容,“以人為本”突出了人在企業(yè)中的作用。隨著市場競爭的日益激烈,企業(yè)競爭由外部競爭逐漸轉(zhuǎn)變?yōu)槿轿桓偁?而人才的競爭更是企業(yè)競爭的焦點。
1998年前后,我國的很多大型企業(yè)都逐步認識到引才、用才、留才的重要性,于是,很多企業(yè)都先后設立了人力資源部。國內(nèi)的一些高校也相繼開設了人力資源管理專業(yè)。發(fā)展到現(xiàn)在,人力資源主要從事員工招聘選拔、績效考核、薪酬福利管理、勞動關系協(xié)調(diào)等工作。而信息化人力資源的管理模式也由此脫穎而出。
同志指出:“人才問題是關系黨和國家事業(yè)發(fā)展的關鍵問題。”;“國以人興,政以才治,為政之道,要在得人”。新世紀、新階段實施人才興企戰(zhàn)略,使人才越來越受到重視。[1]但是傳統(tǒng)的人力資源管理方法已經(jīng)不適應于信息時代的發(fā)展要求,在傳統(tǒng)模式下,人力資源管理部門機構(gòu)比較龐大,工作任務繁重,各種工作由于使用人工來操作極易出錯。建立信息化的人力資源管理系統(tǒng)已經(jīng)成為企業(yè)人力資源管理的首要任務。
根據(jù)企業(yè)人力資源管理需求,設計了基于Java EE的人力資源管理系統(tǒng)架構(gòu),采用Struts/Spring/Hibernate集成框架為基礎進行了系統(tǒng)設計,采用MVC、依賴注入、過濾器等技術(shù)簡化了系統(tǒng)開發(fā),提高了系統(tǒng)的靈活性和可擴展性。
1 系統(tǒng)需求
為了提高企業(yè)信息化水平,促進企業(yè)管理的規(guī)范化、制度化、流程化,決定實施人力資源管理系統(tǒng)。希望通過這個系統(tǒng)的實施規(guī)范人事檔案的管理,規(guī)范薪酬體系和薪酬發(fā)放的管理,規(guī)范人事的調(diào)動管理、培訓管理和激勵管理。并對招聘工作的職位、簡歷、面試、招聘題庫、招聘考試、錄用等環(huán)節(jié)加以規(guī)范。系統(tǒng)還需提供人事檔案的導出和報表功能。
本系統(tǒng)將實現(xiàn)人力資源檔案管理、薪酬管理、調(diào)動管理、培訓管理、激勵管理和招聘管理六大功能。其中人力資源檔案管理是本系統(tǒng)的基礎數(shù)據(jù)和核心內(nèi)容。包含人力資源檔案登記、人力資源檔案登記復核、人力資源檔案查詢、人力資源檔案變更和人力資源檔案刪除四個子模塊。薪酬管理是系統(tǒng)中的一個重要部分,在系統(tǒng)管理模塊設置薪酬標準項目后,進行薪酬發(fā)放登記。員工工作機構(gòu)和職位發(fā)生變動的時候,通過調(diào)動管理執(zhí)行登記員工調(diào)動檔案,并登記其新的機構(gòu),職位和薪酬標準。通過培訓管理進行教育培訓檔案的建立,修改和維護,培訓信息等工作。激勵管理主要信息包括獲獎人員,獎懲時間、獎懲內(nèi)容、獎金類別等信息,可以對每個員工獎懲信息進行增加、刪除、編輯操作。招聘管理實現(xiàn)當某個崗位出現(xiàn)空缺的時候,或者隨著公司業(yè)務發(fā)展,需要招聘新員工的時候,通過這個模塊。后的職位可以進行修改。另外,需要提供職位查詢的功能,查詢已的職位,并對已的職位錄入應聘者信息。
2 開發(fā)平臺選擇
2.1 Struts/Spring/Hibernate集成框架
Struts/Spring/Hibernate集成框架是Struts、Spring和Hibernate三種技術(shù)的有機融合,是目前應用最廣泛的Java EE架構(gòu)。在Struts/Spring/Hibernate集成框架中,Struts的作用是提供MVC模型,將界面、業(yè)務邏輯和數(shù)據(jù)分離,并提供一個高可擴展的架構(gòu)。Spring作為依賴注入的容器,將項目中的構(gòu)建進行粘結(jié)。而Hibernate提供了一個抽象的數(shù)據(jù)服務視圖,將用戶對數(shù)據(jù)庫的訪問進行高度抽象。[2]
Struts 是目前創(chuàng)建Web 應用最常用的表現(xiàn)層MVC 框架實現(xiàn),是JakartaApache 的一個開源項目[3]。基于Model2 的Struts框架利用控制器和定制標簽庫將應用中的模型和視圖分離,達到了層間松散耦合的效果,同時提高系統(tǒng)的靈活性、重用性和維護性。作為開源項目,Struts經(jīng)受了大量實踐的檢驗,功能越來越強大,體系也日臻完善,并且對其他技術(shù)和框架顯示出良好的融合性。[4]
Spring由Rod Johnson創(chuàng)建,它是為了解決企業(yè)應用開發(fā)的復雜性而創(chuàng)建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務器端的開發(fā)。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。簡單來說,Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。
Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用。
2.2數(shù)據(jù)庫服務器(SQL Server 2005)
SQL Server 2005是微軟具有里程碑意義的企業(yè)級數(shù)據(jù)庫產(chǎn)品,它在企業(yè)級支持、商業(yè)智能應用、管理開發(fā)效率等方面有了顯著的增強,是集數(shù)據(jù)管理與商業(yè)智能分析于一體的、極具前瞻性的下一代數(shù)據(jù)管理與分析平臺。
SQL Server 2005基于SQL Server 2000的強大功能之上,提供了一個完整的數(shù)據(jù)管理和分析解決方案,它將會給不同規(guī)模的組織帶來不同的幫助。采用SQL Server 2005作為人力資源管理系統(tǒng)的數(shù)據(jù)庫,綜合考慮了系統(tǒng)規(guī)模、吞吐量、支出成本以及技術(shù)適應性等方面。
2.3應用服務器(Tomcat)
Tomcat 是一個小型的輕量級應用服務器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調(diào)試JSP 程序的首選。在人力資源管理系統(tǒng)中,采用Tomcat 5.5做為應用服務器。
3 系統(tǒng)設計
3.1 Action設計
Struts采用struts-config.xml來進行Action的配置,主頁的Action配置如圖1所示。
對應的xml編碼如下:
3.2依賴注入設計
依賴注入由Spring進行管理,所有需要被注入的Bean,都在applicationContext.xml文件中進行配置,其中datasource Bean的配置如下:
net.sourceforge.jtds.jdbc.Driver
jdbc:jtds:sqlserver://localhost:1433/HR_DB
sa
123456
3
3
2
50
600
900
100
10
3.3 過濾器的應用
在系統(tǒng)開發(fā)過程中,需要解決Struts的中文支持問題,開始使用在Action中使用程序進行編碼轉(zhuǎn)換,但是隨著Action數(shù)量的增多,這種方法不僅容易出錯,而且浪費人力。為了提高開發(fā)速度,采用了過濾器的技術(shù)對中文編碼進行支持,過濾器類由Spring直接提供,也可以由用戶自己編寫。過濾器在Web.xml文件中進行配置,配置如下:
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
GBK
forceEncoding
true
CharacterEncodingFilter
*.jsp
CharacterEncodingFilter
*.do
4 總結(jié)
在企業(yè)信息化建設的過程中,可以采用各種技術(shù)來構(gòu)建系統(tǒng),每種技術(shù)都有自己的適應范圍。企業(yè)人力資源管理系統(tǒng)必須要適應企業(yè)的管理要求,而采用Struts/Spring/Hibernate集成框架可以提供一個高可配置和可擴展的系統(tǒng),系統(tǒng)可以經(jīng)過部分修改直接適應其他企業(yè)的需求,達到了軟件重用的目的。
參考文獻:
[1] 蔡琳.以科學發(fā)展觀指導企業(yè)人力資源管理[J].經(jīng)營管理者,2009(22):322.
[2] 楊海斌.基于SSH框架的高校網(wǎng)站群內(nèi)容管理系統(tǒng)設計[J].軟件導刊,2009,8(9):118-119.
關鍵詞:Struts、Spring、整合
一、引言
Struts框架是Apache基金會Jakarta項目組的一個Open Source(開放源代碼)項目,該框架由一組相互協(xié)作的類(組件)、Servlet以及標簽庫組成,是對傳統(tǒng)MVC設計模式的一種實現(xiàn)和標準化,充分體現(xiàn)了MVC模式“分離顯示邏輯和業(yè)務邏輯”的設計思想,是目前Java Web開放中廣泛采用的技術(shù)。
Spring是由Rod Johnson創(chuàng)建的一個開源框架,目的是為了解決Java Web企業(yè)應用開發(fā)的復雜性。Spring提供了IoC(控制反轉(zhuǎn))、AOP(面向切面編程)、聲明式事務等功能,提高了Java Web應用開發(fā)的效率和質(zhì)量。更重要的是,Spring不排斥各種優(yōu)秀的開源框架,相反,Spring可以降低各種框架的使用難度,Spring提供了對各種優(yōu)秀框架(如Struts,Hibernate等)的直接支持。
雖然Spring本身可以作為一個MVC實現(xiàn),但由于Struts在MVC方面的影響力,使得開發(fā)人員者更愿意將Struts整合到Spring中,而不是使用Spring MVC代替Struts。本文總結(jié)歸納了整合Struts和Spring的三種方法,并討論了各自的優(yōu)缺點。
二、整合struts和spring
1,使用ActionSupport類
(1)原理
當客戶端發(fā)送http請求到控制器時,使用請求參數(shù)填充FormBean,并根據(jù)struts-config.xml的配置將請求轉(zhuǎn)發(fā)給對應的Action,Action通過調(diào)用父類的getWebApplicationContext()方法獲取ApplicationContext對象,在通過ApplicationContext對象從Spring容器中獲取相關的JavaBean,通過Action處理后將處理結(jié)果會發(fā)給控制器,控制其根據(jù)struts-config,xml的配置將處理結(jié)果傳回到客戶端。
(2)用法
①在struts-config xml中配置插件,代碼如下:
②創(chuàng)建A ction類,繼承自ActionSupport或DispatchActionSupport;
③在Action中通過調(diào)用getWebApplicationcontext()方法獲取ApplicationContext對象,然后調(diào)用ApplicationContext對象的getBean()方法從Spring容器中取出相應的對象。
(3)評價
這種技術(shù)很簡單并且易于理解。但是,它將Struts動作與Sp ring框架耦合在一起。如果想替換掉Spring,那么就必須重寫代碼。同時,由于Struts動作不在Spring的控制之下,所以它不能獲得SpringAOP的優(yōu)勢。當使用多重獨立的Sp ring環(huán)境時,這種技術(shù)可能有用,但是在大多數(shù)情況下,這種方法不如另外兩種方法合適。
2,使用DelegatingRequestProcessor類
(1)原理
客戶端發(fā)送http請求到控制器ActionServlet,控制器將使用請求參數(shù)填充FormBean并根據(jù)Struts-config,xml的配置將請求轉(zhuǎn)發(fā)給DelegatingResquestProcessor,DelegatingResquestProcessor根據(jù)Spring配置文件從web容器中提取ActionBean并調(diào)用相關的JavaBean,由ActionBean對請求進行處理,處理完畢后在轉(zhuǎn)發(fā)給控制器,控制器再根據(jù)struts-config.xml的配置把將處理結(jié)果發(fā)揮給客戶端。
(2)用法
①在struts-config.xml中配置插件,代碼如下:
vaIue=”classpath applIcationContext.xmI”/>
②在struts-config.xml中增加如下節(jié)點:
DelegatingRequestProcessor”/>
③創(chuàng)建Action,并在spring配置文件ApplicationContext xml中對其進行注冊。
(3)評價
這種方法使Struts動作并不知道它正被Spring管理,并且使我們能夠利用Spring的動作管理框架的所有優(yōu)點。由于Struts動作注意不到Spring的存在,所以我們不需要重寫我們的Struts代碼就可以使用其他控制反轉(zhuǎn)容器來替換掉Spring??磥磉@種方法的確比第一種方法好,但還是存在著一些問題。如果我們使用一個不同的RequestProcessor,則需要手動整合Spring的DelegatingRequestProcessor。添加的代碼會造成維護的麻煩并且將來會降低的應用程序的靈活性。
3,將StrutsAction管理委托給Spring框架
(1)原理
客戶端發(fā)送http請求到控制器ActionServlet,控制器將使用請求參數(shù)填充FormBean,并根據(jù)struts-config.xmI的配置將請求轉(zhuǎn)發(fā)給DelegatingActionProxy,DelegatingActionProxy根據(jù)請求信息從Spring容器中獲取相應的Action并由Spring為其注入相關的JavaBean,請求經(jīng)Action處理完畢后在轉(zhuǎn)發(fā)給DelegatingActionProxy,DelegatingActionProxy在轉(zhuǎn)發(fā)處理結(jié)果給控制器,控制器根據(jù)struts-config.xml的配置把將處理結(jié)果發(fā)揮給客戶端。
(2)用法
①在Struts-config.xml中配置插件,代碼如下:
value=classpath:applicationContext.xmI/>
②創(chuàng)建Action并將st ruts-config,xml中的Action節(jié)點的type更改為org.springframework.web.struts,DeIegatingActionProxy
③在Spring配置文件中注冊ActionBean。
(3)評價
動作委托方法是這3種方法中最好的。Struts動作不了解Spring,不對代碼作任何改變就可用于非Spring應用程序中。RequestProcessor的改變不會影響它,并且它可以利用SpringAOP特性的優(yōu)點。
關鍵詞:開源框架;客戶關系;整合;SSH
中圖分類號:TP315文獻標識碼:A文章編號:1009-3044(2012)03-0617-03
CRM Design and Implementation Based on Open Source Frameworks
ZHAO Yong-hui, DENG Wen-xin
(Zhejiang Guangsha College of Applied Construction Technology, Dongyang 22100, China)
Abstract: In this paper, three main open-source frameworks Struts, Spring and Hibernate based, integrated design of a common SSH open source framework and its application to customer relationship management system. Practical results show that the framework of the integrat? ed framework of their three full advantage of reducing the coupling between the layers, increase the system flexibility and scalability, with a high reference and promotion of practical value.
Key words: open-source framework; customer relationship; integration; SSH
隨著全球一體化經(jīng)濟的到來和市場競爭越來越激烈,客戶對企業(yè)要求越來越高,需求呈現(xiàn)多樣化、個性化、差異化。在當前激烈的市場競爭環(huán)境下,市場的競爭已經(jīng)從產(chǎn)品的競爭轉(zhuǎn)向了客戶資源的競爭[1]。因此,企業(yè)為了爭取最多的客戶,獲得最大利潤,就必須實施針對性的策略,進行“一對一營銷”,CRM正是達到這一目的的一個好的工具[2]。
通過實施CRM,一方面有助于規(guī)范企業(yè)管理,實現(xiàn)企業(yè)管理與業(yè)務運作的信息化和自動化。另一方面有助于整合企業(yè)的客戶資源,掌握客戶資源,制定合理的發(fā)展戰(zhàn)略和市場策略,提高企業(yè)競爭力。由此可見,通過實施CRM,既可以提高企業(yè)的工作效率和收益,同時能保持老客戶和發(fā)展新客戶,從而把握未來競爭的主動權(quán)[3]。
1系統(tǒng)框架設計
1.1 SSH的集成框架
SSH的集成框架通過整合Struts、Spring和Hiber? nate這三種框架,形成一種新的輕量型的J2EE架構(gòu),實現(xiàn)了MVC三層架構(gòu)的軟件開發(fā)模式,用這架構(gòu)可以實現(xiàn)高內(nèi)聚、低耦合、易維護的分布式應用程序。
系統(tǒng)從職責上分為3層:表示層、業(yè)務邏輯層和數(shù)據(jù)持久層[3]。其中表示層主要負責提供界面實現(xiàn)與用戶的交互,采用Struts框架,實現(xiàn)了MVC的分離。業(yè)務邏輯層它管理著具體的業(yè)務對象和業(yè)務操作,采用Spring框架,Spring有成熟的事務管理和依賴注入機制,能很好整合Struts和Hibernate。數(shù)據(jù)持久層利用Hibernate框架完成數(shù)據(jù)持久化操作。其具體的架構(gòu)圖如圖1所示。
圖1 SSH架構(gòu)圖
1.2 SSH集成框架工作流程
首先JSP頁面提交請求給Struts2的ActionServlet核心控制器,核心控制器根據(jù)配置文件Struts-config.xml找到相應的Action,然后調(diào)用業(yè)務處理需要使用的Spring的bean,Spring的bean中提供相應的Java EE服務,在bean中調(diào)用數(shù)據(jù)持久層的DAO對象進行數(shù)據(jù)庫的操作,接著把操作結(jié)果數(shù)據(jù)返回給Action,最后由Action決定數(shù)據(jù)發(fā)回給相應的JSP頁面。
2系統(tǒng)實現(xiàn)
2.1系統(tǒng)功能介紹
根據(jù)公司對客戶管理的需要,該系統(tǒng)能把客戶基本信息、聯(lián)系人相關信息、交往記錄和客戶服務記錄等信息,實現(xiàn)規(guī)范化管理并共享;能通過分析銷售機會和客戶開發(fā)過程的記錄,為開發(fā)新客戶提供幫助;系統(tǒng)能根據(jù)客戶的信息和交往記錄,在客戶將要流失前及時告知銷售人員,采取措施挽回客戶。系統(tǒng)能提供相關報表給公司領導分析了解公司客戶情況。
系統(tǒng)功能劃分成了營銷管理、客戶管理、服務管理、統(tǒng)計報表、基礎數(shù)據(jù)和權(quán)限管理等六個模塊,系統(tǒng)功能設計如圖2所示。
圖2系統(tǒng)功能設計
2.2系統(tǒng)功能實現(xiàn)
客戶關系管理系統(tǒng)以MyEclipse 7.0為開發(fā)工具,以Microsoft SQL Server 2005作為數(shù)據(jù)庫,Web服務器服務器為Tomcat6.0,采用SSH集成框架開發(fā)。由于系統(tǒng)的模塊較多,下面以一個以用戶登錄功能為例詳細說明系統(tǒng)的開發(fā)實現(xiàn)過程,并將按照持久層、邏輯層、表示層和框架整合的順序說明系統(tǒng)構(gòu)建過程。
2.2.1持久層的實現(xiàn)
1)實現(xiàn)Hibernate建模
在Eclipse中運用HibernateTools從數(shù)據(jù)庫中生成java持久化對象模型和hbm映射文件hibernate.cfg.xml,并且將它的路徑添加到應用的類路徑中完成Hibernate的配置,該配置文件由Hibernate用來連接到數(shù)據(jù)庫、生成模式和獲得其它特定數(shù)據(jù)庫信息的屬性組成[4]。
2)生成java持久化對象模型和hbm映射文件
使用Hibernate代碼生成工具把數(shù)據(jù)庫中的表映射為java類,列映射為java類的屬性。同時,生成hibernate.hbm.xml文件,該文件實現(xiàn)對象和數(shù)據(jù)庫之間的映射。
3)編寫數(shù)據(jù)訪問類通用DAO類接口:
public interface CommonDAO {
public List list(String sql);//查詢方法
}
通用實現(xiàn)類CommonDAOHibImpl繼承了HibernateDaoSupport類,實現(xiàn)了通用DAO類接口CommonDAO中的查詢方法,代碼如下:
public List list(String hql){ //查詢方法
List ret = super.getHibernateTemplate().find(hql);
return ret;
}
2.2.2邏輯層的實現(xiàn)
邏輯層主要負責具體的業(yè)務邏輯處理、執(zhí)行應用邏輯、執(zhí)行向持久層的調(diào)用、獲得從用戶接口層的請求、處理事務和處理異常 等功能。這些功能由Spring的IOC、AOP應用、面向接口編程來實現(xiàn),業(yè)務的管理采用spring配置的方式。
1)配置Spring上下文applicationContext.xml
該文件是整個框架的核心,Spring通過它實現(xiàn)程序中的依賴的關系并管理各組件,同時業(yè)務方法實現(xiàn)事務管理。在該文件中指出UserAction依賴于UserBiz,UserBiz依賴于CommonDAOHibImpl,CommonDAOHibImpl依賴于SessionFactory,SessionFactory依賴于DataSource,如圖3所示。
圖3各組件的依賴關系
2)業(yè)務邏輯代碼
編寫UserAction類和UserBiz類,2個類的實例都由Spring在運行期間“設值注入”方式動態(tài)注入。
2.2.3表現(xiàn)層的實現(xiàn)
利用Struts標簽和Html語言建立用戶登錄的JSP文件,實現(xiàn)與用戶的交互。用戶通過登錄頁面輸入登錄信息,根據(jù)Struts的相關配置把登錄請求轉(zhuǎn)到Action處理。
2.2.4三個框架的整合實現(xiàn)
1) Spring與Hibernate整合實現(xiàn)
①在web.xml中配置spring監(jiān)聽器來啟動Spring,配置contextConfigLocation參數(shù)為applicationContext.xml文件的路徑和listen? er-class類為ContextLoaderListener。監(jiān)聽器通過初始化參數(shù)contextConfigLocation找到配置文件applicationContext.xml并加載Con? textLoaderListener。
②在applicationContext.xml文件中配置數(shù)據(jù)源和SessionFactory,使用Spring提供的LocalSessionFactoryBean,傳入一個Hibernaet配置文件的配置。
2) Spring與Struts的整合實現(xiàn)
利用Struts框架開發(fā)的WEB應用程序,由控制器組件Action調(diào)用業(yè)務邏輯組件,業(yè)務邏輯組件由Spring IoC來管理,是通過Spring的DelegatingRequestProcessor截獲頁面層的請求來完成的[5]。
①在struts-config.xml配置插件
在struts-config.xml中配置Spring中的ContextLoaderPlugin類,把Spring配置文件的位置告知插件。
②修改Action Bean配置,在Struts配置文件中Action類別都配置為“org.springframework.web.struts.DelegatingRequestProcessor”,ActionServlet通過RequestProcessor來完成實際的請求轉(zhuǎn)發(fā)。
③配置Struts中的Action,把Struts配置文件中配置Actionr的name改為id屬性,name屬性的值應與struts-config.xml中配置的Action的path屬性的值相同,這樣系統(tǒng)即會自動通過Spring來管理Action[5]。
3結(jié)束語
本文通過整合Struts、Spring、Hibernate三個開源框架,形成了SSH通用框構(gòu)。實踐證明,該框構(gòu)充分發(fā)揮了Struts、Spring和Hi? bernate框架各自的優(yōu)勢,降低了各層間的耦合度,避免了許多重復性的工作,從而提高了開發(fā)的效率和系統(tǒng)的質(zhì)量。通過應用這個通用框構(gòu)開發(fā)的客戶關系管理系統(tǒng),在公司使用一年后,運行良好,公司比較滿意,為該公司的客戶管理做出了一定的貢獻。
參考文獻:
[1]陶紅玉.基于WEB的客戶關系管理系統(tǒng)的研究與實現(xiàn)[D].北京:華北電力大學,2009.
[2]楊帥.基于SSH的CRM系統(tǒng)的研究和設計[D].重慶:重慶交通大學,2009.
[3]王淵,懷自國,羅怡桂.基于Ext+Spring+Hibernate的Web系統(tǒng)開發(fā)架構(gòu)的研究與應用[J].計算機與現(xiàn)代化,2009(12):78-81.