張艷璐等
摘 要: 傳統(tǒng)模式下的高校畢業(yè)生信息管理效率低、保密性差;而基于面向?qū)ο驤ava語言與ExtJS Web開發(fā)技術(shù)的學(xué)生就業(yè)信息管理系統(tǒng),能滿足數(shù)據(jù)信息集中管理和維護(hù)、實(shí)時查詢的需求,提高管理的效率和質(zhì)量。本系統(tǒng)為B/S系統(tǒng),采用tomcat進(jìn)行部署運(yùn)行,所有的頁面統(tǒng)一為JSP,后臺使用主流的SSH框架,運(yùn)用MVC模式進(jìn)行系統(tǒng)設(shè)計。
關(guān)鍵詞: 信息管理系統(tǒng); Java; ExtJS Web; B/S系統(tǒng); SSH框架; MVC
中圖分類號:TP311.1 文獻(xiàn)標(biāo)志碼:A 文章編號:1006-8228(2014)01-38-04
0 引言
目前,將Web技術(shù)和數(shù)據(jù)庫技術(shù)相結(jié)合,開發(fā)動態(tài)交互式數(shù)據(jù)庫網(wǎng)頁,已成為當(dāng)今Web技術(shù)研究的熱點(diǎn);高校畢業(yè)生數(shù)量急劇增加,有關(guān)高校畢業(yè)生的各種信息量也成倍增長,高校畢業(yè)生信息的管理工作量與工作難度也在增長。本文提出一種基于Web的畢業(yè)生就業(yè)管理系統(tǒng)的方案,它對于學(xué)校的決策者和管理者來說都至關(guān)重要,能夠為用戶提供充足的信息和快捷的查詢手段。能有效地幫助學(xué)校和老師掌握高校畢業(yè)生的情況,為高校畢業(yè)生提供成績、就業(yè)信息等方面的查詢。
1 系統(tǒng)總體架構(gòu)
本系統(tǒng)采用主流的Java EE三層結(jié)構(gòu),分為表現(xiàn)層、業(yè)務(wù)邏輯層和數(shù)據(jù)服務(wù)層。三層體系將業(yè)務(wù)規(guī)則、數(shù)據(jù)訪問等工作放在中間層處理,客戶端不直接與數(shù)據(jù)庫交互,而是通過控制層與中間層建立連接,再由中間層與數(shù)據(jù)庫交互。系統(tǒng)的表現(xiàn)層全部使用JSP頁面來顯示,結(jié)合EL表達(dá)式以及JS技術(shù)來生成頁面顯示效果。中間層采用Struts 2+Spring 3+Hibernate 2框架,為了對控制層與業(yè)務(wù)邏輯層進(jìn)行分離,又可按以下細(xì)分。
⑴ Web層:即MVC模式里面的Controller,主要負(fù)責(zé)對控制層與業(yè)務(wù)邏輯層,調(diào)用業(yè)務(wù)邏輯層的分離,并將業(yè)務(wù)數(shù)據(jù)返回給表現(xiàn)層,本系統(tǒng)的MVC框架主要使用Struts 2。
⑵ Service層(業(yè)務(wù)邏輯層):主要負(fù)責(zé)實(shí)現(xiàn)各種業(yè)務(wù)邏輯,對DAO對象進(jìn)行封裝。
⑶ DAO層(數(shù)據(jù)訪問對象層):負(fù)責(zé)與持久化對象交互,實(shí)現(xiàn)數(shù)據(jù)的增、刪、改、查原子操作。
⑷ Domain層(持久化對象域?qū)樱簩㈥P(guān)系型數(shù)據(jù)庫的數(shù)據(jù)映射成對象,可直接通過面向?qū)ο蠓绞讲僮鲾?shù)據(jù)庫,用Hibernate的ORM框架實(shí)現(xiàn)該層。
MVC模式[1]下,所有從前臺返回的用戶請求都由Struts 2的Action負(fù)責(zé)攔截,然后通過Spring提供的IOC(控制反轉(zhuǎn))功能,定位Spring容器中的Service對象,來處理具體的用戶請求,如圖1所示。
1.1 JSP技術(shù)
JSP將網(wǎng)頁邏輯與網(wǎng)頁設(shè)計和顯示分離,支持可重用的基于組件的設(shè)計。JSP頁面由HTML代碼和嵌入其中的Java代碼所組成,服務(wù)器在頁面被客戶端請求以后對Java代碼進(jìn)行處理,然后將生成的結(jié)果同HTML代碼返回給客戶端。插入的Java程序段可以操作數(shù)據(jù)庫、重新定向網(wǎng)頁等,以實(shí)現(xiàn)建立動態(tài)網(wǎng)頁所需要的功能。
1.2 Struts 2技術(shù)
Struts 2以WebWork[2]為核心,采用攔截器的機(jī)制來處理用戶請求,且基于Model(提供內(nèi)部數(shù)據(jù))-View(顯示數(shù)據(jù))-Controller(決定執(zhí)行過程)架構(gòu)。Web應(yīng)用程序啟動時,瀏覽器所有請求都被提交給ActionServlet處理;提交表單時,ActionForm對象將被創(chuàng)建,并被填入表單中相應(yīng)的數(shù)據(jù);ActionServlet根據(jù)struts-config.xml文件中的配置,如果需要驗證,則成功后選擇將請求轉(zhuǎn)發(fā)給某個Action,若Action對象不存在則先創(chuàng)建,再調(diào)用其execute()方法,即從ActionForm對象中獲取數(shù)據(jù),返回一個ActionForward對象,再由其指向的JSP組件生成動態(tài)網(wǎng)頁。
1.3 Spring框架
基于JavaBean的Spring是一個開源框架,它的用途不僅限于服務(wù)器端的開發(fā),從簡單性、可測試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益,即Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。
1.4 Hibernate框架
Hibernate中提供了兩級Cache,第一級別的緩存是Session級別的緩存,它是屬于事務(wù)范圍的緩存。這一級別的緩存是由hibernate管理的,一般情況下無需進(jìn)行干預(yù);第二級別的緩存是SessionFactory級別的緩存,它是屬于進(jìn)程范圍或群集范圍的緩存,這一級別的緩存可以進(jìn)行配置和更改,并且可以動態(tài)加載和卸載。
2 就業(yè)統(tǒng)計分析系統(tǒng)的設(shè)計與實(shí)現(xiàn)
采用面向?qū)ο蟮姆治龇椒╗3]對系統(tǒng)進(jìn)行需求分析,按不同角色分類,可劃分為系統(tǒng)管理員對系統(tǒng)的需求、學(xué)生對系統(tǒng)的需求兩大功能需求,再建立用例模型,并考慮界面需求進(jìn)行系統(tǒng)設(shè)計,主要涉及模塊結(jié)構(gòu)、類、數(shù)據(jù)庫設(shè)計,界面是基于ExtJS Web技術(shù)的[4]。
2.1 模型結(jié)構(gòu)及類模型
模型結(jié)構(gòu)及類模型如表1所示。
從表1中的模塊看,至少需要五個類:公司基本信息類,公司招聘信息類,學(xué)生類,學(xué)生求職意向類和學(xué)生就業(yè)信息類,這些類之間的基本關(guān)系如圖2所示。
2.2 數(shù)據(jù)庫設(shè)計
分析本系統(tǒng)所涉及到的實(shí)體,主要包括公司基本信息、公司招聘信息、學(xué)生基本信息、學(xué)生求職信息、學(xué)生就業(yè)信息。如圖3所示,表為一個實(shí)體,表里面的字段屬性(如數(shù)據(jù)庫表company_info表示公司的基本信息,里面的company_name表示公司的名稱),表中帶虛線的箭頭代表表之間的依賴關(guān)系(如company_recruit中的recruit_company字段依賴于company_info數(shù)據(jù)庫表)[5]。
2.3 系統(tǒng)框架搭建
在Eclipse下搭建SSH框架,對Struts 2、Spring、Hibernate三者進(jìn)行整合:在Eclipse下新建Web Project;導(dǎo)入Struts 2、Spring、Hibernate類庫,將jar包(已解決他們之間的沖突)復(fù)制到項目的WebRoot/WEB-INF/lib目錄下;在web.xml文件中增加struts 2所需的核心控制器和spring監(jiān)聽,拷貝struts.xml文件到src根目錄下并進(jìn)行相應(yīng)的常量配置(如攔截器的配置);采用spring依賴注入[6]。
2.4 登錄界面
公司用戶進(jìn)入登錄界面后,可以在中間看到最新的公告,點(diǎn)擊相應(yīng)的鏈接,可以得到詳細(xì)信息和更多的公告;用戶輸入正確的用戶名和密碼后會根據(jù)用戶的權(quán)限進(jìn)入后臺。登錄流程為:用戶發(fā)送登錄請求到系統(tǒng)的控制層,先通過數(shù)據(jù)庫的查詢,判斷用戶輸入的用戶名是否存在和用戶輸入的密碼是否正確,如果用戶名和密碼都正確,則進(jìn)行權(quán)限判斷,否則,返回到登錄頁面。系統(tǒng)根據(jù)用戶的不同權(quán)限,分別進(jìn)入到管理員后臺和學(xué)生后臺。
2.5 公司基本信息管理
公司基本信息管理包括對公司信息的添加、修改、刪除,點(diǎn)擊公司管理導(dǎo)航欄下的公司列表可以顯示所有公司。該列表顯示了公司名稱,公司地址以及公司類型等(如圖5所示),表格的上面可以輸入各種條件的組合,點(diǎn)擊查詢后可以找到符合條件的公司,查詢代碼演示如下:
if (!companyInfo.getCompanyName().equals(""))
query.add("companyName like '%"+companyInfo
.getCompanyName()
+ "%' ");
if (!companyInfo.getCompanyAddr().equals(""))
query.add(" companyAddr like '%" + companyInfo
.getCompanyAddr()
+ "%' ");
……
上述query用來存儲HQL語句中的各種查詢條件,再經(jīng)過適當(dāng)?shù)靥幚?,最后會得到一個完整的HQL查詢語句,并由DAO層執(zhí)行此HQL語句,得出查詢結(jié)果。
2.6 公司招聘管理
公司招聘管理負(fù)責(zé)維護(hù)該系統(tǒng)所管理的所有公司發(fā)布的招聘信息,包括瀏覽公司的招聘列表,增加、刪除和修改招聘信息等;一個項招聘信息包括招聘的公司、招聘職位、招聘待遇和所需技術(shù)等信息。查看某個公司信息如圖6所示。
當(dāng)點(diǎn)擊“查看詳情”時,可看到該公司的招聘信息。
2.7 學(xué)生就業(yè)信息統(tǒng)計
點(diǎn)擊在學(xué)生統(tǒng)計模塊下的就業(yè)統(tǒng)計,默認(rèn)會顯示所有學(xué)生的簽約率、違約率、待業(yè)率,并且通過下拉菜單選擇相應(yīng)的分類統(tǒng)計,如圖7所示的為按專業(yè)統(tǒng)計結(jié)果。
圖7的列表中的統(tǒng)計信息都是通過后臺業(yè)務(wù)層對數(shù)據(jù)里面的數(shù)據(jù)進(jìn)行查詢和計算得出來的。例如,要統(tǒng)計某個專業(yè)的待業(yè)率,在后臺收到請求后,先判斷統(tǒng)計是不是按照專業(yè)來的,然后通過數(shù)據(jù)庫查詢得到專業(yè)的名稱,接著判斷統(tǒng)計的是不是待業(yè)率,如果是,則通過查詢數(shù)據(jù)庫的結(jié)果計算出專業(yè)的待業(yè)率,而待業(yè)人數(shù)和總?cè)藬?shù)則通過使用多表之間的組合查詢而得到,求得前者的主要代碼如下:
HibernateTemplate htp=this.getHibernateTemplate();
String hql="select count(*) from StudentInfo si, StudentEmploy se
where se.status=0"
+ "and si.studentName=se.studentName"
+ "and si.studentMajor='"+major+"'";
return (Long) (htp.find(hql).get(0));
代碼中HibernateTemplate是一個Hibernate的模板對象,里面的數(shù)據(jù)庫連接等底層實(shí)現(xiàn)都已經(jīng)封裝好,可以直接通過調(diào)用它的相關(guān)方法來對數(shù)據(jù)庫表進(jìn)行操作,se.status=0表示為待業(yè)狀態(tài)。執(zhí)行上述代碼可得到某個專業(yè)的待業(yè)人數(shù),再通過待業(yè)人數(shù)除以該專業(yè)總?cè)藬?shù)得出該專業(yè)的待業(yè)率。
2.8 就業(yè)匹配模塊
就業(yè)匹配是指,能夠按照企業(yè)招聘信息、畢業(yè)生求職信息和畢業(yè)生成績等基本信息進(jìn)行自動智能匹配,力求使畢業(yè)生能夠找到合適的崗位,從而減輕企業(yè)和學(xué)生的工作量。例如,系統(tǒng)根據(jù)輸入的學(xué)生姓名,通過數(shù)據(jù)庫的查詢,得到此學(xué)生的求職意向,然后在業(yè)務(wù)層根據(jù)具體的匹配規(guī)則對公司的求職信息進(jìn)行篩選,該匹配的部分演示代碼如下:
if (!studentHunt.getHuntPost().equals(""))
query.add("recruitPost like '%"+studentHunt.getHuntPost()
+ "%' ");
if (studentHunt.getHuntTreate()!=null)
query.add("recruitTreate>="+studentHunt.getHuntTreate());
}
點(diǎn)擊導(dǎo)航欄下面的就業(yè)匹配,在上面的文本框輸入學(xué)生姓名點(diǎn)擊匹配后,系統(tǒng)會根據(jù)學(xué)生的求職意向,從所有公司的招聘信息中招出符合條件的招聘信息顯示出來,如圖8所示。
3 結(jié)束語
SSH為Struts+Spring+Hibernate的一個集成框架,是目前較流行的一種Web應(yīng)用程序開源框架,且struts的view層標(biāo)簽豐富可操作性強(qiáng),很適合用戶體驗。本文在這個框架基礎(chǔ)上,采用了面向?qū)ο蟮腏ava語言分析并實(shí)現(xiàn)學(xué)生與公司的需求,使層次和結(jié)構(gòu)更加清晰,便于程序的編寫;采用與后臺技術(shù)無關(guān)且功能豐富的ExtJs技術(shù)進(jìn)行頁面的設(shè)計,使設(shè)計更加完美。
參考文獻(xiàn):
[1] 寇毅,吳力文.基于MVC設(shè)計模式的Struts框架的應(yīng)用方法[M].計算
機(jī)應(yīng)用,2003.23(11):91-9
[2] 李剛.Struts2權(quán)威指南—基于WebWork核心的MVC開發(fā)[M].電子
工業(yè)出版社,2007.
[3] 牛麗平,郭新志,宋強(qiáng),楊繼萍等.UML面向?qū)ο笤O(shè)計與分析基礎(chǔ)教程[M].
清華大學(xué)出版社,2007.
[4] 張祖良,孫純,肖景海.Learning Ext JS[D].人民郵政出版社,2009.
[5] 邱壯志劍,宋建民等.數(shù)據(jù)庫原理與SQL Server[M].高等教育出版社,
2008.
[6] 楊俊生,唐琳,張坤編.Java Web開發(fā)實(shí)踐教程[M].清華大學(xué)出版社,
2010.