999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于組件和攔截器的Web系統(tǒng)權(quán)限設(shè)計與實現(xiàn)

2014-09-27 18:33:39趙秀霞付秀麗
現(xiàn)代電子技術(shù) 2014年8期

趙秀霞+付秀麗

摘要: 權(quán)限組件讓組件具有自省性,組件能夠智能地判斷自己的表現(xiàn)形式,不需要依賴于業(yè)務(wù)程序自身的控制,使其自身的獨立性、重用性和易用性大大提高;權(quán)限攔截器則可以對訪問進(jìn)行統(tǒng)一攔截,統(tǒng)一判斷權(quán)限,并能夠根據(jù)需要隨意“插拔”。通過權(quán)限組件與權(quán)限攔截器的配合工作,程序開發(fā)人員可以完全專注于業(yè)務(wù)的開發(fā),無需意識到權(quán)限控制的存在。

關(guān)鍵詞: 權(quán)限設(shè)計; 組件; 攔截器; AOP; Struts2

中圖分類號: TN919?34; TP311.52; TP393.08 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2014)08?0105?03

Permission design and implementation of Web system based on subassembly and interceptor

ZHAO Xiu?xia, FU Xiu?li

(School of Mechanical Engineering, University of Jinan, Jinan 250014, China)

Abstract:Permission subassembly has introspection property, can intelligently determine its own form of expression, and does not depend on the control of business program, so its independence, reusability and usability are greatly increased. The permission interceptor can intercept access, judge rights of applicants, and be able to be free to "plug". By cooperation with the permission subassembly and interceptor, developers can fully concentrate their efforts on the development of the business program, but do not consider the access control.

Keywords: permission design; subassembly; interceptor; AOP; Struts2

從權(quán)限控制項目的角度,Web系統(tǒng)的權(quán)限控制內(nèi)容包括2部分:頁面組件顯示控制和請求攔截控制。只有同時控制這2個部分,才能真正做到完全的權(quán)限控制,并讓使用者有較好的操作體驗。目前大部分的權(quán)限控制大多圍繞用戶角色進(jìn)行設(shè)計,本文在這種角色管理的基礎(chǔ)上,提出了基于權(quán)限組件和權(quán)限攔截器的設(shè)計思想。現(xiàn)代軟件設(shè)計更講究解耦和重用,通過權(quán)限組件和權(quán)限攔截器,能夠讓權(quán)限控制獨立于業(yè)務(wù)程序之外,開發(fā)人員可以將精力完全投入業(yè)務(wù)功能的實現(xiàn),無需意識權(quán)限控制的存在。實際的權(quán)限控制,則是通過頁面組件本身的自省性,自動根據(jù)訪問者的權(quán)限,表現(xiàn)出不同的形式(如顯示、不顯示、不可用等);同時,由于Web系統(tǒng)自身的特點,為了完全控制權(quán)限,還需要通過權(quán)限攔截器,對客戶端的請求進(jìn)行攔截,判斷訪問者是否具有訪問權(quán)限,決定是否允許訪問者繼續(xù)執(zhí)行當(dāng)前的請求。

1角色訪問控制

角色訪問控制作為一種經(jīng)典的權(quán)限解決方案[1],在Web開發(fā)中得到了廣泛的應(yīng)用。本文設(shè)計實現(xiàn)的權(quán)限組件與權(quán)限攔截器,在組件和攔截器內(nèi)部對訪問者權(quán)限進(jìn)行判斷時,同樣也采用的是基于角色的訪問控制方式。所謂角色訪問控制,無非就是采用分而治之的思想,將用戶劃分為不同角色,比如:經(jīng)理、科長、職員等,再分別授予每種角色不同的權(quán)限,然后將全部用戶劃歸到不同的角色中去,當(dāng)用戶向系統(tǒng)發(fā)出請求時,系統(tǒng)會首先查找出用戶所屬的角色,隨后再查找判斷該角色是否擁有所請求的資源的訪問權(quán)限,既而決定是否繼續(xù)執(zhí)行請求或是中止請求。圖1反映了這種訪問控制的處理過程。

