mvc框架范文
時(shí)間:2023-03-31 09:23:08
導(dǎo)語(yǔ):如何才能寫(xiě)好一篇mvc框架,這就需要搜集整理更多的資料和文獻(xiàn),歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。
篇1
【關(guān)鍵詞】.NET mvc框架 Web 設(shè)計(jì)
在基于.NET MVC框架的Web出現(xiàn)以前,Web中的主要技術(shù)是ASP、JSP等技術(shù),這些技術(shù)的應(yīng)用很容易將業(yè)務(wù)邏輯與頁(yè)面顯示混合起來(lái),并不利于分工與協(xié)作。同時(shí)由于在業(yè)務(wù)邏輯層中含有SQL語(yǔ)句,如果出現(xiàn)數(shù)據(jù)庫(kù)變化等,將直接影響到系統(tǒng)修改,其不利于系統(tǒng)維護(hù)。因此,基于.NET MVC框架的Web設(shè)計(jì)成為計(jì)算機(jī)領(lǐng)域研究重點(diǎn)。
1 MVC優(yōu)點(diǎn)
MVC的優(yōu)點(diǎn)主要體現(xiàn)在以下幾點(diǎn):
1.1 共享性
它主要是利用模型完成數(shù)據(jù)返回的,且可以利用視圖實(shí)現(xiàn)數(shù)據(jù)傳達(dá),并實(shí)現(xiàn)格式化,然后再將這些信息傳遞到用戶手中,在數(shù)據(jù)分離形式的作用下,也可以有效提升系統(tǒng)代碼的移植性與重用性。
1.2 控制性
這一點(diǎn)主要表現(xiàn)在控制器對(duì)業(yè)務(wù)的控制上,它能夠結(jié)合用戶實(shí)際情況完成控制,然后從模型層中獲得必要的信息,再將這些信息傳遞到視圖層中,并讓這些數(shù)據(jù)顯現(xiàn)出來(lái),這樣也可以有效提升應(yīng)用程序的可配置性與靈活性。
2 MVC設(shè)計(jì)思想
MVC主要由三部分構(gòu)成,分別為模型層、視圖層以及控制器層。為做好NVC設(shè)計(jì),就需要充分了解這三個(gè)層次:
2.1 視圖層
它所代表的是同網(wǎng)頁(yè)用戶的應(yīng)用界面,也就是Web中的HTML頁(yè)面。一般來(lái)講,視圖層主要是將系統(tǒng)中的數(shù)據(jù)呈現(xiàn)出來(lái),且為用戶提供有利于交互的界面,這樣一來(lái)也就減少了地其他業(yè)務(wù)的處理。在實(shí)際利用的過(guò)程中,視圖通常需要提交數(shù)據(jù)用戶以后再接受其他數(shù)據(jù),然后再將這些數(shù)據(jù)以用戶需求的方式體現(xiàn)出來(lái),同時(shí),用戶也會(huì)利用視圖層將自己的請(qǐng)求傳送到模型中。
2.2 模型層
它是MVC框架中最重要的組成部分,是實(shí)現(xiàn)系統(tǒng)邏輯處理的重要組成部分。在模型接收來(lái)自視圖層的請(qǐng)求以后,就會(huì)自動(dòng)處理,然后再將處理結(jié)果在控制器的作用下回饋給視圖層。在這一過(guò)程中,控制器與視圖層均是通過(guò)操作的方式進(jìn)行工作的。
2.3 控制層
對(duì)于控制器來(lái)說(shuō),其功能是將用戶發(fā)出的請(qǐng)求反映給模型,然后再將模型所給出的結(jié)果反映給用戶,可以說(shuō)控制層是視圖層與模型之間的中轉(zhuǎn)環(huán)節(jié),是反饋用戶請(qǐng)求的重要力量,但它并不參與數(shù)據(jù)處理工作。
3 基于.NET MVC框架的Web設(shè)計(jì)
對(duì)于常規(guī)Web應(yīng)用系統(tǒng)來(lái)說(shuō),主要分為表示層、業(yè)務(wù)層以及數(shù)據(jù)庫(kù)層幾個(gè)部分,在表示層中,只有視圖與控制器兩部分;在業(yè)務(wù)層中有業(yè)務(wù)邏輯層、實(shí)體層、數(shù)據(jù)訪問(wèn)及其接口層;在數(shù)據(jù)層中僅有數(shù)據(jù)庫(kù)。要做好基于.NET MVC框架的Web設(shè)計(jì),應(yīng)從以下幾方面入手:
3.1 表示層
對(duì)于.NET MVC框架來(lái)說(shuō),在的作用下能夠獲得良好且有利于MVC設(shè)計(jì)實(shí)現(xiàn)的環(huán)境。開(kāi)發(fā)人員只要利用.aspx頁(yè)面中的開(kāi)發(fā)用戶接口就可以將視圖展示出來(lái),同時(shí)也可以將控制器中的功能體現(xiàn)出來(lái)。模型主要對(duì)應(yīng)的則是業(yè)務(wù)應(yīng)用部分。為做好基于.NET MVC框架的Web設(shè)計(jì),可以在頁(yè)面控制器的作用下優(yōu)化MVC,然后在應(yīng)用程序各個(gè)頁(yè)面的公用方法中編入基類(lèi),這樣一來(lái),所有頁(yè)面中都存在基類(lèi),它們不僅可以將自己原有的內(nèi)容體現(xiàn)出來(lái),還具有其他作用。
3.2 業(yè)務(wù)層
對(duì)于業(yè)務(wù)層來(lái)說(shuō),它是MVC設(shè)計(jì)中十分重要的一部分,也是基于.NET MVC框架的Web設(shè)計(jì)基礎(chǔ),在這一部分的設(shè)計(jì)中應(yīng)從以下幾方面入手:
(1)保證業(yè)務(wù)邏輯與數(shù)據(jù)實(shí)體相分離,兩者屬于不同的組成部分,對(duì)于業(yè)務(wù)邏輯類(lèi)來(lái)說(shuō),主要是利用實(shí)體對(duì)象完成業(yè)務(wù)規(guī)則與邏輯實(shí)現(xiàn)的,而實(shí)體層則有自己的實(shí)體對(duì)象,一般來(lái)講只有屬性,不存在方法,所以主要用于數(shù)據(jù)實(shí)體展現(xiàn)。
(2)分x數(shù)據(jù)訪問(wèn)與業(yè)務(wù)。在這一部分中主要涵蓋了數(shù)據(jù)訪問(wèn)層及其接口層,它的主要作用是讓業(yè)務(wù)邏輯層可以全面的描述業(yè)務(wù)規(guī)則,這樣一來(lái)就可以用數(shù)據(jù)訪問(wèn)層完成實(shí)體對(duì)象與數(shù)據(jù)庫(kù)交互。為做好基于.NET MVC框架的Web設(shè)計(jì),應(yīng)將數(shù)據(jù)訪問(wèn)接口層加入到訪問(wèn)層與業(yè)務(wù)邏輯層之間,這樣不僅可以起到工廠模式的作用還能讓數(shù)據(jù)訪問(wèn)方法構(gòu)成抽象接口,這樣就可以將業(yè)務(wù)邏輯層與數(shù)據(jù)訪問(wèn)層分離開(kāi)來(lái),同時(shí)也便于配置文件的修改。
(3)為做好基于.NET MVC框架的Web設(shè)計(jì),還要在訪問(wèn)層中應(yīng)用NHibernate工具,它是以.NET為基礎(chǔ)建立起來(lái)的關(guān)系型數(shù)據(jù)庫(kù),屬于對(duì)象持久化類(lèi)庫(kù)的一種。在NHibernate中不必編寫(xiě)SQL語(yǔ)句,它可以將相關(guān)的映射信息保留下來(lái),并存儲(chǔ)到原數(shù)據(jù)中,這樣就可以讓代碼與對(duì)象之間存在一定的關(guān)聯(lián)性,并自動(dòng)生成SQL語(yǔ)句,這樣也可以讓對(duì)象存儲(chǔ)到表與字段中。
3.3 模型層
由于模型是應(yīng)用程序的中心,其中涵蓋了很多與應(yīng)用程序相關(guān)的內(nèi)容,所以,在實(shí)際設(shè)計(jì)中,應(yīng)進(jìn)一步強(qiáng)化應(yīng)用程序的持久化。對(duì)于基于.NET MVC框架的Web設(shè)計(jì)來(lái)說(shuō),可以將LINQ-TO-SQL應(yīng)用其中,原因在于這種設(shè)計(jì)方式不僅有利于,還可以將.NET平臺(tái)與LINQ機(jī)制結(jié)合在一起,這也是有效提升數(shù)據(jù)庫(kù)處理能力的有效方式。在設(shè)計(jì)中,可以先為應(yīng)用程序創(chuàng)建DAL,但不需要編寫(xiě)代碼,然后再做進(jìn)一步細(xì)分,并用LINQ完成語(yǔ)句查詢,且從數(shù)據(jù)庫(kù)中找出所需的實(shí)體對(duì)象。在設(shè)計(jì)完成以后,LINQ-TO-SQL就可以將不必要的細(xì)節(jié)忽略,這樣既能有效提升數(shù)據(jù)庫(kù)操作的便利性,也能進(jìn)一步強(qiáng)化業(yè)務(wù)邏輯開(kāi)發(fā),更可以加快數(shù)據(jù)應(yīng)用程序開(kāi)發(fā)速度。
3.4 控制層
由于控制層主要用于用戶請(qǐng)求與輸入處理,然后再將結(jié)果反饋給客戶端,同時(shí)完成數(shù)據(jù)集合與處理,并為其呈現(xiàn)合適的視圖,這樣就可以將隱藏其中的視圖代碼消除。為做好設(shè)計(jì)首先應(yīng)創(chuàng)建合適的模型,并全面檢查數(shù)據(jù)訪問(wèn)與執(zhí)行狀態(tài),且提供一定的面向?qū)ο髷?shù)據(jù),這樣就可以讓數(shù)據(jù)與方法結(jié)合在一起,且構(gòu)成一定的視圖。在.NET MVC框架完成以后,也可以更好的完成各個(gè)元素之間的協(xié)調(diào)與組織,這也是有效強(qiáng)化程序元素交互的有效方式。為進(jìn)一步做好應(yīng)用程序測(cè)試,還要做好類(lèi)顯示輸出,以便為用戶輸入奠定基礎(chǔ),盡管編寫(xiě)程序相對(duì)復(fù)雜,但且會(huì)因.NET MVC框架的不同,將業(yè)務(wù)邏輯分離開(kāi),這樣也可以有效提升單元測(cè)試效率。
3.5 視圖層
在基于.NET MVC框架的Web設(shè)計(jì)中,視圖層主要用于模型展示,在視圖層的作用下可以將瀏覽器中的HTML頁(yè)面展示出來(lái),所以,在實(shí)際時(shí)可以利用微軟控件實(shí)現(xiàn)控制,這樣也可以讓HTML更加潔與高效。然后通過(guò).NET MVC提供的相關(guān)說(shuō)明了解各個(gè)控件的作用,這樣就可以順利完成視圖層設(shè)計(jì)與開(kāi)發(fā),相關(guān)開(kāi)發(fā)也可以有效提升工作效率。在視圖層設(shè)計(jì)完成以后,還可以順利完成視圖檢查等,尤其是在編譯階段,可以隨時(shí)發(fā)現(xiàn)隱藏在其中的錯(cuò)誤與缺陷,視圖模板也將變得更加清晰。
3.6 框架特點(diǎn)
之所以要重視基于.NET MVC框架的Web設(shè)計(jì),主要是由于在基于.NET MVC框架的Web設(shè)計(jì)中,Web中的三層框架帶有一定的細(xì)分性,不僅可以讓結(jié)構(gòu)更加清晰,還能進(jìn)一步完備相關(guān)功能,進(jìn)而讓系統(tǒng)變得更具有條理性與便捷性。其次,做好.NET MVC框架設(shè)計(jì),可以讓顯示層與應(yīng)用層相互分離,也可以進(jìn)一步做好頁(yè)面修改,這也是實(shí)現(xiàn)單元測(cè)試,強(qiáng)化系統(tǒng)靈活性的有效方式。再者,在基于.NET MVC框架的Web設(shè)計(jì)實(shí)現(xiàn)以后,還可以最大程度的減少依懶性,由于前端頁(yè)面過(guò)于復(fù)雜,需要共享的代碼也很多,這就需要利用MVC模式完成分離等,這也是有效強(qiáng)化管理,做好修改的有效措施。最后,在基于.NET MVC框架的Web設(shè)計(jì)中,不僅可以讓數(shù)據(jù)訪問(wèn)與業(yè)務(wù)邏輯區(qū)分開(kāi)來(lái),還可以強(qiáng)化系統(tǒng)的可移植性與持久性,尤其是在工廠模式的作用下,也可以進(jìn)一步突出依賴(lài)倒置原則,且最大程度的減少數(shù)據(jù)訪問(wèn)層給系統(tǒng)帶來(lái)的變化。
4 結(jié)束語(yǔ)
之所以要做好Web設(shè)計(jì),主要是為了更好彌補(bǔ)原有設(shè)計(jì)中的不足,為實(shí)現(xiàn)這一目標(biāo),基于.NET MVC框架的Web設(shè)計(jì)成為重點(diǎn),在這樣的Web設(shè)計(jì)完成以后,不僅有效提升了系統(tǒng)靈活性,還進(jìn)一步提升了可維護(hù)性,同時(shí)也有效降低了代碼編寫(xiě)量與復(fù)雜性,促進(jìn)了開(kāi)發(fā)效率早日完成,因此,應(yīng)重視基于.NET MVC框架的Web設(shè)計(jì)。
參考文獻(xiàn)
[1]周文紅.基于 MVC框架的Web應(yīng)用開(kāi)發(fā)[J].計(jì)算機(jī)與現(xiàn)代化,2013(10):197-199.
[2]黃勝根,陳蜀宇.基于 MVC框架的干教系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010(02):190-193.
[3]劉亞鵬,張征,俞婷.基于MVC多層架構(gòu)的Web應(yīng)用框架設(shè)計(jì)[J].微計(jì)算機(jī)信息,2011(07):169-171.
[4]許輝.基于 MVC框架的Web設(shè)計(jì)[J].計(jì)算機(jī)光盤(pán)軟件與應(yīng)用,2014(16):266-267.
[5]黃東連.基于 MVC框架的Web開(kāi)發(fā)研究[J].河南科技,2015(13):26-27.
[6]肖洋.基于的MVC框架的應(yīng)用開(kāi)發(fā)模式研究[J].電子技術(shù)與軟件工程,2016(02):63.
[7]滿高媛.MVC設(shè)計(jì)模式在框架中的應(yīng)用研究[J].軟件導(dǎo)刊,2016(04):149-151.
篇2
關(guān)鍵詞:PHP;MVC;網(wǎng)頁(yè)設(shè)計(jì)
PHP是目前比較流行的網(wǎng)頁(yè)程序設(shè)計(jì)腳本語(yǔ)言。MVC(Model View Controller)是模型、視圖、控制器的縮寫(xiě),是一種程序設(shè)計(jì)規(guī)范,主要目的是分離模型和視圖,通過(guò)控制器管理所有的查詢和顯示過(guò)程,而且MVC框架編寫(xiě)的程序更易于擴(kuò)展,方便日后的功能擴(kuò)展和維護(hù)工作。
1 數(shù)據(jù)模型設(shè)計(jì)
MVC基本框架需要3個(gè)文件,分別是test_model.php、test_controller.php、test_view.php,分別對(duì)應(yīng)模型、控制器、視圖。
首先編寫(xiě)test_model.php,創(chuàng)建test_model類(lèi),包含數(shù)據(jù)庫(kù)連接和查詢過(guò)程,本實(shí)例因篇幅原因簡(jiǎn)單用變量代替復(fù)雜的數(shù)據(jù)查詢。內(nèi)容如下:
//建立數(shù)據(jù)模型
class test_model{
protected $text1;
protected $text2;
public function __construct(){
$this->my_mvc();}
/*構(gòu)建賦值過(guò)程,如果需要數(shù)據(jù)庫(kù),那么可以在此連接數(shù)據(jù)庫(kù)*/
public function my_mvc(){
$this->text1 = "PHP";
$this->text2 = "MVC";}
//在此生成需要顯示在視圖中的一些數(shù)據(jù)內(nèi)容
public function view_data(){
$view_text = "基于" . $this->text1;
$view_text.= "的" . $this->text2 . "框架";
return $view_text;}
}?>
2 控制器設(shè)計(jì)
其次編寫(xiě)的是控制器test_controller.php部分,控制器部分包含通過(guò)實(shí)例化test_model并用其中的view_data方法得到的數(shù)據(jù),并發(fā)送到視圖中。
//建立控制器
class test_controller{
function __construct(){
//加載數(shù)據(jù)模型
require_once "test_model.php";
$this->view_data();}
//顯示控制部分,通過(guò)數(shù)據(jù)模型獲取數(shù)據(jù)并顯示到視圖中
public function view_data(){
$data_model = new test_model();
/*通過(guò)數(shù)據(jù)模型類(lèi)的view_data方法制作出來(lái)的數(shù)據(jù)放到變量中*/
$view_data = $data_model->view_data();
//通過(guò)加載視圖文件,將數(shù)據(jù)顯示到視圖中
require_once "test_view.php";}
}?>
3 視圖和首頁(yè)設(shè)計(jì)
視圖是顯示數(shù)據(jù)的部分,只需要使用html編寫(xiě)規(guī)范設(shè)計(jì)網(wǎng)頁(yè)就可以了。而首頁(yè)index.php里加載并調(diào)用控制器就可以了。
test_view.php部分:
var _userid = '';var _siteid =2230;var _istoken = 1;var _model = 'Model03'; WebPageSpeed =453; UrchinTrack();
index.php部分:
//加載控制器
require_once “test_controller.php";
//實(shí)例化控制器類(lèi)
$test = new test_controller();
?>
至此,所有的代碼部分全部編寫(xiě)完成,并通過(guò)了測(cè)試。本文中使用了變量形式的數(shù)據(jù),如果需要連接到數(shù)據(jù)庫(kù),那么須在數(shù)據(jù)模型文件中添加連接數(shù)據(jù)庫(kù)的代碼,如果建立更多的功能,可以先建立父類(lèi),再去建立具體功能子類(lèi)繼承父類(lèi),這樣就可以更好的減少代碼冗余,提高編寫(xiě)和維護(hù)效率。
參考文獻(xiàn):
[1]斯克拉(美).PHP經(jīng)典實(shí)例[M].中國(guó)電力出版社,2009.
篇3
關(guān)鍵詞:Struts,MVC,OA
為了提高應(yīng)用系統(tǒng)中組件的重用能力和事務(wù)控制的靈活性,越來(lái)越多的開(kāi)發(fā)人員采用MVC設(shè)計(jì)模式來(lái)分離系統(tǒng)的用戶界面、業(yè)務(wù)邏輯及業(yè)務(wù)控制[1~3]。Struts框架結(jié)構(gòu)是MVC設(shè)計(jì)模式的一種具體實(shí)現(xiàn),它為Web應(yīng)用提供了一個(gè)通用的框架,使得開(kāi)發(fā)人員可以把精力集中在如何解決實(shí)際業(yè)務(wù)問(wèn)題上。此外,Struts框架提供了許多可供擴(kuò)展和定制的技術(shù),使得應(yīng)用程序可以方便地?cái)U(kuò)展框架,更好地適應(yīng)用戶的實(shí)際需求。本文首先介紹了MVC模式的基本思想及Struts的工作原理,并以網(wǎng)上辦公系統(tǒng)為例,詳細(xì)地說(shuō)明了基于Struts框架進(jìn)行信息管理系統(tǒng)開(kāi)發(fā)的方法與思路。
1 Struts框架
Struts是Apache軟件基金的一個(gè)開(kāi)源項(xiàng)目,是基于MVC設(shè)計(jì)模式構(gòu)建Java Web應(yīng)用程序的框架[4]。Struts框架在構(gòu)建復(fù)雜的Web應(yīng)用時(shí),允許把應(yīng)用程序的業(yè)務(wù)邏輯、控制邏輯和表現(xiàn)邏輯進(jìn)行分離MVC,從而提高系統(tǒng)靈活性、重用性和可維護(hù)性,進(jìn)而簡(jiǎn)化Web應(yīng)用程序的開(kāi)發(fā)。
1.1 MVC模式
MVC是80年代Smalltalk中使用的一種軟件模式,目前已經(jīng)被廣泛使用,是J2EE平臺(tái)上推薦使用的設(shè)計(jì)模式[5]。該模式將應(yīng)用系統(tǒng)的輸入、處理和輸出按照Model、View和Controller的方式進(jìn)行徹底的分離,因此應(yīng)用系統(tǒng)就被分為了三個(gè)核心部分:模型、視圖和控制器,它們各自處理各自的事務(wù)。
(1)模型(Model):它代表的是應(yīng)用的業(yè)務(wù)邏輯,可以對(duì)業(yè)務(wù)流程、狀態(tài)處理和業(yè)務(wù)規(guī)則的進(jìn)行制定。業(yè)務(wù)流程的處理過(guò)程對(duì)其它部分來(lái)說(shuō)是黑箱操作,模型接受視圖請(qǐng)求的數(shù)據(jù),并返回最終的處理結(jié)果。業(yè)務(wù)模型的設(shè)計(jì)可以說(shuō)是MVC最主要的核心。
(2)視圖(View):它代表的是應(yīng)用的表示,是與用戶交互的部分。它一般進(jìn)行數(shù)據(jù)的采集,并把數(shù)據(jù)交給其它部分處理。
(3)控制器(Controller): 它位于模型與視圖之間,控制著它們之間的交互處理過(guò)程。控制器把客戶端來(lái)的請(qǐng)求轉(zhuǎn)換成模型能夠理解和執(zhí)行的請(qǐng)求,并且根據(jù)請(qǐng)求選擇處理的模型,接著根據(jù)執(zhí)行結(jié)果決定下一次顯示的視圖。
圖1描述了模型、視圖和控制器三者之間的關(guān)系。在應(yīng)用系統(tǒng)開(kāi)發(fā)過(guò)程中,通過(guò)該設(shè)計(jì)模式可以將業(yè)務(wù)邏輯、控制邏輯和表現(xiàn)邏輯分別用用不同的組件實(shí)現(xiàn),以提高代碼的重用性和可維護(hù)性。
圖1 MVC模式圖
1.2 Struts工作原理
Struts是一個(gè)開(kāi)放資源框架,是MVC設(shè)計(jì)模式的一個(gè)實(shí)現(xiàn),由一組相互協(xié)作的類(lèi)、Servlet以及JSP標(biāo)簽庫(kù)組成。Struts 的體系結(jié)構(gòu)將Model、View、Controller 分別映射到 Web 應(yīng)用中的組件。在Struts中Model由Action和ActionForm對(duì)象來(lái)實(shí)現(xiàn),所有的Action處理器對(duì)象都是Action類(lèi)的子類(lèi),Action處理器對(duì)象封裝了具體的處理邏輯MVC,調(diào)用業(yè)務(wù)邏輯模塊,并且把響應(yīng)提交到相關(guān)的View組件以產(chǎn)生響應(yīng)。通過(guò)ActionForm組件對(duì)象實(shí)現(xiàn)了對(duì)View和Model基本的控制器組件是ActionServlet,但是對(duì)于業(yè)務(wù)邏輯的操作則主要由Action、ActionMapping和ActionForward這幾個(gè)組件協(xié)調(diào)完成。其中Action扮演了真正的業(yè)務(wù)邏輯的實(shí)現(xiàn)者,或者說(shuō)是業(yè)務(wù)邏輯調(diào)用的接口;而ActionMapping和ActionForward則制定了不同業(yè)務(wù)邏輯或流程的運(yùn)行方向[ 6],其工作原理如圖2所示。
圖2 Struts 的工作原理
2 網(wǎng)上辦公系統(tǒng)的實(shí)現(xiàn)
2.1 系統(tǒng)介紹
網(wǎng)上辦公系統(tǒng)是為幫助企事業(yè)單位內(nèi)部員工更好地進(jìn)行合作或更有效地工作而設(shè)計(jì)的,旨在實(shí)現(xiàn)企事業(yè)單位內(nèi)部的無(wú)紙化辦公。由于不同單位所需辦公系統(tǒng)功能的不同,在此我們選取了網(wǎng)上辦公系統(tǒng)中通用的幾個(gè)模塊進(jìn)行了實(shí)現(xiàn),主要包括:文件夾、待辦事項(xiàng)、通訊錄、日程安排、文件柜、電子公告、用戶設(shè)置和系統(tǒng)管理等模塊。
2.2 系統(tǒng)實(shí)現(xiàn)
由于系統(tǒng)各功能的實(shí)現(xiàn)無(wú)論是在步驟上,還是在方法上都是大同小異,所以在此以用戶登錄為例詳細(xì)說(shuō)明該系統(tǒng)的實(shí)現(xiàn)方法及思路。在登錄窗口當(dāng)用戶輸入用戶名和密碼,點(diǎn)擊“登錄”按鈕,即向 Controller 發(fā)出一個(gè) HTTP 請(qǐng)求。用戶輸入的表單參數(shù)將以LoginForm的形式封裝提交到 ActionForward。這個(gè)ActionForward調(diào)用相應(yīng)的 login 執(zhí)行業(yè)務(wù)邏輯,完成用戶登錄功能。以下是登錄功能的具體實(shí)現(xiàn)過(guò)程:
首先,編寫(xiě)登錄相關(guān)的業(yè)務(wù)邏輯代碼,其具體代碼如下所示:
public int login(String uid,String pwd)throws OAServiceException{
Session session=null;
Transaction tx=null;
Query query1=null;
Query query2=null;
int result=1;
try {
session=HibernateUtil.getSession();
tx=session.beginTransaction();
query1=session.createQuery('from User u where u.uid=:vUid');
query1.setParameter('vUid',uid);
if(query1.uniqueResult()==null) return 1;
query2=session.createQuery('from User u where u.uid=:vUid andu.password=:vPwd');
query2.setParameter('vUid',uid);
query2.setParameter('vPwd',pwd);
User u=(User) query2.uniqueResult();
tx.commit();
return((u==null)?2:3);
} catch (Exception e) {
rollBack(tx);
}finally{
closeSession(session);}
return result;}
然后,編寫(xiě)登錄要用到的ActionForm類(lèi):
package com.lanyu.oa.form;
……
public class LoginForm extends ActionForm {
private String uid;
private String password;
……
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {
ActionErrors errors=new ActionErrors();
if(uid.length()<1)
errors.add(ActionErrors.GLOBAL_ERROR,newActionError('errors.uid.required'));
if(password.length()<1)
errors.add(ActionErrors.GLOBAL_ERROR,newActionError('errors.password.required'));
return errors;}
}
接著,編寫(xiě)登錄相關(guān)的Action類(lèi)以及相應(yīng)的方法,登錄相關(guān)的Action類(lèi)為com.lanyu.oa.action.UserAction.java,以下是完成登錄功能的代碼片斷:
public ActionForward login(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,HttpServletResponse response) {
ActionForward forward=null;
String msg=null;
Useru=null;
intresult=0;
LoginForm form=(LoginForm) actionForm;
String uid=form.getUid();
String pwd=form.getPassword();
try {
result=service.login(uid,pwd);
u=service.getUser(uid);
} catch (OAServiceException e) {}
if(u==null)result=2;
forward=processResult(result,msg);
return forward;
}
最后,在配置文件中添加與登錄相關(guān)的配置。具體步驟如下:
(1) 在Struts的配置文件中找到<form-beans>標(biāo)簽MVC,在此標(biāo)簽下添加子標(biāo)簽<form-bean>。其具體內(nèi)容如下:
<form-beans>
……
<form-bean name='LoginForm' type='com.lanyu.oa.form.LoginForm'/>
……
</form-beans>
(2) 在Struts的配置文件中找到<ActionMappings>標(biāo)簽,在此標(biāo)簽下添加<action>子元素以及相關(guān)的局部<forward>標(biāo)簽。其具體內(nèi)容如下:
<actionpath='/User/login' parameter='method' type='com.lanyu.oa.action.UserAction'
name='LoginForm'input='/login.jsp' scope='request'>
<forward name='success' path='main.page' redirect='true'/>
</action>
(3)由于本系統(tǒng)中使用了tiles,因此還得在tiles-defs.xml文件中添加相應(yīng)的配置。
登錄模塊的運(yùn)行界面如圖3所示,如果登錄成功,則進(jìn)入系統(tǒng),系統(tǒng)登錄成功的主界面如圖4所示。
圖3 用戶登錄界
圖4 系統(tǒng)主界面
3 結(jié)束語(yǔ)
Struts作為一種有效的進(jìn)行Web應(yīng)用開(kāi)發(fā)的框架,充分利用了MVC模式的優(yōu)點(diǎn)。應(yīng)用Struts框架構(gòu)建網(wǎng)上辦公系統(tǒng)很好地實(shí)現(xiàn)了業(yè)務(wù)邏輯與表示邏輯的分離,大大簡(jiǎn)化系統(tǒng)開(kāi)發(fā)的難度。尤其是各層邏輯組件的同時(shí)開(kāi)發(fā),縮短了開(kāi)發(fā)周期,其靈活的、大量豐富的標(biāo)記庫(kù)語(yǔ)言大大提高了開(kāi)發(fā)效率,而且應(yīng)用Struts框架構(gòu)建的Web應(yīng)用系統(tǒng),具有良好的可重用性、可維護(hù)性和可擴(kuò)展性。
參考文獻(xiàn)
[1]石海鵬.基于MVC模式的J2EE應(yīng)用研究與開(kāi)發(fā):[碩士學(xué)位論文]. 江西:江西師范大學(xué), 2004.
[2]馬黎明.基于J2EE平臺(tái)的Web應(yīng)用系統(tǒng)研究:[ 碩士學(xué)位論文]. 武漢:武漢理工大學(xué), 2004.
[3]孫衛(wèi)琴.精通Hibernate:Java對(duì)象持久化技術(shù)詳解[M]. 北京:電子工業(yè)出版社, 2005.9
[4]Erich Gamma. J2EE構(gòu)建企業(yè)系統(tǒng)[M]. 北京:清華大學(xué)出版社, 2001
[5]James Holmes著, 孫燕等譯. Struts程序員查詢辭典[M]. 北京:中國(guó)鐵道出版社, 2005
[6](美)Ted Husted. 實(shí)戰(zhàn)Struts[M].北京:機(jī)械工業(yè)出版社,2005.5
篇4
隨著互聯(lián)網(wǎng)寬帶技術(shù)應(yīng)用的成熟,以及物流和支付系統(tǒng)的完善,電子商務(wù)成為互聯(lián)網(wǎng)普及應(yīng)用的主流,影響著千家萬(wàn)戶的生活和經(jīng)濟(jì)行為,并日益成為社會(huì)商業(yè)活動(dòng)的重要形式。因此,各行業(yè)均希望可以快速展開(kāi)網(wǎng)上營(yíng)銷(xiāo)渠道。新形式下,電商網(wǎng)站開(kāi)發(fā)人員如何縮短開(kāi)發(fā)周期,進(jìn)一步提高工作效率,是每一個(gè)程序員所面臨的問(wèn)題。各大WEB框架的出現(xiàn),使得電商網(wǎng)站服務(wù)器端邏輯的設(shè)計(jì)非常便利,利用它進(jìn)行網(wǎng)站的開(kāi)發(fā),可以節(jié)省很多的時(shí)間和精力。本文基于Spring MVC來(lái)構(gòu)建一個(gè)電子商務(wù)網(wǎng)站,希望可以對(duì)讀者學(xué)習(xí)和使用Spring MVC建站產(chǎn)生一些幫助。
2 網(wǎng)上電商平臺(tái)Estore(Online electric business
platform estore)
2.1 Estore簡(jiǎn)介
Estore是采用Java技術(shù)設(shè)計(jì)開(kāi)發(fā)的網(wǎng)上電子商務(wù)平臺(tái),采用了Spring MVC3、Hibernate3和Freemarker相結(jié)合的技術(shù)架構(gòu)。繼承了Java高效、跨平臺(tái)、穩(wěn)定且安全等多方面的優(yōu)點(diǎn)[1],能夠支持Oracle、Sqlserver、Mysql等數(shù)據(jù)庫(kù),統(tǒng)一在后臺(tái)管理網(wǎng)站的模板,用戶可利用標(biāo)簽自定義顯示內(nèi)容和方式。
2.2 Estore的運(yùn)行環(huán)境
Estore原則上支持全系列JAVA運(yùn)行環(huán)境、數(shù)據(jù)庫(kù),主要使用以下環(huán)境:
(1)WEB服務(wù)器:Weblogic、Tomcat、WebSphere、JBoss等。
(2)數(shù)據(jù)庫(kù)服務(wù)器:Oracle、Mysql、SqlServer、DB2等。
(3)操作系統(tǒng):Windows、Linux、Unix等。
3 基于Spring MVC的電商平臺(tái)的設(shè)計(jì)與開(kāi)發(fā)
(The design and development of electric business
platform based on the spring MVC )
3.1 Spring MVC簡(jiǎn)介
3.1.1 Spring MVC架構(gòu)
Spring MVC的整體架構(gòu)如圖1所示[2],視圖層采用Html或Jsp實(shí)現(xiàn);控制層采用Servlet實(shí)現(xiàn),整個(gè)框架采用同一個(gè)Servlet,以實(shí)現(xiàn)請(qǐng)求的中轉(zhuǎn);模型層采用Java實(shí)現(xiàn),主要決定用來(lái)做什么;在模型層后面添加了一個(gè)DAO,目的是將決定做什么和具體怎么做分開(kāi)。
圖1 Spring MVC的架構(gòu)
Fig.1 The architecture of spring MVC
整個(gè)Web框架大致的流程是:首先客戶端發(fā)送請(qǐng)求,提交Html或Jsp頁(yè)面給中轉(zhuǎn)器(Servlet);中轉(zhuǎn)器按照客戶的請(qǐng)求,選擇相應(yīng)的模型層,即Logic進(jìn)行相應(yīng)的邏輯處理;如果需要使用數(shù)據(jù)庫(kù),則通過(guò)DAO進(jìn)行相應(yīng)的數(shù)據(jù)庫(kù)操作。
3.1.2 Spring MVC重要組件
圖2 Spring MVC的組件
Fig.2 The component of spring MVC
Spring MVC的組件如圖2所示[3]。
(1)Spring MVC將所有的請(qǐng)求都提交給DispatcherServlet,它會(huì)委托應(yīng)用系統(tǒng)的其他模塊負(fù)責(zé)對(duì)請(qǐng)求進(jìn)行真正的處理工作。
(2)DispatcherServlet查詢一個(gè)或多個(gè)HandlerMapping,找到處理請(qǐng)求的Controller。
(3)DispatcherServlet把請(qǐng)求提交到目標(biāo)Controller。
(4)Controller進(jìn)行業(yè)務(wù)邏輯處理后,會(huì)返回一個(gè)ModelAndView。
(5)Dispathcher查詢一個(gè)或多個(gè)ViewResolver視圖解析器,找到ModelAndView對(duì)象指定的視圖對(duì)象。
(6)視圖對(duì)象負(fù)責(zé)渲染并返回給客戶端。
3.2 Hibernate框架
3.2.1 Hibernate簡(jiǎn)介
Hibernate是一個(gè)開(kāi)源免費(fèi)的Java包,它使得程序與數(shù)據(jù)庫(kù)的交互變得十分容易,更加符合面向?qū)ο蟮脑O(shè)計(jì)思想[4]。Hibernate使開(kāi)發(fā)者可以專(zhuān)注于應(yīng)用程序的對(duì)象和功能,而不用關(guān)心如何保存它們或查找這些對(duì)象。
在對(duì)SQL語(yǔ)句完全不了解的情況下,使用Hibernate仍然可以開(kāi)發(fā)出優(yōu)秀的包含數(shù)據(jù)庫(kù)訪問(wèn)的應(yīng)用程序。
3.2.2 Hibernate運(yùn)行過(guò)程
圖3 Hibernate運(yùn)行過(guò)程
Fig.3 The running process of hibernate
Hibernate的運(yùn)行過(guò)程如圖3所示。
應(yīng)用程序先調(diào)用Configuration類(lèi),該類(lèi)讀取Hibernate配置文件及映射文件中的信息,并用這些信息生成一個(gè)SessionFactory對(duì)象,然后從SessionFactory對(duì)象生成一個(gè)Session對(duì)象,并用Session對(duì)象生成Transaction對(duì)象??赏ㄟ^(guò)Session對(duì)象的get()、load()、save()、update()、delete()和saveOrUpdate()等方法對(duì)PO(persistent object持久對(duì)象)進(jìn)行加載、保存、更新、刪除等操作。
在查詢的情況下,可通過(guò)Session對(duì)象生成一個(gè)Query對(duì)象,然后利用Query對(duì)象執(zhí)行查詢操作:如果沒(méi)有異常,Transaction對(duì)象將提交這些操作到數(shù)據(jù)庫(kù)中;如果有異常,則執(zhí)行回滾操作。
3.3 Freemarker簡(jiǎn)介
FreeMarker是一個(gè)模板引擎[5],它由Java語(yǔ)言編寫(xiě)而成,基于模板來(lái)生成文本輸出。FreeMarker與Web容器沒(méi)有關(guān)系,即Web運(yùn)行時(shí),并不知道HTTP或Servlet。它不僅能夠用于表現(xiàn)層的實(shí)現(xiàn),而且還可以用于生成Xml、Jsp或Java等。FreeMarker允許Java servlet保持圖形設(shè)計(jì)與應(yīng)用程序邏輯的分離,這是通過(guò)在模板中封裝Html完成的。模板用Servlet提供的數(shù)據(jù)動(dòng)態(tài)地生成Html。模板語(yǔ)言是直觀且強(qiáng)大的,編譯器的速度快,輸出接近靜態(tài)HTML頁(yè)面的速度。
雖然FreeMarker具有一些編程的能力,但通常由Java程序負(fù)責(zé)要顯示的數(shù)據(jù),由FreeMarker生成頁(yè)面,通過(guò)模板來(lái)顯示數(shù)據(jù)。
下面是用Freemarker來(lái)做的一個(gè)顯示頁(yè)面:
[@post_list]
[#list tag_list as post]
[#list post.types as tlist]
[#if tlist.name == "首頁(yè)"]
[/#if]
[/#list]
[/#list]
[/@post_list]
3.4 按Spring MVC框架分層設(shè)計(jì)電商平臺(tái)
3.4.1 Dao層
Dao層分析模塊所要涉及的表,確定表之間的關(guān)系,編寫(xiě)Hibernate Mapping文件和持久化類(lèi),它使用Hibernate連接數(shù)據(jù)庫(kù)、操作數(shù)據(jù)庫(kù)(增刪改查)。根據(jù)模塊需要的各種持久化操作,確定對(duì)應(yīng)的方法,據(jù)此來(lái)編寫(xiě)Dao接口和實(shí)現(xiàn)類(lèi)。
3.4.2 Entity層
Entity層是實(shí)體類(lèi)層,也屬于MVC中的model層,它的主要功能是把用戶提交過(guò)來(lái)的參數(shù)封裝成一個(gè)對(duì)象給Dao層也就是Hibernate操作。
3.4.3 Service層
引用對(duì)應(yīng)的Dao數(shù)據(jù)庫(kù)操作,在這里可以編寫(xiě)自己需要的代碼(比如簡(jiǎn)單的判斷、校驗(yàn)等操作)。
3.4.4 Action層
引用對(duì)應(yīng)的Service層,在這里依據(jù)配置文件,跳轉(zhuǎn)到指定的頁(yè)面,當(dāng)然也能接受頁(yè)面?zhèn)鬟f的請(qǐng)求數(shù)據(jù),也可以做些計(jì) 算處理。
3.4.5 顯示層
一個(gè)或多個(gè)HTML頁(yè)面為模型提供數(shù)據(jù)顯示,HTML頁(yè)面主要使用HTML標(biāo)記和Freemarker標(biāo)簽來(lái)顯示數(shù)據(jù)。
綜上所述,各層之間的關(guān)系為:action調(diào)用service中的方法,service調(diào)用dao中的方法,調(diào)用時(shí)的參數(shù)使用entity傳遞,最后把結(jié)果顯示在HTML界面,以響應(yīng)用戶請(qǐng)求。
4 Estore的個(gè)性化功能(Personalization capabilities
of estore )
4.1 Estore標(biāo)簽的執(zhí)行流程
標(biāo)簽是Estore中的一個(gè)重要概念,利用它可以執(zhí)行許多操作,比如對(duì)搜索結(jié)果分頁(yè)、獲得商品品牌的列表、獲得商品子欄目的列表等,它的執(zhí)行流程如下:
(1)訪問(wèn)某個(gè)頁(yè)面(如:頁(yè)頭導(dǎo)航欄.html),瀏覽器執(zhí)行解析代碼,執(zhí)行到標(biāo)簽時(shí)跳轉(zhuǎn)到后臺(tái)estore-context.xml文件。
(2)estore-context.xml文件中,假如有,在里面找標(biāo)簽對(duì)應(yīng)的class文件(如shop_Category),再找對(duì)應(yīng)的*.java文件。
(3)到后臺(tái)執(zhí)行CategoryListDirective類(lèi)中默認(rèn)方法execute(如:[@shop_Category parentId=category.id],參數(shù):父類(lèi)別ID parentId)。
(4)CategoryListDirective類(lèi)鏈接數(shù)據(jù)庫(kù),獲取目標(biāo)數(shù)據(jù)并放入Map集合:
如:Map origMap = DirectiveUtils.addParamsToVariable(env, paramsWrap)。
(5)將獲取的目標(biāo)數(shù)據(jù)返回給前臺(tái),通過(guò)標(biāo)簽展示:
[@shop_Category]
首頁(yè)
[#list tag_list as ctg]
${ctg.name}
[/#list]
[/@shop_Category]
4.2 制作“商業(yè)廣告位”
一幅色彩絢麗、形象生動(dòng)的廣告作品,能以其非同凡響的美感力量增強(qiáng)廣告的感染力,使消費(fèi)者沉浸在商品和服務(wù)形象給予的愉悅中,使其自覺(jué)接受廣告的引導(dǎo)。在Estore平臺(tái)上,可以為網(wǎng)站的首頁(yè)添加一個(gè)“商業(yè)廣告位”,具體步驟如下:
(1)在系統(tǒng)后臺(tái)的“輔助”中的菜單“廣告版位”,添加一個(gè)“版位”,(如:頁(yè)中廣告)。
注意:記錄下此時(shí)的“ID”(如ID=6)。
(2)“廣告管理”中,修改“頁(yè)中廣告”,選擇圖片之后,改一下圖片地址,去掉“/u”(如:把‘/u/201403/231829044ug5.jpg’變?yōu)?lsquo;/201403/231829044ug5.jpg’)。
(3)在“\WEB-INF\t\store\tpl\include\”下,新建文件“頁(yè)中廣告位.html”,內(nèi)容如下:
注意:此處的ID,其值取自第(1)步中的ID。
(4)在“首頁(yè)”相應(yīng)的廣告位置,加入如下語(yǔ)句:[#include "../include/頁(yè)中廣告位.html"/]。
至此,即在網(wǎng)站首頁(yè)添加了一個(gè)“商業(yè)廣告位”,根據(jù)客戶的需求,只需要更改后臺(tái)的廣告圖片,即可在網(wǎng)站首頁(yè)看到客戶的廣告宣傳。
4.3 Estore的后臺(tái)處理流程
當(dāng)用戶剛接觸Estore時(shí),可能對(duì)其后臺(tái)的處理流程有點(diǎn)頭痛,不知道應(yīng)該如何學(xué)習(xí),常常會(huì)感覺(jué)到無(wú)從下手,本文以訪問(wèn)后臺(tái)的主界面為例,特在此做出一個(gè)簡(jiǎn)要的介紹,用戶可以按照以下步驟來(lái)了解其處理過(guò)程:
(1)用戶查看瀏覽器端的訪問(wèn)請(qǐng)求路徑,看要訪問(wèn)資源的后綴名,如“localhost:8080/storeOracle/eadmin/estore/index.do”的后綴名為“*.do”。
注意:“eadmin/estore/”是虛擬訪問(wèn)路徑,它在web.xml中設(shè)置。
(2)web.xml文件的重要標(biāo)簽:
EStoreAdmin
/eadmin/estore/*
注意:①因?yàn)閿U(kuò)展名為“.do”,所以找到值為“/eadmin/estore/*”的。
②“eadmin/estore/”是虛擬訪問(wèn)路徑,在此處設(shè)置。
(3)去所有的action文件里找到相應(yīng)“@RequestMapping”的value等于“index.do”的方法,看該方法返回什么字符串(如:“login”)。
(4)去estore-servlet-admin.xml中找到id="freemarkerViewResolver"的bean,該bean中name分別為“prefix”、“suffix”的標(biāo)簽的value的值,正好和步驟(3)中的“login”組成文件名“/estore _sys/login.html”;系統(tǒng)將此頁(yè)面返回,用戶即可直接訪問(wèn)。
(5)登錄頁(yè)login.html會(huì)向名叫“index.do”的action發(fā)送請(qǐng)求,按照步驟(3)和(4)操作后,可以直接訪問(wèn)文件“/estore_sys/index.html”。
(6)文件“/estore_sys/index.html”里嵌套有“主體框架”:
(7)在main.html里,又有左右兩部分frame:
至此,Estore系統(tǒng)后臺(tái)的主界面全部形成。
5 結(jié)論(Conclusion)
通過(guò)研究可以證明,利用Spring MVC可以快速地開(kāi)發(fā)一個(gè)具有良好架構(gòu)的電子商務(wù)網(wǎng)站,并且易于維護(hù)、支持?jǐn)U展,這大大地提高了建站的效率,節(jié)省了大量的時(shí)間和精力。同時(shí),電子商務(wù)網(wǎng)站的開(kāi)發(fā)還應(yīng)考慮安全支付、快速物流等問(wèn)題,這是今后需要研究的對(duì)象。
參考文獻(xiàn)(References)
[1] Java 2 Platform,Enterprise Edition Specification Version l.2[EB/0L].java.sun.com/J2ee/docus.Htm,2014-05-23.
[2] 陸榮幸,等.J2EE平臺(tái)上MVC設(shè)計(jì)模式的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2003,3:144-146.
[3] 何成萬(wàn),余秋惠.MVC模型2及軟件框架Struts的研究[J].計(jì)算機(jī)工程,2002,6:274-281.
[4] 高昂,衛(wèi)文學(xué).基于Hibernate與Struts框架的數(shù)據(jù)持久化應(yīng)用研究[J].計(jì)算機(jī)應(yīng)用,2005,12:2817-2820.
[5] 冷威龍.Freemarker[EB/OL].baike.baidu.com/view/1278430.htm,2014-05-23.
作者簡(jiǎn)介:
岳紹敏(1988-),男,碩士研究生在讀.研究領(lǐng)域:智能系統(tǒng).
王國(guó)春(1978-),男,碩士,講師.研究領(lǐng)域:軟件工程與智能系統(tǒng).
篇5
關(guān)鍵詞:MVC 模型數(shù)據(jù)綁定 數(shù)據(jù)篡改
中圖分類(lèi)號(hào):TP393.4 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2016)04-0000-00
1 概述
.NET MVC框架的出現(xiàn)對(duì)發(fā)展起到了巨大的推動(dòng)作用,它顛覆了傳統(tǒng)通過(guò)CodeBehind技術(shù)將程序界面aspx文件與邏輯代碼vb文件或cs文件分離,由于基于Model(模型)、View(視圖)和Controller(控制器)的架構(gòu)模式,使得開(kāi)發(fā)者能夠更加清晰地表達(dá)業(yè)務(wù)邏輯。模型是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分,通常模型對(duì)象負(fù)責(zé)在數(shù)據(jù)庫(kù)中存取數(shù)據(jù)。視圖是應(yīng)用程序中處理數(shù)據(jù)顯示的部分,通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的??刂破魇菓?yīng)用程序中處理用戶交互的部分,通??刂破髫?fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)[1]。在Web開(kāi)發(fā)中,表單的應(yīng)用是十分廣泛的。用戶的注冊(cè)、登錄、修改信息等業(yè)務(wù)都需要通過(guò)表單來(lái)實(shí)現(xiàn),表單的內(nèi)容則會(huì)被提交到服務(wù)端進(jìn)行處理,因此,表單數(shù)據(jù)的安全性極為重要。這里所說(shuō)的安全性包括兩個(gè)層面,一個(gè)層面是數(shù)據(jù)本身是否符合指定的范圍或格式,另外一個(gè)層面是數(shù)據(jù)是否被篡改。本文討論的是后者,即表單數(shù)據(jù)如何防止被篡改[2]。
2 表單模型數(shù)據(jù)綁定和篡改
.NET MVC框架的應(yīng)用給我們帶來(lái)了很多便利,數(shù)據(jù)模型的綁定讓我們快速形成視圖,而不必糾結(jié)HTML界面和業(yè)務(wù)邏輯之間來(lái)回傳值。Html.TextBoxFor、Html.DropDownListFor等方法為模型和HTML表單控件提供了雙向綁定,這種綁定無(wú)疑把我們從Request和HTML標(biāo)簽中解放出來(lái)。圖1是MVC框架中各組件之間的關(guān)系,其中模型和視圖之間的關(guān)系是通過(guò)綁定來(lái)實(shí)現(xiàn),模型信息的改變通過(guò)綁定傳遞數(shù)據(jù)到視圖;視圖則通過(guò)對(duì)表單進(jìn)行操作從而獲取或修改模型信息。
一般情況下,上述模型數(shù)據(jù)的綁定是相對(duì)安全的,可以通過(guò)表單的客戶端驗(yàn)證和服務(wù)端驗(yàn)證進(jìn)行控制。但在有些情況下,篡改的表單數(shù)據(jù)通過(guò)了表單客戶端驗(yàn)證和服務(wù)端驗(yàn)證,這樣會(huì)對(duì)系統(tǒng)的安全產(chǎn)生很大的威脅。
圖2所示通過(guò)將模型綁定數(shù)據(jù)到表單控件,用戶名被設(shè)置成為不可修改,后臺(tái)用戶名為主鍵,在此,只能對(duì)用戶姓名和用戶類(lèi)型進(jìn)行修改,用戶名對(duì)應(yīng)的表單控件代碼在紅色矩形框中標(biāo)識(shí)。
通常情況下,上述修改用戶姓名和用戶類(lèi)型是安全的,但通過(guò)Chrome瀏覽器的開(kāi)發(fā)者工具、Firebug頁(yè)面調(diào)試工具等可以對(duì)頁(yè)面內(nèi)容進(jìn)行篡改。如圖3所示,通過(guò)工具對(duì)用戶名表單控件進(jìn)行修改,去掉表單控件的disabled屬性,將用戶名的value修改為lisi。這樣以來(lái),表單提交的數(shù)據(jù)修改的是lisi用戶的信息。通過(guò)這種方式,無(wú)形中借用了zhangsan的權(quán)限修改了lisi的信息,這種潛在的“漏洞”給用戶數(shù)據(jù)帶來(lái)的巨大的威脅。
3 處理方法
上述問(wèn)題的根本原因在于客戶端數(shù)據(jù)的不可信性。解決的辦法可以在進(jìn)入用戶信息編輯表單時(shí)將用戶名記錄到Session中,這樣即使客戶端對(duì)用戶名進(jìn)行修改了,也不會(huì)對(duì)Session中的用戶名進(jìn)行修改,最后提交表單的時(shí)候,我們只是獲取表單的姓名和用戶類(lèi)型信息,用戶名從Session中讀取,表單中的用戶名只是給客戶端起到一個(gè)展示的作用。
4 結(jié)語(yǔ)
在日益復(fù)雜的Web應(yīng)用中,各種各樣的框架以及技術(shù)給我們的開(kāi)發(fā)工作帶來(lái)了極大的便利,然而在獲取這些便利的同時(shí),我們更應(yīng)該思考應(yīng)用技術(shù)過(guò)程中隱含的“副作用”。在快速構(gòu)建Web應(yīng)用程序的過(guò)程中,客戶的體驗(yàn)、數(shù)據(jù)的安全性、應(yīng)用的穩(wěn)定性等都是不能忽視的方面。
參考文獻(xiàn)
[1] Jon Galloway,Phil Haack,Brad Wilson,K. Scott Allen 著.孫遠(yuǎn)帥 譯. MVC 3高級(jí)編程[M].清華大學(xué)出版社,2012.
[2] 張炳帥 著.Web安全深度剖析[M].電子工業(yè)出版社,2015.
篇6
關(guān)鍵詞:MVC;MVP;MVVM
1MVC框架
MVC(Model View Controller)是把軟件系統(tǒng)分為模型、視圖、控制器3個(gè)基本部分。M是指數(shù)據(jù)模型,V是指用戶界面,c則是控制器。使用MVC的目的是將M和V的實(shí)現(xiàn)代碼分離,從而使同一個(gè)程序可以使用不同的表現(xiàn)形式。比如一批統(tǒng)計(jì)數(shù)據(jù)可以分別用柱狀圖、餅圖來(lái)表示。C存在的目的則是確保M和V的同步,一旦M改變,V應(yīng)該同步更新。
圖1為Java實(shí)現(xiàn)的MVC模型,Java MVC模式是將Servlet,Jsp和JavaBean結(jié)合起來(lái)的技術(shù)。Servlet適合數(shù)據(jù)處理,JavaBean用于模型,而Jsp適合顯示。這個(gè)模式充分發(fā)揮了每項(xiàng)技術(shù)的優(yōu)點(diǎn)。
在早期的WEB開(kāi)發(fā)中,因?yàn)闃I(yè)務(wù)比較簡(jiǎn)單,并沒(méi)有這3層的劃分。用戶數(shù)據(jù)的呈現(xiàn)及輸入的接收、封裝、驗(yàn)證、處理、以及對(duì)數(shù)據(jù)庫(kù)的操作,都放在Jsp頁(yè)面中。隨著業(yè)務(wù)越來(lái)越復(fù)雜,需要考慮更好的利用OOP來(lái)解決問(wèn)題。于是便把業(yè)務(wù)邏輯抽取出來(lái)并形成與顯示和持久化無(wú)關(guān)的一層,能夠讓業(yè)務(wù)邏輯清晰,產(chǎn)品更便于維護(hù)。這就是SUN當(dāng)初倡導(dǎo)的JSP Model1開(kāi)發(fā)方式。
Modell模式的實(shí)現(xiàn)比較簡(jiǎn)單,適用于快速開(kāi)發(fā)小規(guī)模項(xiàng)目。但從工程化的角度看,局限性非常明顯:JSP頁(yè)面身兼View和Controller2種角色,將控制邏輯和表現(xiàn)邏輯混雜在一起,從而導(dǎo)致代碼的重用性非常低,增加了應(yīng)用的擴(kuò)展性和維護(hù)的難度。
Jsp Model2中引入了MVC框架,使用了3種技術(shù)JSP、Servlet和JavaBeans,Jsp負(fù)責(zé)生成動(dòng)態(tài)網(wǎng)頁(yè),只用做顯示頁(yè)面。Servlet負(fù)責(zé)流程控制,用來(lái)處理各種請(qǐng)求的分派。JavaBeans負(fù)責(zé)業(yè)務(wù)邏輯,對(duì)數(shù)據(jù)庫(kù)的操作。
大部分Web應(yīng)用程序都是用像ASP,PHP,或者JSP來(lái)創(chuàng)建的。造成了數(shù)據(jù)庫(kù)查詢語(yǔ)句這樣的數(shù)據(jù)層代碼和像HTML這樣的表示層代碼混在一起。由經(jīng)驗(yàn)的開(kāi)發(fā)者會(huì)將數(shù)據(jù)從表示層分離開(kāi)來(lái),交由后臺(tái)處理,但這通常不是很容易做到的,它需要精心的計(jì)劃和不斷的嘗試。而使用MVC框架,應(yīng)用程序被分成3個(gè)核心部件:模型、視圖、控制器,各自處理自己的任務(wù)。盡管使用MVC框架需要付出一些額外的工作,但是給人們帶來(lái)的好處是無(wú)庸質(zhì)疑的。
視圖(View)代表用戶交互界面,通常由網(wǎng)頁(yè)組成。在早期WEB開(kāi)發(fā)中,網(wǎng)頁(yè)的數(shù)據(jù)嵌入在頁(yè)面中,無(wú)論頁(yè)面打開(kāi)多少次,頁(yè)面內(nèi)容也不會(huì)發(fā)生變化,這種頁(yè)面稱(chēng)為靜態(tài)網(wǎng)頁(yè)。而MVC框架中View視圖中的數(shù)據(jù)來(lái)源于數(shù)據(jù)庫(kù),隨著數(shù)據(jù)庫(kù)數(shù)據(jù)的變化,頁(yè)面中的數(shù)據(jù)也會(huì)隨著發(fā)生改變,稱(chēng)之為動(dòng)態(tài)網(wǎng)頁(yè),現(xiàn)在比較流行的動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)由Jsp、Asp和Php。Java的MVC模型就是采用的Jsp動(dòng)態(tài)開(kāi)發(fā)技術(shù),因此View的頁(yè)面由jsp網(wǎng)頁(yè)組成。在View層只涉及數(shù)據(jù)的顯示,和數(shù)據(jù)的采集,不涉及視圖的業(yè)務(wù)處理。比如最常見(jiàn)的登錄頁(yè)面,登錄視圖只是把登錄的信息進(jìn)行收集并提交,不對(duì)登錄的信息做判斷。
模型(Model):就是業(yè)務(wù)流程/狀態(tài)的處理以及業(yè)務(wù)規(guī)則的制定。在MVC的3個(gè)部件中,模型擁有最多的處理任務(wù)。視圖中的數(shù)據(jù)由Model來(lái)提供,當(dāng)需要改變視圖中的數(shù)據(jù)時(shí),不需要修改WEB頁(yè)面,只需要修改相應(yīng)的Model即可。MVC框架中Model層的主要關(guān)注點(diǎn)是如何把請(qǐng)求的數(shù)據(jù)自動(dòng)裝配成Action所需要的bean,除此外,框架Model層還可以提供復(fù)合bean自動(dòng)裝配、輸入校驗(yàn)、本地化及國(guó)際化、字符集編碼轉(zhuǎn)換、多重輸出等功能。比如上述的登錄系統(tǒng),就是由Model層來(lái)完成登錄賬號(hào)和密碼的判定。由于應(yīng)用于模型的代碼只需寫(xiě)一次就可以被多個(gè)視圖重用,所以減少了代碼的重復(fù)性。
控制(Controller)接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求。Java MVC中的控制層由Servlet來(lái)實(shí)現(xiàn)??刂茖硬⒉粚?duì)數(shù)據(jù)做處理,而是根據(jù)視圖的提交要球,來(lái)決定調(diào)用相對(duì)應(yīng)的模型。比如上述的登錄系統(tǒng),控制器的作用就是接收View層提交的信息,并把這個(gè)信息傳給對(duì)應(yīng)的Model去處理,然后把處理后的結(jié)果,再返回給View層。
MVC的優(yōu)點(diǎn):(1)可以為一個(gè)模型在運(yùn)行時(shí)同時(shí)建立和使用多個(gè)視圖。變化-傳播機(jī)制可以確保所有相關(guān)的視圖及時(shí)得到模型數(shù)據(jù)變化,從而使所有關(guān)聯(lián)的視圖和控制器做到行為同步。(2)視圖與控制器的可接插性,允許更換視圖和控制器對(duì)象,而且可以根據(jù)需求動(dòng)態(tài)的打開(kāi)或關(guān)閉、甚至在運(yùn)行期間進(jìn)行對(duì)象替換。(3)模型的可移植性。因?yàn)槟P褪仟?dú)立于視圖的,所以可以把一個(gè)模型獨(dú)立地移植到新的平臺(tái)工作。需要做的只是在新平臺(tái)上對(duì)視圖和控制器進(jìn)行新的修改。(4)潛在的框架結(jié)構(gòu)??梢曰诖四P徒?yīng)用程序框架,不僅僅是用在設(shè)計(jì)界面的設(shè)計(jì)中。
MVC的不足體現(xiàn)在以下幾個(gè)方面:(1)MVC并沒(méi)有很明確的定義,所以完全理解MVC并不是很容易。并且內(nèi)部實(shí)現(xiàn)原理比較復(fù)雜和多樣,對(duì)于新手來(lái)說(shuō)需要花費(fèi)一些時(shí)間去思考。(2)視圖與控制器的可接插性,造成模型和視圖的分離,這樣也給調(diào)試應(yīng)用程序帶來(lái)了一定的困難。(3)MVC的實(shí)現(xiàn)比較復(fù)雜,并不適合小型甚至中等規(guī)模的應(yīng)用程序,花費(fèi)大量時(shí)間將MVC應(yīng)用到規(guī)模并不是很大的應(yīng)用程序通常會(huì)得不償失。
2MVP框架
MVC(Model-View-Controller,模型-視圖-控制器)模式是80年代Smalltalk-80出現(xiàn)的一種軟件設(shè)計(jì)模式,后來(lái)得到了廣泛的應(yīng)用,其主要目的在于促進(jìn)應(yīng)用中模型、視圖、控制器間的關(guān)注的清晰分離。MVP(Model-View-Presenter,模型視圖-表示器)模式則是由IBM開(kāi)發(fā)出來(lái)的一個(gè)針對(duì)C++和Java的編程模型,大概出現(xiàn)于2000年,是MVC模式的一個(gè)變種,主要用來(lái)隔離UI、UI邏輯和業(yè)務(wù)邏輯、數(shù)據(jù)。
Model-View-Presenter旨在應(yīng)用程序分層和提高測(cè)試效率,主要目標(biāo)是將顯示邏輯與業(yè)務(wù)邏輯分離,正如設(shè)計(jì)面向?qū)ο蟪绦蛑袆?chuàng)建松散耦合并可重用的對(duì)象。MVP的另一個(gè)目標(biāo)是提高針對(duì)View的測(cè)試效率。編寫(xiě)依賴(lài)Session,ViewState,AJAX,HTML或web控件和業(yè)務(wù)實(shí)體的單元測(cè)試類(lèi)較為復(fù)雜,因此將各視圖的顯示邏輯保留在ASPX/ASCX文件類(lèi)中,并將業(yè)務(wù)邏輯從中分離出來(lái)放在相應(yīng)的類(lèi)中,在MVP中Presenter充當(dāng)視圖和業(yè)務(wù)邏輯的緩沖層。
MVC和MVP的區(qū)別:在MVP里,Presenter把Model層和View層進(jìn)行了完全的分離,View并不直接使用Model,主要的業(yè)務(wù)邏輯在Presenter里實(shí)現(xiàn)。而且,Presenter與具體的View是沒(méi)有直接關(guān)聯(lián)的,而是通過(guò)定義好的接口進(jìn)行交互,從而使得在變更View時(shí)候可以保持Presenter的不變,達(dá)到了重用的效果,而在MVC中View會(huì)從直接Model中讀取數(shù)據(jù)而不是通過(guò)Controlle如圖2所示。
從圖中可以看到,在MVC里,View是可以直接訪問(wèn)Model的,View里會(huì)包含Model信息,因此不可避免的還要包括一些業(yè)務(wù)邏輯。在MVC模型里,更注重業(yè)務(wù)的邏輯,也就是Model的不變,而針對(duì)Model,則有不同的顯示及View。所以,在MVC模型里,View是依賴(lài)于Model的,但是Model不依賴(lài)于View。并且,如果有一些業(yè)務(wù)邏輯在View里實(shí)現(xiàn)了,則導(dǎo)致要更改View也是比較困難的,因?yàn)閂iew中的業(yè)務(wù)邏輯是無(wú)法重用的。
在MVP模式里,View只有簡(jiǎn)單的Set/Get的方法,用來(lái)輸入和設(shè)置界面顯示的內(nèi)容,除此就不應(yīng)該有更多的內(nèi)容,絕不容許直接直接訪問(wèn)Model,而這就是與MVC很大的不同之處。
MVP的優(yōu)點(diǎn):(1)View和Model實(shí)現(xiàn)了完全分離,可以修改View而不影響Model。(2)業(yè)務(wù)邏輯的處理更加集中,便于控制。(3)多個(gè)View可以共用一個(gè)Presener,便于代碼的重用。(4)業(yè)務(wù)邏輯集中在Presenter中,便于進(jìn)行單元測(cè)試。
MVP的缺點(diǎn):由于對(duì)View的控制放在了Presenter中,造成了View和Persenter的交互會(huì)過(guò)于頻繁。這樣會(huì)增加View和Presenter的耦合性,一旦View發(fā)生了變化,Presenter也需要進(jìn)行變化。比如,原來(lái)的Html網(wǎng)頁(yè)顯示的是Word文檔,但是新求需要將Word文檔轉(zhuǎn)換為PDF文檔顯示,那么就需要更改View和Presenter。
3MVVM框架
MVVM是3層架構(gòu),M層(Model實(shí)體層)、V層(View表示層)、VM層(ViewModel層,對(duì)Model層進(jìn)行CRUD進(jìn)行操作,同時(shí)對(duì)V層提供數(shù)據(jù)綁定)。對(duì)這種模式的實(shí)現(xiàn),大部分都是通過(guò)在view層聲明數(shù)據(jù)綁定來(lái)和其他層分離的,這樣就方便了前端開(kāi)發(fā)人員和后端開(kāi)發(fā)人員的分工,前端開(kāi)發(fā)人員在html標(biāo)簽中寫(xiě)對(duì)Viewmodel的綁定數(shù)據(jù),Model和Viewmodel是后端開(kāi)發(fā)人員通過(guò)開(kāi)發(fā)應(yīng)用的邏輯來(lái)維護(hù)這兩層。
最近幾年,MVVM模式在Javascript中開(kāi)始有人實(shí)現(xiàn),目前比較成熟的框架有KnockoutJS,Avalon MVVM和Knockback.js,原理如圖3所示。
(1)infoChannel:信息通道,主要用于向后臺(tái)發(fā)起數(shù)據(jù)請(qǐng)求。(2)dataChannel:數(shù)據(jù)通道,主要用于存儲(chǔ)從后臺(tái)獲取到的數(shù)據(jù)。(3)moleManage:數(shù)據(jù)操作,主要用于操作數(shù)據(jù)通道中的數(shù)據(jù),如crud操作。(4)modulePool:數(shù)據(jù)倉(cāng)庫(kù),主要存儲(chǔ)后臺(tái)返回的數(shù)據(jù)。(5)crudStorePool:crud實(shí)例池,增刪改的數(shù)據(jù),在持久化到數(shù)據(jù)庫(kù)之前,都會(huì)先存在于此池中。(6)action:后臺(tái)數(shù)據(jù)處理及數(shù)據(jù)庫(kù)訪問(wèn)模塊
執(zhí)行流程如下:(1)infoChannel通過(guò)調(diào)用服務(wù)器端action獲取數(shù)據(jù)庫(kù)數(shù)據(jù)。(2)infoChannel把獲取的數(shù)據(jù)放到內(nèi)存中的modulePool中。(3)dataChannel從modulePool中取數(shù)據(jù),并傳遞到View端。(4)View端的數(shù)據(jù)通過(guò)moleManage取出。(5)moleManage把取出的數(shù)據(jù)放到內(nèi)存的crudStorePool中。(6)通過(guò)infoChannel把crudStorePool中的數(shù)據(jù)傳遞到后臺(tái),實(shí)現(xiàn)數(shù)據(jù)的持久化操作。
ViewModel的具體應(yīng)用:(1)在前端開(kāi)發(fā)中如需初始化某一模塊的數(shù)據(jù)可以調(diào)用dataChnannel中的initViewData(viewld,dataStoreParam)方法。(2)如需查詢某一節(jié)點(diǎn)的數(shù)據(jù)集,可以調(diào)用dataChnannel中的getDataByPath(viewId,path)。(3)如需進(jìn)行crud操作,可以調(diào)用moleManage中的相關(guān)方法。
ViewModel解決的問(wèn)題:(1)向后臺(tái)的多請(qǐng)求操作改為通過(guò)接口統(tǒng)一調(diào)用。(2)是一個(gè)前后端通信的中間件,具有可插拔性,適用于文檔型及關(guān)系型數(shù)據(jù)庫(kù)。(3)實(shí)現(xiàn)了單例模式,避免多個(gè)實(shí)例操作同一個(gè)對(duì)象。(4)緩存大數(shù)據(jù),避免頻繁向后臺(tái)請(qǐng)求數(shù)據(jù)。
4Model層
Model層同其他的MVC框架一樣,Model代表特定領(lǐng)域的數(shù)據(jù)或者應(yīng)用所需的數(shù)據(jù),一個(gè)典型的特定領(lǐng)域的數(shù)據(jù)如用戶信息,或者一部電影的信息。
Model僅僅關(guān)注數(shù)據(jù)信息,不關(guān)心任何行為;不格式化數(shù)據(jù)或者影響數(shù)據(jù)在瀏覽器中的展現(xiàn);格式化數(shù)據(jù)是View層的任務(wù),同時(shí)業(yè)務(wù)邏輯層被封裝在Viewmodel中,用來(lái)和Model進(jìn)行交互。在Model層做的一個(gè)比較意外的行為是對(duì)數(shù)據(jù)的驗(yàn)證,比如當(dāng)用戶輸入用戶名的時(shí)候,判斷用戶名的格式是否正確,是否有非法字符等。Model基本是按照上面的定義來(lái)實(shí)現(xiàn)的,但是會(huì)有通過(guò)ajax調(diào)用服務(wù)器服務(wù)來(lái)進(jìn)行讀寫(xiě)Model數(shù)據(jù)。
MVVM框架是衍生于MVC框架的,兩者之間的最大區(qū)別在于,MVC框架中的Controller是由是由高級(jí)編程語(yǔ)言實(shí)現(xiàn)的,比如用Java實(shí)現(xiàn)的MVC框架,Controller是由servlet實(shí)現(xiàn),而在View中,也會(huì)用到部分的Jsp代碼;而MVVM框架中的ViewModel則是由腳本語(yǔ)言Javascript實(shí)現(xiàn),在View界面將不會(huì)用到Jsp代碼,從而實(shí)現(xiàn)了前端和后臺(tái)的完整分離。
優(yōu)點(diǎn):(1)MVVM使并行開(kāi)發(fā)更加容易,使前端開(kāi)發(fā)和后端開(kāi)發(fā)人員互不影響。(2)抽象化View層,減少了代碼中的業(yè)務(wù)邏輯。(3)ViewModel比事件驅(qū)動(dòng)更容易測(cè)試。(4)ViewModel的測(cè)試不用關(guān)心UI的自動(dòng)化和交互。
缺點(diǎn):(1)對(duì)于簡(jiǎn)單的UI,使用MVVM有點(diǎn)太重。(2)聲明式的數(shù)據(jù)綁定不利于調(diào)試,因?yàn)槊钍降拇a可以和容易的設(shè)置斷點(diǎn),這種模式就不利于設(shè)置這樣的斷點(diǎn)。(3)在不挑剔(non-trivial)的應(yīng)用里數(shù)據(jù)綁定可以創(chuàng)建大量的簿記(book-keeping)。(4)在大的應(yīng)用中,在獲取大量的概要(generalization)前很難設(shè)計(jì)視圖模型層。
篇7
【關(guān)鍵詞】PHP ThinkPHP MVC 電子商務(wù) 架構(gòu)設(shè)計(jì)
1 紅酒交易平臺(tái)的需求分析
紅酒交易平臺(tái)是銷(xiāo)售酒類(lèi)、培訓(xùn)、器皿、酒窖定制服務(wù)的電子商務(wù)平臺(tái),支持PC端瀏覽器、手機(jī)端瀏覽器、微信端以及Android端和iOS端。
本文從功能性需求和非功能性需求兩個(gè)方面進(jìn)行需求分析。
1.1 功能性需求分析
本平臺(tái)有三個(gè)主要功能和一個(gè)主要流程:品類(lèi)管理、促銷(xiāo)管理、訂單管理和購(gòu)物流程。
1.1.1 品類(lèi)管理
主要是管理商品的分類(lèi)和商品管理。
1.1.2 促銷(xiāo)管理
支持各種促銷(xiāo)手段:滿額贈(zèng)送、限時(shí)搶購(gòu)、買(mǎi)N送N、特價(jià)促銷(xiāo)等。
1.1.3 訂單管理
平臺(tái)收到訂單后,如果是已經(jīng)支付的訂單或者是貨到付款的訂單,備貨后輸入物流單號(hào)和物流公司發(fā)貨。用戶如果退貨,平臺(tái)允許退貨并收到用戶退貨后,退款給該用戶。
1.1.4 購(gòu)物流程
用戶瀏覽商品并加入購(gòu)物車(chē),如果該商品符合促銷(xiāo)條件,自動(dòng)在購(gòu)物車(chē)放入贈(zèng)品,用戶確認(rèn)訂單并支付,等待平臺(tái)發(fā)貨,用戶收到貨物后確認(rèn)到貨并評(píng)價(jià)。
1.2 非功能性需求分析
1.2.1 安全要求
對(duì)于需要登錄后才能訪問(wèn)的頁(yè)面要禁止非法訪問(wèn)等。
1.2.2 性能要求
網(wǎng)絡(luò)正常的情況下,大于2MB/秒,1000人以下并發(fā)訪問(wèn)頁(yè)面打開(kāi)時(shí)間最多不超過(guò)5秒。
2 紅酒交易平臺(tái)MVC框架的選擇
通過(guò)技術(shù)平臺(tái)選型,考察 MVC、Struts2、Spring MVC、ThinkPHP、Laravel等多個(gè)MVC框架后,結(jié)合技術(shù)團(tuán)隊(duì)能力、國(guó)內(nèi)流行程度等因素,將 MVC、Struts2、ThinkPHP作為備選技術(shù)方案。ThinkPHP中的MVC提供了一種敏捷開(kāi)發(fā)的手段,使得開(kāi)發(fā)者能夠迅速地開(kāi)發(fā)出穩(wěn)定的企業(yè)級(jí)網(wǎng)站。ThinkPHP在中小型應(yīng)用中,學(xué)習(xí)成本最低、開(kāi)發(fā)效率最高,所以在國(guó)內(nèi)PHP MVC框架應(yīng)用中占據(jù)了將近50%的市場(chǎng)份額。本平臺(tái)是一個(gè)中等規(guī)模的網(wǎng)站,根據(jù)前述非功能性需求分析得出,并發(fā)訪問(wèn)量要求不高,且用戶預(yù)算低、開(kāi)發(fā)周期短,所以決定平臺(tái)采用ThinkPHP框架。
3 紅酒交易平臺(tái)的架構(gòu)設(shè)計(jì)
3.1 平臺(tái)架構(gòu)的設(shè)計(jì)
為了進(jìn)一步壓縮成本,縮短開(kāi)發(fā)時(shí)間,從架構(gòu)設(shè)計(jì)上既要滿足前述用戶需求,又要減少開(kāi)發(fā)工作量。因此平臺(tái)通過(guò)共用控制器和模型,采用多視圖的方法滿足用戶PC端、手機(jī)端、微信端瀏覽本平臺(tái)的需求,由于Anroid端和iOS端采用Hybrid APP混合框架,內(nèi)嵌了瀏覽器,所以本架構(gòu)也能給予很好的支持。前端則采用Bootstrap框架進(jìn)行快速頁(yè)面布局和前端編程。Bootstrap是最受歡迎的 HTML、CSS 和 JS 框架,用于開(kāi)發(fā)響應(yīng)式布局、移動(dòng)設(shè)備優(yōu)先的 WEB 項(xiàng)目。根據(jù)需求分析,本平臺(tái)部分技術(shù)架構(gòu)設(shè)計(jì)如圖1所示。
限于篇幅,本架構(gòu)主要展示了平臺(tái)Home前臺(tái)的架構(gòu)設(shè)計(jì),前臺(tái)Home和后臺(tái)Admin共用Common\Model,前臺(tái)PC端View和移動(dòng)端MobileView共用了前臺(tái)Controller,從而減少了開(kāi)發(fā)冗余,提高了代碼復(fù)用率。
3.2 前臺(tái)控制器基類(lèi)的實(shí)現(xiàn)
FrontController是前臺(tái)控制器的基類(lèi),只有一個(gè)方法_initialize,繼承該基類(lèi)的前臺(tái)控制器都會(huì)執(zhí)行該方法。_initialize方法通過(guò)ismobile函數(shù)判斷,如果是手機(jī)端或者微信端瀏覽,則通過(guò)C(‘DEFAULT_V_LAYER’,’MobileView’)函數(shù)將默認(rèn)視圖層從View目錄改成MobileView目錄,從而改成適合手機(jī)瀏覽的網(wǎng)頁(yè),而控制器類(lèi)和模型類(lèi)無(wú)需修改。用戶沒(méi)有登錄,即判斷$_SESSION[‘USER’]為空,如果用戶訪問(wèn)了需要登錄才能訪問(wèn)的控制器方法,使用$this->redirect方法將鏈接重定向登錄方法,強(qiáng)制用戶登錄。
4 結(jié)束語(yǔ)
MVC輕量級(jí)ThinkPHP框架,基于面向?qū)ο蟮乃枷?結(jié)合使用了Ajax技術(shù),使整個(gè)系統(tǒng)功能清晰明了。本平臺(tái)選擇ThinkPHP框架進(jìn)行架構(gòu)設(shè)計(jì),采用多個(gè)視圖共用一個(gè)控制器方法的方式支持多終端設(shè)備瀏覽器以及Hybrid APP混合框架里的內(nèi)嵌瀏覽器,滿足了紅酒交易平臺(tái)的功能性需求和非功能性需求,提高了開(kāi)發(fā)效率、縮短開(kāi)發(fā)工期并節(jié)約開(kāi)發(fā)成本,具有較好的技術(shù)推廣價(jià)值。
參考文獻(xiàn)
[1]徐誠(chéng)斌,王金平.MVC在ThinkPHP框架中的應(yīng)用研究[J].信息與電腦:理論版,2011(03):160-160.
[2]Bootstrap中文W.Bootstrap中文文檔[EB/OL]./, 2014-10-31/2016-12-7.
[3]許燕.基于ThinkPHP框架的校園交易平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].信息技術(shù)與信息化,2016(07):34-37.
作者簡(jiǎn)介
陳棟良(1975-),男,江蘇省宜興市人。碩士學(xué)位?,F(xiàn)為蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院講師。研究方向?yàn)檐浖夹g(shù)。
篇8
關(guān)鍵詞: MVC;多層架構(gòu);素質(zhì)教育;課程管理;管理系統(tǒng)
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2013)30-6804-02
按照教育部、教育廳的相關(guān)要求,各高職院校以學(xué)生素質(zhì)教育課程改革為突破口,面向全體學(xué)生,結(jié)合專(zhuān)業(yè)教育,積極探索高職素質(zhì)教育的新途徑、新方法,將素質(zhì)教育融入人才培養(yǎng)全過(guò)程。因此,為配合學(xué)生素質(zhì)教育課程改革,采用信息系統(tǒng)加強(qiáng)對(duì)素質(zhì)教育的課程及實(shí)踐活動(dòng)開(kāi)設(shè)、教學(xué)任務(wù)分配、成績(jī)錄入等全過(guò)程進(jìn)行管理勢(shì)在必行。
1 學(xué)生素質(zhì)教育課程管理系統(tǒng)分析
根據(jù)學(xué)生素質(zhì)教育課程實(shí)施工作的要求,學(xué)生素質(zhì)教育管理系統(tǒng)的主要功能包括:課程信息管理、活動(dòng)信息管理、選活動(dòng)管理、任務(wù)分配管理、課程成績(jī)管理、系統(tǒng)管理等功能,系統(tǒng)功能結(jié)構(gòu)如圖1所示。
2 學(xué)生素質(zhì)教育課程管理系統(tǒng)設(shè)計(jì)
學(xué)生素質(zhì)教育課程管理系統(tǒng)功能復(fù)雜,為了使得學(xué)生素質(zhì)教育課程管理系統(tǒng)邏輯結(jié)構(gòu)合理,提高軟件的開(kāi)發(fā)效率,降低系統(tǒng)的維護(hù)成本,提升系統(tǒng)的可擴(kuò)展性和可維護(hù)性,因此學(xué)生素質(zhì)教育課程管理系統(tǒng)設(shè)計(jì)采用基于.Net的多層架構(gòu)解決方案,WEB層采用了 MVC(視圖引擎為Razor)框架技術(shù),視面組件方面使用了Telerik組件技術(shù),JS框架采用強(qiáng)大的JQuery技術(shù),服務(wù)層采用基于WCF技術(shù)的SOA框架,服務(wù)層采用基于技術(shù)的AOP框架,數(shù)據(jù)持久層采用基于Entity Framework技術(shù)的ORM框架。學(xué)生素質(zhì)教育課程管理系統(tǒng)整體架構(gòu)設(shè)計(jì)如圖2所示。
1)WEB層設(shè)計(jì)
系統(tǒng)WEB層采用 MVC框架技術(shù)設(shè)計(jì)。 MVC是微軟官方提供的MVC模式編寫(xiě) Web應(yīng)用程序的一個(gè)框架,MVC主要用于表示一種軟件架構(gòu)模式,它把WEB應(yīng)用系統(tǒng)分為三個(gè)基本部分:模型(Model)、視圖(View)和控制器(Controller)。
學(xué)生素質(zhì)教育課程管理系統(tǒng)WEB層MVC框架中視圖部件使用Telerik組件技術(shù)及基于JQuery的JS框架技術(shù)實(shí)現(xiàn)了課程管理頁(yè)面、活動(dòng)管理頁(yè)面等WEB頁(yè)面的展現(xiàn)。控制器部件主要處理課程管理、活動(dòng)管理等頁(yè)面與服務(wù)器的交互操作,通過(guò)服務(wù)層調(diào)用課程管理、活動(dòng)管理等服務(wù)進(jìn)行數(shù)據(jù)處理。模型組件與實(shí)體類(lèi)對(duì)應(yīng),主要封裝了系統(tǒng)中課程、活動(dòng)、學(xué)生活動(dòng)、課程任務(wù)、活動(dòng)任務(wù)、課程成績(jī)等核心數(shù)據(jù)以及邏輯功能。
2)服務(wù)層設(shè)計(jì)
系統(tǒng)服務(wù)層采用基于WCF技術(shù)的SOA框架設(shè)計(jì),WCF是.NET框架的一部分,是微軟發(fā)展的一組數(shù)據(jù)通信的應(yīng)用程序開(kāi)發(fā)接口,它能將不同的通訊方式整合在一起,提供一種統(tǒng)一的編程模型。
WCF通過(guò)配置文件定義服務(wù)以及消費(fèi)服務(wù)完成服務(wù)端配置與客戶端配置。服務(wù)端配置主要完成服務(wù)節(jié)點(diǎn)的綁定,主要包含CourseServiceNode(課程服務(wù)節(jié)點(diǎn))、ActivityServiceNode(活動(dòng)服務(wù)節(jié)點(diǎn))、StudentServiceNode(學(xué)生服務(wù)節(jié)點(diǎn))、TeacherServiceNode(教師服務(wù)節(jié)點(diǎn))、DepartmentServiceNode(部門(mén)服務(wù)節(jié)點(diǎn))、StudentActivityServiceNode(學(xué)生活動(dòng)服務(wù)節(jié)點(diǎn))、CourseTaskServiceNode(課程任務(wù)服務(wù)節(jié)點(diǎn))、ActivityTaskServiceNode(活動(dòng)任務(wù)服務(wù)節(jié)點(diǎn))等服務(wù)節(jié)點(diǎn)??蛻舳伺渲弥饕瓿煽蛻舳私K結(jié)點(diǎn)的屬性來(lái)連接系統(tǒng)服務(wù)終端結(jié)點(diǎn)的配置。
3)服務(wù)層設(shè)計(jì)
系統(tǒng)服務(wù)層是采用基于技術(shù)的AOP框架設(shè)計(jì),它是.NET企業(yè)應(yīng)用開(kāi)發(fā)的應(yīng)用程序框架,為業(yè)務(wù)對(duì)象提供面向?qū)ο缶幊痰闹С?,通過(guò)IApplicationContext、IObjectFactory核心接口實(shí)現(xiàn)依賴(lài)注入(Ioc)功能。
在學(xué)生素質(zhì)教育課程管理系統(tǒng)服務(wù)層設(shè)計(jì)中主要是完成CourseService(課程服務(wù))、ActivityService(活動(dòng)服務(wù))、StudentService(學(xué)生服務(wù))、TeacherService(教師服務(wù))、DepartmentService(部門(mén)服務(wù))、StudentActivityService(學(xué)生活動(dòng)服務(wù))、CourseTaskService(課程任務(wù)服務(wù))、ActivityTaskService(活動(dòng)任務(wù)服務(wù))等服務(wù)的依賴(lài)注入并建立與服務(wù)節(jié)點(diǎn)的映射關(guān)系。
4)數(shù)據(jù)持久層設(shè)計(jì)
系統(tǒng)服務(wù)層是采用基于Entity Framework技術(shù)的ORM框架設(shè)計(jì),Entity Framework是開(kāi)發(fā)基于的ORM框架,它可以根據(jù)系統(tǒng)對(duì)象生成實(shí)體數(shù)據(jù)模型(EDM)、實(shí)體數(shù)據(jù)類(lèi)及DAO數(shù)據(jù)操作類(lèi),借助實(shí)體數(shù)據(jù)模型和實(shí)體所承載的數(shù)據(jù)自動(dòng)生成SQL語(yǔ)句,并實(shí)現(xiàn)數(shù)據(jù)自動(dòng)持久化功能。
在學(xué)生素質(zhì)教育課程管理系統(tǒng)系統(tǒng)數(shù)據(jù)持久層中實(shí)體數(shù)據(jù)模型文件為SQECEnites.edmx,主要用于描述實(shí)體類(lèi)與數(shù)據(jù)庫(kù)對(duì)象的對(duì)應(yīng)關(guān)系。系統(tǒng)中包含的主要實(shí)體類(lèi)有:Course(課程)、Activity(活動(dòng))、Student(學(xué)生)、Teacher(教師)、Department(部門(mén))、StudentActivity(學(xué)生活動(dòng))、CourseTask(課程任務(wù))、ActivityTask(活動(dòng)任務(wù))等。系統(tǒng)對(duì)應(yīng)的DAO數(shù)據(jù)操作類(lèi)有:CourseDAO(課程數(shù)據(jù)操作)、ActivityDAO(活動(dòng)數(shù)據(jù)操作)、StudentDAO(學(xué)生數(shù)據(jù)操作)、TeacherDAO(教師數(shù)據(jù)操作)、DepartmentDAO(部門(mén)數(shù)據(jù)操作)、StudentActivityDAO(學(xué)生活動(dòng)數(shù)據(jù)操作)、CourseTaskDAO(課程任務(wù)數(shù)據(jù)操作)、ActivityTaskDAO(活動(dòng)任務(wù)數(shù)據(jù)操作)等。
3 總結(jié)
學(xué)生素質(zhì)教育課程管理系統(tǒng)開(kāi)發(fā)中采用基于.NET的多層架構(gòu)體系設(shè)計(jì),在WEB層通過(guò)MVC框架技術(shù)實(shí)現(xiàn)了系統(tǒng)視圖層和業(yè)務(wù)層分離,從而降低了系統(tǒng)展示與業(yè)務(wù)邏輯的耦合性;在服務(wù)層采用基于WCF技術(shù)的SOA框架設(shè)計(jì),降低了服務(wù)提供者和服務(wù)使用者的松散耦合性;在服務(wù)層采用基于技術(shù)的AOP框架設(shè)計(jì),實(shí)現(xiàn)了對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離,降低了業(yè)務(wù)邏輯間的耦合度;在數(shù)據(jù)持久層采用基于Entity Framework技術(shù)的ORM框架設(shè)計(jì),實(shí)現(xiàn)數(shù)據(jù)操作與數(shù)據(jù)庫(kù)的分離,降低了程序與數(shù)據(jù)庫(kù)間的關(guān)聯(lián)性。因此,在開(kāi)發(fā)WEB應(yīng)用系統(tǒng)中采用基于.NET的多層架構(gòu)體系設(shè)計(jì),可充分發(fā)揮每一層框架技術(shù)的優(yōu)勢(shì),提升系統(tǒng)各模塊的獨(dú)立性,提高系統(tǒng)開(kāi)發(fā)效率及系統(tǒng)的易維護(hù)性、可用性和可伸縮性。
參考文獻(xiàn):
[1] 涂剛,李建,劉華清,紀(jì)永玲,許子昊 MVC的研究[J].軟件工程師,2010(8).
[2] 方柯.基于 MVC框架的Web應(yīng)用開(kāi)發(fā)研究[J].電腦知識(shí)與技術(shù),2010(22).
[3] 張計(jì)龍.基于改進(jìn)MVC的高校人事管理系統(tǒng)[J].計(jì)算機(jī)工程,2004(8).
[4] 王炯煒,胡宏偉.基于LINQ的三層體系結(jié)構(gòu)應(yīng)用[J].科技信息:學(xué)術(shù)研究,2008(21).
[5] 梁西陳,朱水源.基于.NET的高職院校教師信息管理系統(tǒng)研發(fā)[J].宿州教育學(xué)院學(xué)報(bào),2009(1).
篇9
關(guān)鍵詞:電子商務(wù);Struts 2;作用
中圖分類(lèi)號(hào):F49文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3198(2012)03-0233-02
1 Struts 2的由來(lái)
隨著軟件技術(shù)和Internet的迅猛發(fā)展,以J2EE技術(shù)體系為代表的分布式對(duì)象技術(shù)為企業(yè)構(gòu)造新的基于Internet的電子商務(wù)平臺(tái)提供了技術(shù)支持。J2EE規(guī)范定義了一個(gè)用于簡(jiǎn)化分布式企業(yè)級(jí)應(yīng)用開(kāi)發(fā)與部署的基于組件的模式,它提供了一個(gè)多層次的分布式應(yīng)用模型和一系列開(kāi)發(fā)技術(shù)規(guī)范,為搭建具有可伸縮性、靈活性、易維護(hù)性的電子商務(wù)系統(tǒng)提供了良好的機(jī)制。隨著J2EE技術(shù)的不斷完善和發(fā)展,有幾種開(kāi)源免費(fèi)的框架出現(xiàn)在J2EE設(shè)計(jì)中,這些新出現(xiàn)的框架為中小企業(yè)提供了一個(gè)經(jīng)濟(jì)的、快速開(kāi)署的、穩(wěn)定而可擴(kuò)展的可行方案,使得他們可以使用開(kāi)源技術(shù)來(lái)構(gòu)建企業(yè)級(jí)應(yīng)用。其中,Struts就是比較優(yōu)秀的開(kāi)源框架。
Struts 1是第一個(gè)的MVC框架,它由Apache開(kāi)源軟件聯(lián)盟提供的用于構(gòu)建JavaWeb應(yīng)用程序的框架,該框架推出后,就得到了廣泛Java Web開(kāi)發(fā)者的擁護(hù),經(jīng)過(guò)長(zhǎng)達(dá)6年時(shí)間的發(fā)展,Struts 1框架更加成熟、穩(wěn)定,性能也有了很好的保證。因此,到目前為止,Struts 1依然是世界上使用最廣泛的MVC框架。但是由于些設(shè)計(jì)上的缺陷成為它未來(lái)發(fā)展的障礙。為了給Java Web開(kāi)發(fā)人員提供一個(gè)更好的框架,提出了Struts 2的新模式。Struts 2雖基于Struts 1發(fā)展,但并不是以Struts 1為核心,而是采用Web Work為核心,尤其是吸收了Struts 1和 Web Work兩者的優(yōu)勢(shì)。
2 Struts 2的核心思想
Struts目前已經(jīng)分化為兩個(gè)框架:第一個(gè)框架是shale,此框架可以說(shuō)幾乎脫離了Struts的設(shè)計(jì)思想,它不僅僅是對(duì)Struts的升級(jí),而是另辟空間發(fā)展。第二個(gè)就是Struts 2框架,Struts 2的核心設(shè)計(jì)思想是基于Web work框架基礎(chǔ)上發(fā)展的,它的特點(diǎn)是兼容struts 1和Web work兩種框架,并且取長(zhǎng)補(bǔ)短的開(kāi)發(fā)理念,開(kāi)發(fā)中兼顧了struts 1的部分優(yōu)點(diǎn),同時(shí)注入了Web work的思想。Struts 2的體系結(jié)構(gòu)同樣也實(shí)現(xiàn)了MVC設(shè)計(jì)模式的概念,它將這些概念映射到Web應(yīng)用程序的組件和概念中。Struts 2是使用Servlet和Java Server Pages技術(shù)的一種MVC實(shí)現(xiàn),而MVC是用來(lái)控制Web項(xiàng)目中的變化,提高項(xiàng)目的復(fù)用性和可維護(hù)性,所以應(yīng)用Struts 2框架就是用來(lái)改進(jìn)在目前Web開(kāi)發(fā)中存在的不足之處。Struts 2繼承了MVC的各項(xiàng)特性,并根據(jù)J2EE的特點(diǎn),做了相應(yīng)的變化與擴(kuò)展。圖1是Struts 2的MVC體系結(jié)構(gòu)圖。
Struts 2技術(shù)框架所具有的很多特性使得它非常適合作為Web系統(tǒng)的應(yīng)用開(kāi)發(fā)過(guò)程中。主要特點(diǎn)如下:
①Struts 2大量使用攔截器來(lái)處理用戶請(qǐng)求,從而允許用戶的業(yè)務(wù)邏輯控制器與Servlet API分離。
②Struts 2是一個(gè)雅致的,可擴(kuò)展的,用來(lái)建立企業(yè)級(jí)Java Web應(yīng)用程序的框架。
③Struts 2不但注重程序的開(kāi)發(fā)過(guò)程,更注重部署和后期維護(hù)。
④Struts 2來(lái)源于Web Work 2。
⑤Struts 2融合了Struts和Web Work的社區(qū)力量,是這兩個(gè)社區(qū)努力的結(jié)果。
⑥Struts 2非常容易使用。
⑦Struts 2最大可能的保留了和Struts 1.x的相似行。
(2)Struts 2的體系結(jié)構(gòu)。
Struts 2使用攔截器作為處理(Advice),以用戶的業(yè)務(wù)邏輯控制器為目標(biāo),創(chuàng)建一個(gè)控制器??刂破髫?fù)責(zé)處理用戶請(qǐng)求,處理用戶請(qǐng)求時(shí)回調(diào)業(yè)務(wù)控制器的execute方法,該方法的返回值將決定了Struts 2將怎樣的視圖資源呈現(xiàn)給用戶。
由于客戶端瀏覽器初始化一個(gè)指向Servlet容器的請(qǐng)求;然后Struts 2的核心控制器FilterDispatcher接受客戶發(fā)來(lái)的請(qǐng)求,進(jìn)行相應(yīng)的判斷調(diào)用指定的Action操作;攔截器對(duì)請(qǐng)求啟用相應(yīng)功能;接下來(lái)ActionInvocation實(shí)例使用命名模式來(lái)回調(diào)Action的execute方法,該execute方法先獲取用戶請(qǐng)求參數(shù),然后它會(huì)調(diào)用業(yè)務(wù)邏輯組件來(lái)處理用戶的請(qǐng)求;最后將execute方法的處理結(jié)果返回到客戶端的瀏覽器中完成處理過(guò)程。
(3)Struts 2的組成及配置。
Struts 2框架主要由三個(gè)部分組成:核心控制器FilterDispatcher、業(yè)務(wù)控制器和用戶實(shí)現(xiàn)的業(yè)務(wù)邏輯組件。Struts 2框架只提供了核心控制器部分的功能,而業(yè)務(wù)控制器和用戶實(shí)現(xiàn)的業(yè)務(wù)邏輯組件功能需要程序開(kāi)發(fā)人員獨(dú)立完成。
由于Struts 2的核心與Struts 1有著本質(zhì)的區(qū)別,也就決定了Struts 2的配置與Struts1有一定的區(qū)別。我們需要加載Struts 2框架那么應(yīng)該首先在Web.xml文件中加載前面提到的核心控制器FilterDispatcher,這樣控制器會(huì)加載Struts 2框架。
Struts 2框架有兩個(gè)核心配置文件,其中struts.xml文件主要負(fù)責(zé)管理應(yīng)用中的Action映射,以及該Action包含的Result定義等。在原始狀態(tài)下,Struts 2框架將默認(rèn)的路徑下是加載放在Web-INF/classes的struts.xml文件。但是由于在Web應(yīng)用中,隨著系統(tǒng)的需求,各個(gè)功能模塊不斷增加修改等,系統(tǒng)中Action數(shù)量會(huì)越來(lái)越繁多,如果我們選擇默認(rèn)的struts.xml配置文件,那么整個(gè)文件會(huì)變得非常繁雜,不利于后期維護(hù)。為了避免struts.xml文件過(guò)十繁雜,提高struts.xml文件的可讀性,我們將struts.xml分解成多個(gè)配置文件,然后在struts.xml文件中包含其他配置文件。解決這一問(wèn)題可以用include方式導(dǎo)入各個(gè)功能模塊的文件。當(dāng)然也可以根據(jù)用戶自己需要來(lái)劃分,本系統(tǒng)采用的是按模塊劃分。
Struts 2框架包含的另一個(gè)核心文件是struts.properties,該文件定義了Struts 2框架的屬性,我們可以設(shè)置相應(yīng)屬性來(lái)達(dá)到開(kāi)發(fā)程序的需求。Struts.properties文件是一個(gè)標(biāo)準(zhǔn)的Properties文件,該文件包含了系列的key-value對(duì)象,每個(gè)key就是一個(gè)Struts 2屬性,該key對(duì)應(yīng)的value就是一個(gè)Struts 2屬性值。struts.properties文件通常放在Web應(yīng)用的Web-INF/classes路徑下。實(shí)際上,只要將該文件放在Web應(yīng)用的CLASSPATH路徑下,Struts 2框架就可以加載該文件。
3 總結(jié)
隨著網(wǎng)絡(luò)信息技術(shù)的發(fā)展,網(wǎng)絡(luò)應(yīng)用在人們?nèi)粘I钪性絹?lái)越受到重視,人們?cè)絹?lái)越希望在較短的時(shí)間內(nèi)買(mǎi)到自己所需要的東西。但是市場(chǎng)上的商品種類(lèi)很多,人們要想購(gòu)買(mǎi)到自己需要的商品,不得不花費(fèi)很多時(shí)間,給購(gòu)買(mǎi)帶來(lái)了麻煩。網(wǎng)上購(gòu)物系統(tǒng)彌補(bǔ)了傳統(tǒng)購(gòu)物的許多不足之處,有效地縮短了傳統(tǒng)購(gòu)物過(guò)程中的流通環(huán)節(jié),有著經(jīng)營(yíng)成本低、庫(kù)存虛擬,用戶查看商品方便,減少了地域限制等特點(diǎn)。Struts 2是現(xiàn)今開(kāi)發(fā)技術(shù)中運(yùn)用最廣泛的開(kāi)源框架技術(shù)之一。Struts 2框架具有組件的模塊化,靈活性和重用性的優(yōu)點(diǎn),同時(shí)簡(jiǎn)化了基于MVC的Web應(yīng)用程序的開(kāi)發(fā)。
參考文獻(xiàn)
[1]徐明華,邱加永.Struts基礎(chǔ)與案例開(kāi)發(fā)詳解[M].北京:清華大學(xué)出版社,2009.
[2]黃金雪.基于Struts和Hibernate的框架模型在銀行信貸管理系統(tǒng)的研究[D].成都:西南交通大學(xué),2008.
[3]郭梅,江紅.Struts在實(shí)現(xiàn)MVC架構(gòu)中的應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,2004,(1):2834.
篇10
關(guān)鍵詞:struts+ hibernate架構(gòu);MVC框架;自動(dòng)組卷模塊;擴(kuò)展性
中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)25-1473-03
The Designation and Realization of Item Pool System Based Struts + Hibernate Framework
JIANG Jiao-li, JIANG Yong-ping, HUANG Feng-ai
(Information Engineering of Guangdong University of Technology, Guangzhou 510006,China)
Abstract:The traditional B/S item pool system has the issue that page code redundance , lowlly reusability of the function module,maintained hardly and so on.This article proposedthe design conception of item pool system basedStruts + Hibernate framework, According to their superiority supplementary characteristic,Completedthe MVC model and the lasting level conformity.Take the automatic group volume module realization as an example,conform that it has guaranteed system each internal close coupling well, Layer upon layer between loose coupling, Simultaneously strengthened the code reusability and the flexibility, further strengthens the system the extension.
Key words: Struts+Hibernate construction; MVC framework; auto-composing test paper module; expansibility
1 引言
隨著計(jì)算機(jī)和網(wǎng)絡(luò)的普及,國(guó)內(nèi)外目前已經(jīng)存在很多比較成熟的認(rèn)證考試,比如:我國(guó)的計(jì)算機(jī)等級(jí)考試,美國(guó)的GRE,托??荚嚨取榱隧槕?yīng)計(jì)算機(jī)網(wǎng)絡(luò)時(shí)代的發(fā)展,考核方式逐步趨向無(wú)紙化,解決高校課程內(nèi)容繁多,教學(xué)資源要求更豐富的難題,學(xué)校必須提高自身的考核方式,擁有自己的題庫(kù)系統(tǒng)。而系統(tǒng)的實(shí)現(xiàn)技術(shù)的選擇也是非常重要的。其中利用比較成熟的具有跨平臺(tái)性的Java技術(shù)實(shí)現(xiàn)是首選,因?yàn)镴2EE體系結(jié)構(gòu)提供中間層集成框架能滿足無(wú)需太多費(fèi)用而又需要高可用性、高可靠性以及可擴(kuò)展性的應(yīng)用的需求。本文所介紹的題庫(kù)系統(tǒng)主要考慮到:傳統(tǒng)的基于B/S模式的題庫(kù)系統(tǒng)開(kāi)發(fā)具有頁(yè)面代碼冗余度高,功能模塊可重用性低,擴(kuò)展性差,維護(hù)困難等問(wèn)題;在軟件設(shè)計(jì)中采用基于MVC模式的Struts+Hibernate框架技術(shù)實(shí)現(xiàn)整個(gè)系統(tǒng)。本文將以題庫(kù)系統(tǒng)的設(shè)計(jì)為例,分別介紹Struts和Hibernate框架,重點(diǎn)分析兩個(gè)框架的優(yōu)勢(shì)互補(bǔ)的特點(diǎn),并以題庫(kù)系統(tǒng)的架構(gòu)設(shè)計(jì)來(lái)完成Struts+Hibernate框架的整合,最后詳細(xì)介紹了自動(dòng)組卷功能模塊的實(shí)現(xiàn)以及解決的問(wèn)題,說(shuō)明Struts和Hibernate框架在題庫(kù)系統(tǒng)實(shí)現(xiàn)上的應(yīng)用。
2 題庫(kù)系統(tǒng)功能描述
題庫(kù)系統(tǒng)根據(jù)實(shí)際需要將實(shí)際用戶分為三類(lèi)權(quán)限管理:管理員、教師、學(xué)生??傁到y(tǒng)架構(gòu)分為兩大模塊:后臺(tái)教師管理模塊、前臺(tái)考試模塊。題庫(kù)系統(tǒng)的總體框架結(jié)構(gòu)圖1所示。
題庫(kù)系統(tǒng)前臺(tái)用戶主要是學(xué)生,學(xué)生登錄前臺(tái)可以完成在線考試、考卷提交、考試成績(jī)查詢、修改用戶基本資料等操作。
本系統(tǒng)最重要的是后臺(tái)管理模塊的實(shí)現(xiàn),管理員登陸后臺(tái)管理界面后,可進(jìn)行用戶信息管理、題庫(kù)信息管理、考試試卷管理、考務(wù)信息管理、其他管理模塊的操作,下面對(duì)各模塊的基本功能進(jìn)行大概介紹。
用戶信息管理模塊:管理員可添加、刪除、修改學(xué)生信息;設(shè)置教師權(quán)限,使管理員和教師都能對(duì)題庫(kù)和其他基本功能進(jìn)行操作。
題庫(kù)信息管理模塊:這個(gè)模塊主要用來(lái)操作單選題,多選題、判斷題、填空題、簡(jiǎn)答題的添加、刪除和修改,并可以根據(jù)指定專(zhuān)業(yè)、知識(shí)點(diǎn)進(jìn)行精確題目查詢。
考試試卷管理模塊:主要是根據(jù)不同專(zhuān)業(yè),難度系數(shù)的設(shè)定等條件抽題生成試卷,并對(duì)生成并且未試卷進(jìn)行修改,同時(shí)還支持套題管理。
考務(wù)信息管理模塊:管理員/教師在考試前對(duì)生成試卷狀態(tài)進(jìn)行控制,、中止考試試卷;考試結(jié)束后對(duì)客觀題進(jìn)行評(píng)分,系統(tǒng)自動(dòng)完成主觀題和客觀題的總分相加,得出總分并生成考生考試情況統(tǒng)計(jì)供管理員/教師查詢。
其他管理模塊:這個(gè)模塊主要用來(lái)添加班級(jí)信息和考試知識(shí)點(diǎn)信息。
3 系統(tǒng)開(kāi)發(fā)技術(shù)運(yùn)用及架構(gòu)整合
3.1 基于MVC模式的struts+hibernate框架設(shè)計(jì)策略
MVC(Model-View-Controller)設(shè)計(jì)模式將系統(tǒng)分成模型層、視圖層、控制層三層,大大減少在設(shè)計(jì)系統(tǒng)中的代碼的“冗余度”,降低了頁(yè)面顯示、邏輯控制、數(shù)據(jù)處理的耦合性。目前有很多可供MVC使用的web框架,Struts就是其中的一種,相比較其他框架而言,Struts是一種開(kāi)源框架,它能使你的代碼具有高度的平臺(tái)無(wú)關(guān)性,提供了對(duì)開(kāi)發(fā)MVC系統(tǒng)的底層支持,它的目的是為了幫助你減少在運(yùn)用MVC設(shè)計(jì)模型來(lái)開(kāi)發(fā)Web應(yīng)用的時(shí)間。利用Struts來(lái)開(kāi)發(fā)能夠很好地實(shí)現(xiàn)各層之間的散耦合[2-3]。