廖賓
(納愛(ài)斯集團(tuán) 浙江省麗水市 323000)
目前的Web 頁(yè)面被廣泛的使用到互聯(lián)網(wǎng)系統(tǒng)內(nèi),在B/S 架構(gòu)應(yīng)用之下,Web 技術(shù)成熟度逐步提升,也逐步的完善,特別是通過(guò)以MVC 作為基礎(chǔ)之下的Web 開(kāi)發(fā)有效的應(yīng)用。在企業(yè)級(jí)Web 在實(shí)際的使用過(guò)程中,要綜合分析安全、維護(hù)、移植等方面的特性,通過(guò)使用MVC 模式達(dá)到開(kāi)發(fā)的要求,全面的提高開(kāi)發(fā)效率與水平。MVC 設(shè)計(jì)模式屬于經(jīng)典程序設(shè)計(jì)理念,其主要有如下幾個(gè)部分所構(gòu)成:模型層(Mode1)、視圖層(View)、控制層(contr0ller)。
模型層為程序的核心,主要是通過(guò)JavaBean 組件得以實(shí)現(xiàn),為某個(gè)對(duì)象,或者某個(gè)業(yè)務(wù)邏輯形式,主要的作用是表達(dá)與訪問(wèn)數(shù)據(jù)信息,按照某種邏輯進(jìn)行操作,保證程序處于合理的狀態(tài)中。在MVC 模式之下,可以有效的控制視圖表現(xiàn)的結(jié)果,其是利用面向?qū)ο蟮姆绞?,把然后將抽象?duì)象轉(zhuǎn)化成為程序?qū)ο?。這些抽象對(duì)象中包含了屬性、邏輯等信息。模型通過(guò)接受自視圖查詢(xún),然后根據(jù)系統(tǒng)設(shè)定要求做出反應(yīng),在模型內(nèi)數(shù)據(jù)變化之下,可以利用視圖讓后者調(diào)整訪問(wèn)的狀態(tài),視圖可以把模型調(diào)整與更新,且控制器進(jìn)行模型訪問(wèn),最終滿足任務(wù)的要求。
視圖層主要是以程序和用戶之間交互提供基礎(chǔ)條件,這是在模型內(nèi)獲得相應(yīng)數(shù)據(jù)且按照某種標(biāo)準(zhǔn)直接展示出來(lái),在模型數(shù)據(jù)變化之后,視圖從模型內(nèi)獲取通知進(jìn)行視圖的變更;其可以是用戶輸入信息控制裝置。在MVC 模式中,該層沒(méi)有業(yè)務(wù)邏輯,只是和用戶進(jìn)行交互現(xiàn)實(shí),主要是通過(guò)JSP、HTML 界面實(shí)現(xiàn)。
控制層的作用是控制程序,能夠達(dá)到宏觀調(diào)控的效果,其可以給容器發(fā)送通知,根據(jù)自身需要選擇何種視圖與模型組建,在Web內(nèi)主要是通過(guò)Servlet 實(shí)現(xiàn)。
JSP(Jaw Server Pages)為Sun 創(chuàng)設(shè),由其他很多公司共同的研發(fā)之下所形成的動(dòng)態(tài)頁(yè)面標(biāo)準(zhǔn)。在設(shè)計(jì)中,HTML 代碼中內(nèi)加入了Java 代碼片段(scriptlet)和JSP 標(biāo)簽,從而可以形成JSP 網(wǎng)頁(yè)。在用戶發(fā)出請(qǐng)求之后,系統(tǒng)接收到相關(guān)信息,就會(huì)在系統(tǒng)內(nèi)產(chǎn)生Java代碼片段,并且通過(guò)系統(tǒng)處理將結(jié)果的HTML頁(yè)面展示在客戶端上,從而可以掌握頁(yè)面結(jié)果。JSP 頁(yè)面的作用就是處理邏輯、頁(yè)面控制與顯示等功能,這就讓W(xué)eb 設(shè)計(jì)有著一定的耦合性,維護(hù)管理難度較高,開(kāi)發(fā)人員不能確定合理的分工方法,程序復(fù)雜性也比較高。為了處理該問(wèn)題,Sun 公司研發(fā)了兩種模式可以選擇使用,模式一(Mode11)和模式-(Modal2)。Modell 在應(yīng)用中,具體可以分為兩層,也就是視圖層與模型層。圖1 就是模式一,雖然其頁(yè)面顯示與業(yè)務(wù)邏輯產(chǎn)生一定的分離性的作用,但是在JSP 頁(yè)面內(nèi)沒(méi)有完成編寫(xiě)的現(xiàn)實(shí),且業(yè)務(wù)流程控制與調(diào)用JavaBean 代碼都直接反應(yīng)在JSP 頁(yè)面中,如果邏輯相對(duì)比較復(fù)雜,且數(shù)據(jù)量比較大,很多內(nèi)嵌代碼會(huì)導(dǎo)致頁(yè)面變得更加的復(fù)雜,造成維護(hù)難度更高,操作也會(huì)更加的繁瑣。通過(guò)使用Modell 模式進(jìn)行小項(xiàng)目開(kāi)發(fā)有著很高的便利性,各個(gè)頁(yè)面都可以達(dá)到功能性標(biāo)準(zhǔn),如果根據(jù)需要進(jìn)行功能修改,就要進(jìn)行多個(gè)部分的修改,是無(wú)法實(shí)現(xiàn)頁(yè)面擴(kuò)展的。
圖1:MVC 模式1
為了有效的處理上述所提出的問(wèn)題,降低維護(hù)成本、簡(jiǎn)化修改程序,結(jié)合實(shí)際情況研發(fā)出Model2 模式,其會(huì)將JSP 與servlets 聯(lián)合應(yīng)用,可以直接展示出動(dòng)態(tài)化的內(nèi)容,即MVC 模式。能夠更好的實(shí)現(xiàn)用戶與系統(tǒng)的交互,在系統(tǒng)內(nèi)建設(shè)更加完善的程序框架形式。在具體的應(yīng)用實(shí)踐中,JSP 作為視圖層存在,作用是直接顯示出servlet 的控制層,直接給用戶發(fā)出請(qǐng)求,然后調(diào)用業(yè)務(wù)Bean,將處理后的結(jié)果反饋到顯示頁(yè)面中,JavaBean 作為模型層存在,顯示出邏輯關(guān)系,因此,在設(shè)計(jì)web 的程序中,發(fā)現(xiàn)Model2 模式應(yīng)用效果更好。
通過(guò)使用Model2 模式進(jìn)行程序設(shè)計(jì)的過(guò)程中,對(duì)于業(yè)務(wù)層內(nèi)實(shí)現(xiàn)封裝實(shí)體Bean 和業(yè)務(wù)Bean,前者是進(jìn)行實(shí)體封裝處置,而后者則是實(shí)現(xiàn)數(shù)據(jù)化操作。此時(shí)在業(yè)務(wù)Bean 中會(huì)實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接與關(guān)閉,在應(yīng)用環(huán)節(jié),一旦開(kāi)閉數(shù)據(jù)庫(kù)的頻率過(guò)高,就會(huì)導(dǎo)致資源浪費(fèi),產(chǎn)生較高的成本,這樣會(huì)在業(yè)務(wù)層內(nèi)融入數(shù)據(jù)連接池到系統(tǒng),就能夠消除這一問(wèn)題,系統(tǒng)運(yùn)行效果也會(huì)得到提升。在某個(gè)業(yè)務(wù)相對(duì)復(fù)雜的情況下,此時(shí)在Servlet 內(nèi)就不僅實(shí)現(xiàn)流程控制代碼與業(yè)務(wù)代碼,還會(huì)產(chǎn)生非常多的數(shù)據(jù)處理代碼,這樣可以減少Servlet 代碼數(shù)量,僅僅是通過(guò)Servlet 完成數(shù)據(jù)接收使用,可以進(jìn)行數(shù)據(jù)傳輸,其他工作都是在外部系統(tǒng)開(kāi)展,為了能夠達(dá)到功能性的標(biāo)準(zhǔn),還要把Servlet 內(nèi)數(shù)據(jù)處理代碼會(huì)封裝到Service 層中,Servlet 收到信息之后,根據(jù)請(qǐng)求的要求,跳轉(zhuǎn)到相應(yīng)的Service 中,在Service 內(nèi)可以完成數(shù)據(jù)處理和調(diào)用,以保證業(yè)務(wù)層順利運(yùn)行。
下面從登陸模塊開(kāi)發(fā)作為基礎(chǔ)進(jìn)行分析,充分了解NVC 在Jaya Web 內(nèi)實(shí)現(xiàn)的主要過(guò)程進(jìn)行分析,深入了解MVC 模式。用戶填寫(xiě)相關(guān)信息,利用界面顯示信息,把返回之后的信息界面當(dāng)做視圖(View);信息填寫(xiě)完成之后保證所有信息利用Form 表單提交后,然后可以依據(jù)action 轉(zhuǎn)到規(guī)定的控制器(Controller),然后其利用Servlet 完成,根據(jù)需要做好配置;有效的利用模型層(Mode1)和數(shù)據(jù)庫(kù)連接使用,檢驗(yàn)數(shù)據(jù)庫(kù)是否與輸入信息是相對(duì)應(yīng)的。
數(shù)據(jù)庫(kù)的連接主要是通過(guò)JDBC 技術(shù)來(lái)實(shí)現(xiàn),然后進(jìn)入到數(shù)據(jù)庫(kù)內(nèi),操作比較簡(jiǎn)單方便。但是該模式應(yīng)用到Web 程序開(kāi)發(fā),依然有如下問(wèn)題:首先,每一次Web 請(qǐng)求都會(huì)有效的實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接,這樣會(huì)導(dǎo)致資源閑置,也會(huì)有較大的浪費(fèi);其次,在實(shí)施數(shù)據(jù)庫(kù)連接中,使用結(jié)束后會(huì)斷開(kāi),否則一旦出現(xiàn)程序運(yùn)行不正常的情況,沒(méi)有技術(shù)關(guān)閉,導(dǎo)致系統(tǒng)泄漏情況發(fā)生,就要重新開(kāi)啟數(shù)據(jù)庫(kù)。因此,該開(kāi)發(fā)中,進(jìn)行控制創(chuàng)建系統(tǒng)連接對(duì)象分析,系統(tǒng)資源會(huì)沒(méi)有任何限制的基礎(chǔ)之下被分配,如果連接比較多,還會(huì)導(dǎo)致內(nèi)部泄漏的問(wèn)題,服務(wù)器不能正常工作。此時(shí)可以利用數(shù)據(jù)庫(kù)建設(shè)的連接池以實(shí)現(xiàn)數(shù)據(jù)庫(kù)打開(kāi)與關(guān)閉。這種理念就是在設(shè)計(jì)中創(chuàng)設(shè)“緩沖池”,預(yù)先在系統(tǒng)內(nèi)加入規(guī)定數(shù)量的連接方式,要進(jìn)行數(shù)據(jù)庫(kù)的連接,就要從該“緩沖池”內(nèi)調(diào)出一個(gè)數(shù)據(jù),使用結(jié)束后可以放回。
在具體的MVC 模式設(shè)計(jì)環(huán)節(jié),這其中的Model 是組成核心結(jié)構(gòu),雜用戶登陸之后,利用數(shù)據(jù)輸入或者在數(shù)據(jù)庫(kù)內(nèi)調(diào)出數(shù)據(jù)直接封裝成為User 類(lèi),然后模塊就能夠有效的應(yīng)用JavaBean 對(duì)象,在該封裝中書(shū)寫(xiě)getxxx 和setxxx 就能夠達(dá)到要求。要想能夠有效的實(shí)現(xiàn)功能性的擴(kuò)展和應(yīng)用,需要在設(shè)計(jì)完成之后的DAO 模式內(nèi)首先定義成為UserDAO 接口,并且按照要求接E1 的UserDAOImpl實(shí)現(xiàn)類(lèi),接口部位中的類(lèi)中定義進(jìn)行數(shù)據(jù)處理,但是并不會(huì)進(jìn)行數(shù)據(jù)庫(kù)關(guān)閉。
從實(shí)際情況分析可以確定,Web 一般可以分為服務(wù)器端與瀏覽器端。Java 與MVC 進(jìn)行全部的融合與處理之后,就能夠形成Web系統(tǒng),將其使用到JSP 頁(yè)面、HTML 頁(yè)面以及SwingGUI 頁(yè)面,可以直接顯示,然后和View 是相應(yīng)存在的,系統(tǒng)利用視圖能夠完成交互處理;通過(guò)使用Controller 完成用戶管理,保證數(shù)據(jù)處理更加高效的進(jìn)行; JaveBean 和模型是相應(yīng)存在的,完成業(yè)務(wù)邏輯分析,保證邏輯結(jié)構(gòu)更加清晰。MVC 系統(tǒng)應(yīng)用中,數(shù)據(jù)和業(yè)務(wù)是單獨(dú)存在的,邏輯結(jié)構(gòu)也更加的清洗。在數(shù)據(jù)顯示產(chǎn)生變化后,僅僅可以通過(guò)JSP 視圖界面修改就可以達(dá)到要求,并不會(huì)進(jìn)行模塊調(diào)整。相反,數(shù)據(jù)需求變化后,僅僅是進(jìn)行數(shù)據(jù)模塊處理就可以達(dá)到要求,所以系統(tǒng)內(nèi)可以進(jìn)行業(yè)務(wù)加入與處理,保證需求滿足要求。
在Web 程序中,MVC 模式應(yīng)用流程如下所示:在客戶端內(nèi)的JSP 網(wǎng)頁(yè)會(huì)提交到服務(wù)器內(nèi),終端按照用戶請(qǐng)求實(shí)現(xiàn)處理。控制器的工作環(huán)節(jié),根據(jù)業(yè)務(wù)之間的差異,可以把反饋后的信息按照標(biāo)準(zhǔn)進(jìn)行處理,然后把結(jié)果直接傳輸?shù)揭晥DJSP。處理工作結(jié)束后,視圖JSP 中以HTML 的形式發(fā)送到客戶端。在該模式應(yīng)用之下,程序包含下述內(nèi)容:
(1)Servlet 可以達(dá)到控制器的應(yīng)用效果,直接接收到客戶端的請(qǐng)求信息,然后通過(guò)最佳的方法處理請(qǐng)求;
(2)根據(jù)請(qǐng)求類(lèi)型,在Servlet 中創(chuàng)建JavaBean 對(duì)象,處理完成后把相應(yīng)信息數(shù)據(jù)傳輸給Bean 對(duì)象;
(3)Servlet 把信息傳輸?shù)綌?shù)據(jù)庫(kù)內(nèi),并且完成存儲(chǔ)工作,把相應(yīng)結(jié)果與JSP 相互對(duì)應(yīng),然后通過(guò)JSP 顯示在用戶界面;
(4)在Bean 內(nèi)進(jìn)行數(shù)據(jù)讀取,然后實(shí)現(xiàn)數(shù)據(jù)的連接,JSP 并不會(huì)直接和數(shù)據(jù)連接起來(lái),而是能夠直接將其傳輸?shù)接脩舳藘?nèi)。
在JSP 系統(tǒng)開(kāi)發(fā)之下,其主要是能夠?qū)崿F(xiàn)頁(yè)面顯示,根據(jù)實(shí)際需要實(shí)現(xiàn)頁(yè)面顯示,在流程與邏輯控制方面是應(yīng)用Servlet 來(lái)實(shí)現(xiàn),然后將邏輯相應(yīng)內(nèi)容通過(guò)分裝的方法直接存儲(chǔ)到Bean 之中。這種系統(tǒng)形式開(kāi)發(fā)設(shè)計(jì)中,保證頁(yè)面和業(yè)務(wù)邏輯關(guān)聯(lián)性產(chǎn)生很大的限制,但是系統(tǒng)的運(yùn)轉(zhuǎn)變得更加的靈活,今后的應(yīng)用也比較方便。當(dāng)前在程序開(kāi)發(fā)中,對(duì)MVC 模式被廣泛的應(yīng)用,也就是說(shuō),目前的Web應(yīng)用到程序開(kāi)發(fā)領(lǐng)域產(chǎn)生極為重要的作用。
現(xiàn)階段,以MVC 為基礎(chǔ)的框架較多,應(yīng)用最為廣泛的是Struts 框架,主要應(yīng)用的技術(shù)為JSP、JavaBean 以及Servlet 等等。在控制層中,主要包括Action、Servlet 與Mapping 等對(duì)象,其中Servlet 處于核心地位,可對(duì)用戶端請(qǐng)求進(jìn)行接受,并準(zhǔn)確找出與之相對(duì)的Action 和Mapping,利用Action 對(duì)業(yè)務(wù)模型進(jìn)行調(diào)用,最后通過(guò)Servlet 實(shí)現(xiàn)響應(yīng)以及請(qǐng)求轉(zhuǎn)發(fā)目標(biāo)。在模型層中,由Sruts提供From 對(duì)象,可記住定義屬性對(duì)用戶端的表單數(shù)據(jù)進(jìn)行解釋?zhuān)贏ction 處理器中,可對(duì)其進(jìn)行直接讀取,由此使View 與Model之間能夠相互支持。
通過(guò)使用MVC 模式可以真正的實(shí)現(xiàn)內(nèi)容與表達(dá)的分離處理,程序開(kāi)發(fā)人員進(jìn)行Servlet 和JavaBean 的開(kāi)發(fā)使用,每個(gè)系統(tǒng)人員負(fù)責(zé)不同的工作,可以順利完成大項(xiàng)目的開(kāi)發(fā)和設(shè)計(jì),操作也更加的方便,維護(hù)難度大幅降低,各類(lèi)人員可以有序完成自己的工作,展現(xiàn)出非常高的優(yōu)勢(shì)。