2權(quán)限組件

對于Web開發(fā)來講,網(wǎng)頁的表現(xiàn)基本是通過HTML語言的代碼來詮釋的[2],然而HTML的各種標(biāo)簽,只提供了顯示功能,并不具備更高的可控性,為了實現(xiàn)權(quán)限組件,需要使用基于JEE實現(xiàn)的標(biāo)簽(Tag)來代替純粹的HTML標(biāo)簽,在其中通過增加權(quán)限判斷的處理,從而增加標(biāo)簽的自省特性,最終讓標(biāo)簽?zāi)軌蜃詣痈鶕?jù)訪問者的訪問權(quán)限來決定自己的表現(xiàn)形式。

圖1 訪問控制處理過程圖

本文通過給出一個權(quán)限按鈕的實現(xiàn)過程來具體說明如何實現(xiàn)權(quán)限組件。根據(jù)JEE的標(biāo)簽開發(fā)規(guī)范,首先需要實現(xiàn)一個標(biāo)簽類,并通過標(biāo)記庫描述文件對標(biāo)簽類進(jìn)行登記[3]。圖2是標(biāo)簽中權(quán)限判斷處理的流程圖。

圖2 標(biāo)簽中權(quán)限判斷處理的流程圖

對于需要根據(jù)權(quán)限判斷決定是否顯示的按鈕,只需要像下面那樣聲明一個按鈕標(biāo)簽,即可讓按鈕根據(jù)登錄用戶的權(quán)限來決定是否顯示自己。

以下是參考代碼:

<#?? 引入自定義標(biāo)簽庫 ??>

<#assign ipcat=JspTaglibs["/WEB?INF/tld/ipcat?tags.tld"]>

<#?? 使用自定義的權(quán)限按鈕 ??>

<@ipcat.button posturl="/customer/del" />

※ 這里使用的FreeMarker模板框架來渲染的表示層,同時Web層采用的是Struts2架構(gòu)。

通過實現(xiàn)權(quán)限組件,不僅可以讓組件自己決定是否顯示,而且提高了組件的重用性。任何需要進(jìn)行權(quán)限控制的頁面組件,均可以通過權(quán)限組件來生成出相應(yīng)的HTML標(biāo)簽代碼,當(dāng)然在生成之前必須通過權(quán)限組件的自省功能實現(xiàn)了權(quán)限控制,決定是否輸出實際的HTML代碼。

同樣的,可以將HTML的常用標(biāo)簽,如鏈接、Label、輸入框等都設(shè)計成JEE的標(biāo)簽,對于需要權(quán)限控制的HTML標(biāo)簽,直接使用自定義的標(biāo)簽就可以實現(xiàn)權(quán)限的自動控制了;同時,對于在線系統(tǒng)中最常見的“菜單”來說,也可以設(shè)計成自定義的標(biāo)簽,在其中進(jìn)行菜單項的權(quán)限控制,這樣就實現(xiàn)了可重用的具有權(quán)限判斷功能的菜單組件了,其本身可以根據(jù)登錄用戶的不同,自動決定顯示哪些菜單項、哪些菜單不可用(如:灰色并且點擊無效)等特性。

3權(quán)限攔載器

不同于以往的C/S結(jié)構(gòu),在Web系統(tǒng)中,即使將按鈕或鏈接隱藏了,系統(tǒng)使用者依然可以通過在瀏覽器的地址欄中直接輸入地址的方式來訪問沒有顯式鏈接的頁面。這樣,就算隱藏了按鈕或鏈接也并不能徹底杜絕用戶對于一些有特殊限定的網(wǎng)頁的訪問。為了避免用戶通過地址欄輸入地址直接訪問系統(tǒng)想進(jìn)行權(quán)限限定的資源,就必須設(shè)法在用戶訪問到這些資源之前,對用戶進(jìn)行識別,只有擁有訪問權(quán)限的用戶才能繼續(xù)訪問,而對于沒有訪問權(quán)限的用戶就直接將頁面跳轉(zhuǎn)到非法請求頁面。

