劉耀欽 袁承芬
摘 要: 以PHP為主要開發(fā)技術(shù),采用Smarty模板引擎構(gòu)建了基于B/S的Web應(yīng)用系統(tǒng)——招聘報名系統(tǒng)。該系統(tǒng)有著高效率、高性能、可擴展等優(yōu)點,其 B/S三層體系結(jié)構(gòu)統(tǒng)一了客戶端,集功能于服務(wù)器,簡化了應(yīng)用開發(fā),Smarty模板引擎以其智能的分離邏輯,有效地實現(xiàn)了視圖與源碼的分離,縮短了開發(fā)周期,同時降低了維護(hù)成本。
關(guān)鍵詞: B/S結(jié)構(gòu); MVC模式; Smarty模板引擎; 招聘報名
中圖分類號:TP311 文獻(xiàn)標(biāo)志碼:A 文章編號:1006-8228(2014)05-39-03
Abstract: A Web application system, recruitment registration system based on B/S, is constructed by using PHP as a main development tool and applying Smarty module engine. It has advantages such as high efficiency, high performance, scalability, etc. B/S three-tier architecture unifies client terminals, set the function into the server, and simplifies application development. Smarty module engine with its intelligent separation logic effectively separates view and source code, shortens development time and reduces maintenance costs.
Key words: B/S structure; MVC pattern; Smarty module engine; job application
0 引言
人事招聘報名系統(tǒng)是人事工作中非常重要的一項工作,接收報名的傳統(tǒng)形式是應(yīng)聘者必須親自帶上簡歷去招聘單位現(xiàn)場報名,這勢必會花費大量的人力、物力和財力,在計算機及互連網(wǎng)技術(shù)不斷深入發(fā)展的今天,基于Web的招聘報名系統(tǒng)已經(jīng)成為人力資源管理部門的必備工具之一。PHP作為一種開源式的跨平臺服務(wù)器端的嵌入式腳本語言[1],具有高效率、可擴展等諸多優(yōu)點,加之多數(shù)據(jù)庫類型的支持,其中尤以PHP+MySQL組合為最佳,使得開發(fā)出來的基于B/S模式的應(yīng)用系統(tǒng)能高效率地安全運行,有效地簡化了傳統(tǒng)報名形式繁雜多余的工作程序,降低了運行成本,提高了人事工作的透明度和可信度。
1 框架結(jié)構(gòu)與設(shè)計模式
1.1 框架結(jié)構(gòu)
應(yīng)用系統(tǒng)的開發(fā)通常有C/S、B/S兩種架構(gòu)[2],隨著互連網(wǎng)的快速發(fā)展及數(shù)據(jù)存儲能力技術(shù)的不斷提升,C/S架構(gòu)即客戶端/服務(wù)器結(jié)構(gòu),具有強交互性、高可靠性等優(yōu)點,但運行成本較高,工作量較大。B/S架構(gòu)即瀏覽器/服務(wù)器結(jié)構(gòu),是C/S結(jié)構(gòu)應(yīng)用的擴展,用戶通過客戶端瀏覽器向相應(yīng)服務(wù)器發(fā)送資源請求,服務(wù)器根據(jù)接收到的請求查找并向用戶瀏覽器輸出相應(yīng)結(jié)果B/S三層的體系結(jié)構(gòu)分為表示層、邏輯層、數(shù)據(jù)層,服務(wù)運算被分布在客戶端和服務(wù)器端且統(tǒng)一了客戶端操作,將系統(tǒng)功能的實現(xiàn)集中到服務(wù)器上,簡化了系統(tǒng)應(yīng)用開發(fā)、維護(hù)和使用規(guī)程。表示層是位于客戶端的應(yīng)用系統(tǒng)的顯示邏輯,主要用于向服務(wù)器發(fā)送資源請求并接收輸出服務(wù)器發(fā)送來的運算結(jié)果;邏輯層則是位于服務(wù)器端的事務(wù)處理邏輯,主要用于對數(shù)據(jù)層的業(yè)務(wù)邏輯處理;數(shù)據(jù)層則是位于服務(wù)器端的數(shù)據(jù)處理邏輯,用于接收服務(wù)器對數(shù)據(jù)庫查詢、修改、更新等操作請求,并將對數(shù)據(jù)庫操作的結(jié)果提交給服務(wù)器。
1.2 設(shè)計模式
模式是一種解決某類問題通用的最佳方法[3]。基于Web的應(yīng)用項目開發(fā)采用的設(shè)計模式有多種,其中MVC設(shè)計模式應(yīng)用非常廣泛。MVC模式是模型層、視圖層、控制器層三者的集合,用一種顯示分離的業(yè)務(wù)邏輯組織代碼,模型層負(fù)責(zé)存取數(shù)據(jù),用于處理應(yīng)用程序的數(shù)據(jù)邏輯部分,視圖層主要用于表示模型處理數(shù)據(jù)的顯示方式,控制器層負(fù)責(zé)控制用戶輸入、讀取視圖層數(shù)據(jù)并向模型層發(fā)送數(shù)據(jù)。
在一個Web應(yīng)用項目中,MVC組件中的各個部分各自分工完成不同任務(wù)且又緊密聯(lián)系。MVC設(shè)計模式最突出的一個特點就是,多個視圖可以共享一個模型,并且數(shù)據(jù)和業(yè)務(wù)規(guī)則分離于表示層,使代碼重用度得到最大化的提高。另外由于模型自包含且分離于控制器層和視圖層的特性,則會很容易改變數(shù)據(jù)層和業(yè)務(wù)規(guī)則,如要移植數(shù)據(jù)庫(從一種數(shù)據(jù)庫轉(zhuǎn)換成另一種數(shù)據(jù)庫)只需要改變模型即可,也就是說,只要正確使用模型,無論采用哪種數(shù)據(jù)庫或數(shù)據(jù)源,視圖都會正確顯示。MVC設(shè)計模式的這些特性使得實現(xiàn)一個表現(xiàn)豐富、強內(nèi)聚弱耦合且易于擴展的Web應(yīng)用項目變得極為輕松。
2 系統(tǒng)功能框架
本文所涉及到的招聘報名系統(tǒng)主要根據(jù)高校人才引進(jìn)工作流程和政策而設(shè)計,整個系統(tǒng)功能框架如圖3所示。整個系統(tǒng)的用戶角色分為管理員、應(yīng)聘者、分閱簡歷人員三大類型,給不同的角色賦予不同的權(quán)限。首先,管理員根據(jù)本單位招聘工作的實際情況擬定并發(fā)布招聘崗位計劃及各崗位招聘條件,然后應(yīng)聘者通過本系統(tǒng)注冊用戶信息,獲取使用系統(tǒng)的權(quán)限,登錄系統(tǒng)后,第一步查看并選擇應(yīng)聘崗位,第二步根據(jù)系統(tǒng)向?qū)顚懞啔v并隨時預(yù)覽簡歷(待報名時間結(jié)束并經(jīng)單位資格審核通過后,設(shè)置各應(yīng)聘者的簡歷狀態(tài)并通知參加考試),第三步查看筆試、面試成績及當(dāng)前簡歷狀態(tài)。
報名時間結(jié)束后,分閱簡歷人員根據(jù)擬定的崗位條件,結(jié)合應(yīng)聘人員的情況,把自己的意見或建議反饋給單位人事負(fù)責(zé)人,負(fù)責(zé)人依據(jù)這些意見并結(jié)合崗位擬定條件,可以事先設(shè)定特殊人員,比如應(yīng)聘人員A,除了年齡略超外其他都符合條件,如果單位同意則可將其設(shè)置為條件放寬狀態(tài)。對大批量應(yīng)聘人員的簡歷狀態(tài)可以使用系統(tǒng)自動篩選功能來設(shè)置,最后將事先設(shè)定好的參加考試時間和地點通知給符合條件人員,進(jìn)而分配考場并輸出準(zhǔn)考證,待筆試環(huán)節(jié)結(jié)束后輸入筆試成績并根據(jù)擬定條件設(shè)定擬參加面試人員并通知面試時間及地點,最后輸入面試成績,并結(jié)合筆試成績確定擬錄用人員并公示。
3 系統(tǒng)實現(xiàn)的關(guān)鍵技術(shù)
3.1 Smarty模板
Smarty是一種使用PHP開發(fā)的模板引擎程序,也是目前使用最為廣泛的模板引擎之一。Smarty提供了一種將原本與HTML混合在一起的PHP分離的邏輯,使得邏輯內(nèi)容的改變不會影響前臺視圖,不僅縮短了復(fù)雜業(yè)務(wù)系統(tǒng)的開發(fā)時間,而且提高了系統(tǒng)的可維護(hù)性和可擴展性[4]。Smarty模板有如下特點。
⑴ 智能的模板編譯機制:Smarty模板程序運行時需要編譯成一個非模板的PHP文件,之后即可直接執(zhí)行這些PHP腳本文件,不再利用服務(wù)器資源進(jìn)行模板文件語法的解析[5],提高了程序的運行效率。
⑵ 高效的緩存機制:Smarty模板引擎將用戶最終看到的視圖(HTML文件)用緩存來保存,在cache屬性為true時,Web請求直接映射到這個靜態(tài)的HTML文件,極大的加快了Smarty模板中display及fetch的執(zhí)行速度。
⑶ 靈活的插件機制:插件是一種遵循一定規(guī)范的應(yīng)用程序接口,是組件復(fù)用技術(shù)的一種[6]。在Smarty中,插件就是一些自定義的函數(shù),Smarty允許程序員自定義插件,即允許程序員自定函數(shù)以實現(xiàn)某些特定的功能。
Smarty將應(yīng)用程序分成視圖與邏輯控制兩部分[7],形成了獨特的表現(xiàn)邏輯機制,有效地實現(xiàn)了視圖與代碼的分離。
3.2 數(shù)據(jù)庫的持久連接
數(shù)據(jù)庫連接池[8]初始化時創(chuàng)建一定數(shù)量的連接放在連接池中,當(dāng)用戶訪問數(shù)據(jù)庫時,直接在連接池中取出一個空閑連接即可使用。PHP本身沒有連接池,但基于PHP的應(yīng)用程序開發(fā)的服務(wù)器工具Apache卻有進(jìn)程池的概念,一個Apache子進(jìn)程運行結(jié)束后即被放回進(jìn)程池,以保證PHP的持久化連接資源不被釋放掉。數(shù)據(jù)庫的持久化連接是指應(yīng)用程序腳本運行結(jié)束后不關(guān)閉連接。當(dāng)應(yīng)用程序發(fā)生持久連接請求時,PHP會自動檢查是否已經(jīng)存在一個與請求相同的持久連接,如果存在這個連接,將使用這個連接,否則將重新建立一個新的連接?;赑HP的Web應(yīng)用程序的數(shù)據(jù)庫連接的持久化是通過mysql_pconnect實現(xiàn)的,持久化連接的建立大大提高了應(yīng)用程序的運行效率。
4 系統(tǒng)安全
基于Web的應(yīng)用系統(tǒng)所面臨的威脅主要有SQL注入攻擊、拒絕服務(wù)攻擊、惡意代碼注入、非法用戶攻擊服務(wù)器[9]等,這些惡意行為會造成用戶數(shù)據(jù)丟失和破壞,嚴(yán)重者會造成服務(wù)器停止工作甚至硬件損壞。Web應(yīng)用系統(tǒng)的安全措施主要從輸入、程序代碼和參數(shù)設(shè)置等方面防范。從程序和參數(shù)設(shè)置角度講,本招聘系統(tǒng)主要從三個方面采取了預(yù)防措施。
⑴ SQL注入的預(yù)防:SQL注入[10-11]是眾多攻擊方式中的一種,它通過將惡意代碼插入到正常SQL字符串中執(zhí)行,以獲取相關(guān)信息達(dá)到破壞攻擊目的。這種方法隱蔽性較強,破壞性大,常見有邏輯錯誤判斷、聯(lián)合查詢、推理猜測、編碼變換等攻擊手段[11],通常以URL附帶的參數(shù)及表單提交數(shù)據(jù)為入口。
⑵ 拒絕服務(wù)攻擊DDoS:DDoS的基本原理是利用合理的服務(wù)請求來占用過多的服務(wù)器資源,直至目標(biāo)服務(wù)器無法提供正常的服務(wù)。非法用戶通過利用POST方式提交的參數(shù)構(gòu)造數(shù)組產(chǎn)生大量哈希碰撞,達(dá)到DDoS的目的,可以通過限制POST數(shù)據(jù)提交數(shù)量或升級PHP版本至5.3.9及以上版本即可有效控制DDoS。
⑶ 參數(shù)安全性設(shè)置:在PHP配置文件中,如果完善參數(shù)配置可大大增強Web應(yīng)用系統(tǒng)的安全性能。比如設(shè)置magic_quotes_gpc=On,則PHP會自動對提交的SQL語句進(jìn)行轉(zhuǎn)換驗證,有效降低了SQL注入的可能性。Apache中通過設(shè)置display_errors=Off禁止輸出程序運行的錯誤信息以防止用戶從錯誤信息中找到相應(yīng)攻擊入口,或設(shè)置allow_url_fopen=Off禁止遠(yuǎn)程獲取服務(wù)器內(nèi)容等。
5 結(jié)束語
PHP是一種開源的動態(tài)服務(wù)器端運行的腳本語言,在當(dāng)前的Web應(yīng)用程序開發(fā)中占有重要地位,Smarty模板引擎以其智能的模板編譯機制、高效的緩存機制以及靈活的插件機制等特點而出名。采用Smarty模板引擎以PHP為主要開發(fā)技術(shù)構(gòu)建的基于B/S模式的人才招聘系統(tǒng),具有體積小、運行效率高、安全性能強等優(yōu)點。目前,該系統(tǒng)已正式上線運行,不僅降低了工作人員的工作力度,而且大大縮短了工作時間,降低了成本,提高了效率。隨著單位人才引進(jìn)需求的不斷增長,該系統(tǒng)也表現(xiàn)出了很多不足之處,比如報表打印及輸出、語義信息的判斷與挖掘等,其中簡歷信息的語義信息挖掘?qū)⑹墙窈笱芯康闹攸c。
參考文獻(xiàn):
[1] 劉耀欽,袁承芬.Web系統(tǒng)移植的PHP+MySQL設(shè)計研究[J].計算機
系統(tǒng)應(yīng)用,2008.8:102-104
[2] 張洪雷,占學(xué)剛.基于B/S模式人事管理信息系統(tǒng)的構(gòu)建[J].遼寧科
技大學(xué)學(xué)報,2008.31(34):321-326
[3] 劉耀欽,袁承芬.MVC設(shè)計模式在Web開發(fā)中的應(yīng)用與研究[J].信息
安全與技術(shù),2013.11:78-80
[4] 郭紅霞,陳斌,潘斌等.基于Smarty的學(xué)科信息管理平臺構(gòu)建[J].成都
大學(xué)學(xué)報,2012.31(4):408-410
[5] 高彥卿.用Smarty實現(xiàn)基于MVC模式的Web應(yīng)用程序開發(fā)[J].電腦
知識與技術(shù),2007.7:461-462,565
[6] 瞿連政,盧冰,戰(zhàn)術(shù)互聯(lián)網(wǎng)中基于插件技術(shù)的設(shè)備監(jiān)控方法[J].計算
機應(yīng)用與軟件,2013.30(1):245-247
[7] 馮興利,徐墨,鎖志海.基于模板引擎Smarty的信息管理系統(tǒng)設(shè)計[J].
現(xiàn)代電子技術(shù),2012.35(8):25-28
[8] 孟培超,胡圣波,舒恒等.基于ADO數(shù)據(jù)庫連接池優(yōu)化策略[J].計算機
工程與設(shè)計,2013.34(5):1706-1710,1715
[9] 馮興利,鎖志海,徐墨.基于PHP+MySQL的Web系統(tǒng)安全防范及全
站靜態(tài)化[J].現(xiàn)代電子技術(shù),2012,35(8):25-27
[10] 楊飚.基于Web應(yīng)用的系統(tǒng)安全策略[J].科技視界,2012.31:186,
255
[11] 馬凱,蔡皖東,姚燁.Web2.0環(huán)境下SQL注入漏洞注入點提取方法[J].
計算機技術(shù)與發(fā)展,2013.23(3):121-124