為了實現(xiàn)以上處理,本文引入AOP的概念來進(jìn)行說明權(quán)限攔截器的設(shè)計思路[4]。AOP是OOP的延續(xù),是Aspect Oriented Programming的縮寫,意思是面向切面編程[5]。

AOP實際是GoF設(shè)計模式的延續(xù),設(shè)計模式孜孜不倦追求的是調(diào)用者和被調(diào)用者之間的解耦,AOP可以說也是這種目標(biāo)的一種實現(xiàn)。在進(jìn)行權(quán)限設(shè)計時,程序員在開發(fā)業(yè)務(wù)的過程中,為了限制系統(tǒng)訪問者的訪問,可能會將權(quán)限判斷處理加到業(yè)務(wù)處理的入口處,雖然可以將權(quán)限判斷的處理進(jìn)行封裝,但是這樣做依然還是避免不了將權(quán)限的控制與純粹的業(yè)務(wù)處理耦合在一起,不僅給維護(hù)帶來了復(fù)雜性,也給業(yè)務(wù)本身增加了不相關(guān)性。如果借助AOP的思想,將權(quán)限控制歸為一個切面,統(tǒng)一控制,讓權(quán)限控制徹底剝離到業(yè)務(wù)處理之外,這樣,程序員在開發(fā)的過程中,就可以完全專注于業(yè)務(wù)的開發(fā),而權(quán)限控制則可以由專注于權(quán)限業(yè)務(wù)的程序員來設(shè)計和實現(xiàn),并且可以根據(jù)客戶的需要,在實現(xiàn)的業(yè)務(wù)處理之外,通過配置的方式,靈活地設(shè)定各業(yè)務(wù)的權(quán)限范圍。圖3可以進(jìn)一步說明權(quán)限攔截器的設(shè)計思路。

請求A、B及C均想訪問同一業(yè)務(wù)處理,但是在他們到達(dá)業(yè)務(wù)處理之前,權(quán)限攔截器將對請求統(tǒng)一攔截,當(dāng)判斷請求A和B的用戶并不具有訪問權(quán)限時,請求會直接轉(zhuǎn)向非法頁面呈現(xiàn)給客戶,而對于請求C的用戶由于通過了權(quán)限的驗證,就可以有效地訪問到業(yè)務(wù)處理,并進(jìn)行相應(yīng)的數(shù)據(jù)處理了。為了實現(xiàn)對于權(quán)限的統(tǒng)一切面處理,本文結(jié)合Struts2的攔截器技術(shù),設(shè)計一個更加靈活的權(quán)限攔截器,不僅可以實現(xiàn)獨立于業(yè)務(wù)處理之外的權(quán)限控制,還可以讓權(quán)限控制做到可以任意“插拔”。

圖3 權(quán)限控制示意圖

攔截器(Interceptor)本身就是AOP思想的典型應(yīng)用,同時它也是Struts2的一個顯著特性,并且Struts2框架的大多數(shù)核心功能都是通過攔截器來實現(xiàn)的[6],像避免表單重復(fù)提交、對象組裝、驗證、上傳文件等。通過使用攔截器,能將系統(tǒng)中可以分離的統(tǒng)一處理,全部從系統(tǒng)中解耦,而不是分散到業(yè)務(wù)處理中,這樣的功能類似于個人電腦的組裝,變成了可插拔,需要某個功能時就“插入”一個攔截器,不需要某個功能時就“拔出”這個攔截器。了解了AOP及Struts2中攔截器的概念后,就可以實現(xiàn)一個基于Struts2攔截器處理機制的權(quán)限攔截器,并將權(quán)限攔截器通過配置文件與業(yè)務(wù)處理組裝起來 (注意:不是通過程序固化在一起),這樣的權(quán)限攔截器是完全獨立于業(yè)務(wù)處理之外的權(quán)限控制,需要時就配置上,不需要時就不必配置。

當(dāng)然,在權(quán)限攔截器的權(quán)限判斷部分,和權(quán)限組件一樣,也是基于角色進(jìn)行判斷的,先從Session中得到用戶的角色,然后判斷該角色是否具有對正在請求的地址的訪問權(quán)限,從而決定是放行,還是直接轉(zhuǎn)向非法訪問的錯誤提示頁面。很顯然,權(quán)限攔截器在實現(xiàn)了獨立于業(yè)務(wù)之外的權(quán)限控制功能之外,還具備可重用性,可以將權(quán)限攔截器反復(fù)“插入”到需要進(jìn)行權(quán)限控制的業(yè)務(wù)處理之前。

4結(jié)語

通過權(quán)限組件和權(quán)限攔截器,實現(xiàn)了業(yè)務(wù)邏輯與權(quán)限的解耦,讓權(quán)限完全獨立于純粹的業(yè)務(wù)功能之外,并且組件的重用性和攔截器的統(tǒng)一處理特性,都讓權(quán)限控制變得非常簡單靈活,利用Struts2框架設(shè)計的權(quán)限攔截器更可以實現(xiàn)權(quán)限控制的任意“插拔”,這一切,都將使系統(tǒng)的開發(fā)、維護(hù)和擴展也變得更加容易和輕松。

參考文獻(xiàn)

[1] 劉強.基于角色的訪問控制技術(shù)[M].廣州:華南理工大學(xué)出版社,2010.

[2] Jon Duckett.Web編程入門經(jīng)典:HTML,XHTML和CSS[M].

2版.北京:清華大學(xué)出版社,2010.

[3] 鄒化,方衛(wèi)寧,鄒蓉.Servlet/JSP程序設(shè)計技術(shù)與實現(xiàn)[M].北京:人民郵電出版社,2001.

[4] WALLS Craig, BREIDENBACH Ryan. Spring in Action [M]. [S.l.]: Manning Publications, 2006.

[5] 吳煒煜.面向?qū)ο蠓治鲈O(shè)計與編程:OOA/OOD/OOP/AOP[M].

2版.北京:清華大學(xué)出版社,2007.

[6] 孫鑫.Struts 2 深入詳解[M].北京:電子工業(yè)出版社,2008.

AOP實際是GoF設(shè)計模式的延續(xù),設(shè)計模式孜孜不倦追求的是調(diào)用者和被調(diào)用者之間的解耦,AOP可以說也是這種目標(biāo)的一種實現(xiàn)。在進(jìn)行權(quán)限設(shè)計時,程序員在開發(fā)業(yè)務(wù)的過程中,為了限制系統(tǒng)訪問者的訪問,可能會將權(quán)限判斷處理加到業(yè)務(wù)處理的入口處,雖然可以將權(quán)限判斷的處理進(jìn)行封裝,但是這樣做依然還是避免不了將權(quán)限的控制與純粹的業(yè)務(wù)處理耦合在一起,不僅給維護(hù)帶來了復(fù)雜性,也給業(yè)務(wù)本身增加了不相關(guān)性。如果借助AOP的思想,將權(quán)限控制歸為一個切面,統(tǒng)一控制,讓權(quán)限控制徹底剝離到業(yè)務(wù)處理之外,這樣,程序員在開發(fā)的過程中,就可以完全專注于業(yè)務(wù)的開發(fā),而權(quán)限控制則可以由專注于權(quán)限業(yè)務(wù)的程序員來設(shè)計和實現(xiàn),并且可以根據(jù)客戶的需要,在實現(xiàn)的業(yè)務(wù)處理之外,通過配置的方式,靈活地設(shè)定各業(yè)務(wù)的權(quán)限范圍。圖3可以進(jìn)一步說明權(quán)限攔截器的設(shè)計思路。

請求A、B及C均想訪問同一業(yè)務(wù)處理,但是在他們到達(dá)業(yè)務(wù)處理之前,權(quán)限攔截器將對請求統(tǒng)一攔截,當(dāng)判斷請求A和B的用戶并不具有訪問權(quán)限時,請求會直接轉(zhuǎn)向非法頁面呈現(xiàn)給客戶,而對于請求C的用戶由于通過了權(quán)限的驗證,就可以有效地訪問到業(yè)務(wù)處理,并進(jìn)行相應(yīng)的數(shù)據(jù)處理了。為了實現(xiàn)對于權(quán)限的統(tǒng)一切面處理,本文結(jié)合Struts2的攔截器技術(shù),設(shè)計一個更加靈活的權(quán)限攔截器,不僅可以實現(xiàn)獨立于業(yè)務(wù)處理之外的權(quán)限控制,還可以讓權(quán)限控制做到可以任意“插拔”。

圖3 權(quán)限控制示意圖

攔截器(Interceptor)本身就是AOP思想的典型應(yīng)用,同時它也是Struts2的一個顯著特性,并且Struts2框架的大多數(shù)核心功能都是通過攔截器來實現(xiàn)的[6],像避免表單重復(fù)提交、對象組裝、驗證、上傳文件等。通過使用攔截器,能將系統(tǒng)中可以分離的統(tǒng)一處理,全部從系統(tǒng)中解耦,而不是分散到業(yè)務(wù)處理中,這樣的功能類似于個人電腦的組裝,變成了可插拔,需要某個功能時就“插入”一個攔截器,不需要某個功能時就“拔出”這個攔截器。了解了AOP及Struts2中攔截器的概念后,就可以實現(xiàn)一個基于Struts2攔截器處理機制的權(quán)限攔截器,并將權(quán)限攔截器通過配置文件與業(yè)務(wù)處理組裝起來 (注意:不是通過程序固化在一起),這樣的權(quán)限攔截器是完全獨立于業(yè)務(wù)處理之外的權(quán)限控制,需要時就配置上,不需要時就不必配置。

當(dāng)然,在權(quán)限攔截器的權(quán)限判斷部分,和權(quán)限組件一樣,也是基于角色進(jìn)行判斷的,先從Session中得到用戶的角色,然后判斷該角色是否具有對正在請求的地址的訪問權(quán)限,從而決定是放行,還是直接轉(zhuǎn)向非法訪問的錯誤提示頁面。很顯然,權(quán)限攔截器在實現(xiàn)了獨立于業(yè)務(wù)之外的權(quán)限控制功能之外,還具備可重用性,可以將權(quán)限攔截器反復(fù)“插入”到需要進(jìn)行權(quán)限控制的業(yè)務(wù)處理之前。

4結(jié)語

通過權(quán)限組件和權(quán)限攔截器,實現(xiàn)了業(yè)務(wù)邏輯與權(quán)限的解耦,讓權(quán)限完全獨立于純粹的業(yè)務(wù)功能之外,并且組件的重用性和攔截器的統(tǒng)一處理特性,都讓權(quán)限控制變得非常簡單靈活,利用Struts2框架設(shè)計的權(quán)限攔截器更可以實現(xiàn)權(quán)限控制的任意“插拔”,這一切,都將使系統(tǒng)的開發(fā)、維護(hù)和擴展也變得更加容易和輕松。

參考文獻(xiàn)

[1] 劉強.基于角色的訪問控制技術(shù)[M].廣州:華南理工大學(xué)出版社,2010.

[2] Jon Duckett.Web編程入門經(jīng)典:HTML,XHTML和CSS[M].

2版.北京:清華大學(xué)出版社,2010.

[3] 鄒化,方衛(wèi)寧,鄒蓉.Servlet/JSP程序設(shè)計技術(shù)與實現(xiàn)[M].北京:人民郵電出版社,2001.

[4] WALLS Craig, BREIDENBACH Ryan. Spring in Action [M]. [S.l.]: Manning Publications, 2006.

[5] 吳煒煜.面向?qū)ο蠓治鲈O(shè)計與編程:OOA/OOD/OOP/AOP[M].

2版.北京:清華大學(xué)出版社,2007.

[6] 孫鑫.Struts 2 深入詳解[M].北京:電子工業(yè)出版社,2008.

AOP實際是GoF設(shè)計模式的延續(xù),設(shè)計模式孜孜不倦追求的是調(diào)用者和被調(diào)用者之間的解耦,AOP可以說也是這種目標(biāo)的一種實現(xiàn)。在進(jìn)行權(quán)限設(shè)計時,程序員在開發(fā)業(yè)務(wù)的過程中,為了限制系統(tǒng)訪問者的訪問,可能會將權(quán)限判斷處理加到業(yè)務(wù)處理的入口處,雖然可以將權(quán)限判斷的處理進(jìn)行封裝,但是這樣做依然還是避免不了將權(quán)限的控制與純粹的業(yè)務(wù)處理耦合在一起,不僅給維護(hù)帶來了復(fù)雜性,也給業(yè)務(wù)本身增加了不相關(guān)性。如果借助AOP的思想,將權(quán)限控制歸為一個切面,統(tǒng)一控制,讓權(quán)限控制徹底剝離到業(yè)務(wù)處理之外,這樣,程序員在開發(fā)的過程中,就可以完全專注于業(yè)務(wù)的開發(fā),而權(quán)限控制則可以由專注于權(quán)限業(yè)務(wù)的程序員來設(shè)計和實現(xiàn),并且可以根據(jù)客戶的需要,在實現(xiàn)的業(yè)務(wù)處理之外,通過配置的方式,靈活地設(shè)定各業(yè)務(wù)的權(quán)限范圍。圖3可以進(jìn)一步說明權(quán)限攔截器的設(shè)計思路。

請求A、B及C均想訪問同一業(yè)務(wù)處理,但是在他們到達(dá)業(yè)務(wù)處理之前,權(quán)限攔截器將對請求統(tǒng)一攔截,當(dāng)判斷請求A和B的用戶并不具有訪問權(quán)限時,請求會直接轉(zhuǎn)向非法頁面呈現(xiàn)給客戶,而對于請求C的用戶由于通過了權(quán)限的驗證,就可以有效地訪問到業(yè)務(wù)處理,并進(jìn)行相應(yīng)的數(shù)據(jù)處理了。為了實現(xiàn)對于權(quán)限的統(tǒng)一切面處理,本文結(jié)合Struts2的攔截器技術(shù),設(shè)計一個更加靈活的權(quán)限攔截器,不僅可以實現(xiàn)獨立于業(yè)務(wù)處理之外的權(quán)限控制,還可以讓權(quán)限控制做到可以任意“插拔”。

圖3 權(quán)限控制示意圖

攔截器(Interceptor)本身就是AOP思想的典型應(yīng)用,同時它也是Struts2的一個顯著特性,并且Struts2框架的大多數(shù)核心功能都是通過攔截器來實現(xiàn)的[6],像避免表單重復(fù)提交、對象組裝、驗證、上傳文件等。通過使用攔截器,能將系統(tǒng)中可以分離的統(tǒng)一處理,全部從系統(tǒng)中解耦,而不是分散到業(yè)務(wù)處理中,這樣的功能類似于個人電腦的組裝,變成了可插拔,需要某個功能時就“插入”一個攔截器,不需要某個功能時就“拔出”這個攔截器。了解了AOP及Struts2中攔截器的概念后,就可以實現(xiàn)一個基于Struts2攔截器處理機制的權(quán)限攔截器,并將權(quán)限攔截器通過配置文件與業(yè)務(wù)處理組裝起來 (注意:不是通過程序固化在一起),這樣的權(quán)限攔截器是完全獨立于業(yè)務(wù)處理之外的權(quán)限控制,需要時就配置上,不需要時就不必配置。

當(dāng)然,在權(quán)限攔截器的權(quán)限判斷部分,和權(quán)限組件一樣,也是基于角色進(jìn)行判斷的,先從Session中得到用戶的角色,然后判斷該角色是否具有對正在請求的地址的訪問權(quán)限,從而決定是放行,還是直接轉(zhuǎn)向非法訪問的錯誤提示頁面。很顯然,權(quán)限攔截器在實現(xiàn)了獨立于業(yè)務(wù)之外的權(quán)限控制功能之外,還具備可重用性,可以將權(quán)限攔截器反復(fù)“插入”到需要進(jìn)行權(quán)限控制的業(yè)務(wù)處理之前。

4結(jié)語

通過權(quán)限組件和權(quán)限攔截器,實現(xiàn)了業(yè)務(wù)邏輯與權(quán)限的解耦,讓權(quán)限完全獨立于純粹的業(yè)務(wù)功能之外,并且組件的重用性和攔截器的統(tǒng)一處理特性,都讓權(quán)限控制變得非常簡單靈活,利用Struts2框架設(shè)計的權(quán)限攔截器更可以實現(xiàn)權(quán)限控制的任意“插拔”,這一切,都將使系統(tǒng)的開發(fā)、維護(hù)和擴展也變得更加容易和輕松。

參考文獻(xiàn)

[1] 劉強.基于角色的訪問控制技術(shù)[M].廣州:華南理工大學(xué)出版社,2010.

[2] Jon Duckett.Web編程入門經(jīng)典:HTML,XHTML和CSS[M].

2版.北京:清華大學(xué)出版社,2010.

[3] 鄒化,方衛(wèi)寧,鄒蓉.Servlet/JSP程序設(shè)計技術(shù)與實現(xiàn)[M].北京:人民郵電出版社,2001.

[4] WALLS Craig, BREIDENBACH Ryan. Spring in Action [M]. [S.l.]: Manning Publications, 2006.

[5] 吳煒煜.面向?qū)ο蠓治鲈O(shè)計與編程:OOA/OOD/OOP/AOP[M].

2版.北京:清華大學(xué)出版社,2007.

[6] 孫鑫.Struts 2 深入詳解[M].北京:電子工業(yè)出版社,2008.

主站蜘蛛池模板: 婷婷六月在线| 国产成人h在线观看网站站| 日韩av手机在线| 熟妇丰满人妻| 亚洲综合18p| 免费在线看黄网址| 伊人久久精品无码麻豆精品| 精品自窥自偷在线看| 另类专区亚洲| jizz国产视频| 国产精品高清国产三级囯产AV| 中文字幕在线播放不卡| 欧美一区二区三区欧美日韩亚洲| 国产美女精品一区二区| 亚洲国产黄色| 中文字幕乱妇无码AV在线| 人与鲁专区| 成人午夜免费视频| 欧美精品在线视频观看| 免费久久一级欧美特大黄| 最新国产午夜精品视频成人| 国产国产人成免费视频77777 | 一级一级特黄女人精品毛片| yy6080理论大片一级久久| 国产精品欧美在线观看| 亚洲 日韩 激情 无码 中出| 囯产av无码片毛片一级| 欧洲欧美人成免费全部视频| 国产激情在线视频| 99在线小视频| 乱人伦99久久| 欧美亚洲国产视频| 亚洲一区国色天香| 在线免费亚洲无码视频| 亚洲精品中文字幕无乱码| 亚洲性视频网站| 国产成在线观看免费视频| 一区二区欧美日韩高清免费 | 久久国产拍爱| 国产精品极品美女自在线看免费一区二区| 久草青青在线视频| 欧美啪啪视频免码| 网友自拍视频精品区| 欧美精品1区2区| 国产特级毛片| 呦女亚洲一区精品| 国产免费福利网站| 亚洲精品无码av中文字幕| 国产成人做受免费视频| 99国产精品免费观看视频| 欧美日本中文| 亚洲AV无码乱码在线观看裸奔| 国产欧美日韩va另类在线播放| 男人天堂伊人网| 天堂网亚洲系列亚洲系列| 亚洲一本大道在线| 国产91色| 澳门av无码| 毛片免费在线| 午夜爽爽视频| 久久中文字幕2021精品| 久久精品丝袜| 国产一级毛片网站| 免费人欧美成又黄又爽的视频| 国产精品妖精视频| 国产人成乱码视频免费观看| 国产毛片久久国产| 亚洲国产精品无码AV| 国产精品思思热在线| 亚洲国产精品无码AV| 亚洲综合中文字幕国产精品欧美| 国产拍揄自揄精品视频网站| 天天综合天天综合| 午夜天堂视频| 国产99精品久久| 国产精品蜜臀| 国产99精品久久| 欧美中出一区二区| 亚州AV秘 一区二区三区| 99国产精品一区二区| 亚洲人成网址| 一级毛片免费不卡在线|