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

復雜語境下Web動態頁面分層重構方法研究?

2017-12-18 06:21:54李深圳卓勤政
計算機與數字工程 2017年11期
關鍵詞:頁面規則

李深圳 嚴 悍 戴 楠 卓勤政

(南京理工大學計算機科學與工程學院 南京 210094)

復雜語境下Web動態頁面分層重構方法研究?

李深圳 嚴 悍 戴 楠 卓勤政

(南京理工大學計算機科學與工程學院 南京 210094)

針對復雜語境下Web語境敏感頁面的頁面冗余問題,論文分析了傳統設計中頁面設計及在動態控制方面的不足,基于COP提出一種動態的基于語境為中心的層槽頁面(LSP,Layer-Slot Page)語法,給出LSP頁面實現原理。通過自定義語境表現層標簽實現動態頁面中語境約束的細粒度描述,并驅動Drools規則引擎計算規則文件,激活LSP分層信息。最后通過實例驗證該重構方案安全有效,具備語境變化的動態適應能力,支持細粒度的安全訪問控制。

語境敏感;LSP;Web重構;訪問控制

1 引言

在Web工作流系統中,隨著軟件的不斷演化,頁面動態性要求逐漸提高,使得業務邏輯判斷大量擴散至Web頁面中。在這種以頁面元素為中心的傳統設計方法中,密集而復雜的語境條件作用于多個頁面元素中,使得表現層的語境描述低效而極易出錯,同時語境信息散落在多個頁面中,導致元素及其語境約束條件大量冗余。

為了解決這一問題,本文嘗試基于已有的頁面元素標簽語法基礎上,引入COP(Context-Oriented Programming)[1]中的分層變化,提取動態頁面中的細粒度語境約束,通過Drools規則引擎[2]和自定義語境表現層標簽,驅動規則引擎執行語境約束條件,實現一種基于定制標簽的動態頁面分層重構方案。

2 問題分析

目前的Web頁面設計方案中,大多仍然采用面向以元素為中心的頁面設計方式,對一個受控元素需將所有相關條件完整描述,并描述各種條件所對應的不同變化,這導致頁面上相同或相似的約束條件散落在多個元素之上。

不同于普通業務代碼,Web動態頁面中的語境約束著業務無關的頁面元素,導致語境約束和元素緊耦合在一起,而元素可能出現在頁面不同的位置,文獻[3]中稱之為語境敏感。傳統的JSP/Struts2與后臺業務處理共同協作計算語境約束,雖然可以實現頁面元素的動態控制,但是具有以下幾個問題:

1)元素冗余。不同語境條件作用于同一頁面元素甚至頁面,將會導致頁面元素在不同位置多次出現。

2)語境約束的計算冗余。由于頁面設計以元素為中心,當同一語境作用于不同位置的元素時,語境約束的計算將會重復。對于遞進式的語境約束,傳統方式常常難以有效利用前序語境結果。

3)語境約束與業務邏輯耦合。當發生語境約束變更時,需要同時修改頁面和服務器端代碼文件并重啟服務器才能使更改生效。

4)難以維持訪問控制策略的一致性。在語境條件約束下,受控元素遵從細粒度的主動式訪問控制[4]策略實現。多角色在同一頁面的共存,顯著提高了語境約束的復雜度,將難以確保不同角色在正確的權限范圍內訪問系統。

同時EVP原則[5]要求良性系統封裝可變性,將語境條件分離并獨立封裝。因此本文在已有的頁面元素標簽語法基礎上,引入COP編程風格,借助于自定義標簽提取動態頁面中的語境約束,進行獨立封裝并細粒度描述,驅動Drools執行引擎計算語境約束條件,實現一種基于定制語境標簽的動態頁面分層重構方案。

3 語境分析與層槽頁面

3.1 面向語境編程

Context-Oriented Programming基于語境為中心,執行器根據語境動態地改變對象行為,實現語境化的模塊結構,解決復雜語境下不斷變化導致難以維護的問題。目前,最具代表性的COP語言(如:ContextL[6],ContextS[7],ContextJ[8]),普遍采用以層-槽結構描述行為變化的方式,在運行時根據語境條件激活相應的層,使層的變化作用于對象行為,最后執行該對象行為,具體的分為行為變化(Behavioral variations)、層(Layers)、激活(Activation)、語境(Context)、作用范圍(Scope)五個特性[1]。 圖1描述了COP語言的基本實現原理。

3.2 層槽頁面(LSP)

基于COP編程模型,本文實現一種動態的基于語境的層槽頁面(LSP,Layer-Slot Page),層槽頁面結構由共有元素和層槽信息組成。引入層槽結構將傳統的以元素為中心轉變為以語境條件為中心,使具有相同語境約束條件的元素變化封裝到同一層中,不同語境約束條件封裝在不同層,運行時根據語境條件激活不同的層級變化。

圖1 語境分層激活示意圖

1)層(Layer)用來表示特定語境條件下多個共有元素的行為變化,一旦激活其將被作用于共有元素,一個層中通常包含多個槽(Slot)。層在本文頁面設計中的定義如下:

<c:level constraints=“constraint 1,constraint 2,…”>

<li>E,P1=V1,P2=V2,…</li>

……</c:level>

2)槽(Slot)表示一個或一類元素的一組變化。采用變長三元組<E,P,V>來描述一個槽結構,具體含義如下:

E:表示頁面元素Element,即變化所作用的元素。共有元素中的某個元素的標識id或class(以class:開頭表示指定標識為class屬性),用于確定要發生變化的一個或一組元素。

P:表示屬性Property,即元素E的某個屬性名。例如,按鈕有value屬性和disabled等屬性。

V:表示屬性值Value,一個值,可以是單值或多值,表示增加或修改元素性質的結果。例如按鈕的class屬性值可以是“class1”,也可以是“class1 class2”。也可以為NULL,表示刪除當前屬性。

一個槽可描述一個元素的一個或多個屬性的增加或修改,但應避免同一層下多個槽對同一元素的同一屬性進行改變。例如同時需要在class為button1按鈕上的value屬性和disabled屬性上變化,應表示如下:

<li>class:button1,

value=click me,disabled=disabled</li>

3)根據上述層槽原理,LSP頁面分層實施組件部分采用客戶端實現,對激活槽的行為變化進行解釋并實施,算法原理如下:

ACTIVATION-ALGORITHM

1 for each layer:L

2 for each slot:<E,P1=V1,…,Pi=Vi,…>

3 for each variation:<E,Pi=Vi>

4 if Vi==NULL

5 E.Pi=NULL;

6 else

7 E.Pi=Vi;

8 end if

9 end for

10 end for

11 remove layer L description

12 end for

實施組件的作用過程在共有頁面元素渲染完之后,以及所有頁面資源加載完之前進行。變化實施組件采用 JavaScript[9]語言編程實現。

4 Web語境標簽驅動分層框架

基于Drools規則引擎收集語境信息,實現語境約束在規則文件中的可配置化,依據細粒度的語境執行結果激活不同的層,其實現原理如圖2。

圖2 基于Drools驅動的頁面分層示意圖

4.1 規則計算

Drools是一個基于Java的業務邏輯計算引擎,通常將復雜的業務邏輯封裝在后綴名為drl的規則文件中,規則文件是純文本文件,支持運行時動態修改,Drools支持數據傳遞,實現語境敏感的邏輯計算,并且作為結果返回,該數據對象通常被稱作Fact[10]。

本文規則引擎由定制標簽context的標簽處理方法驅動,并執行規則文件。規則文件在運行時可以按需動態執行,因此采用規則文件封裝語境變化,可以支持語境的動態配置,而無需重啟服務器。

規則文件中規則一般按優先級別順序執行,但是前后規則之間仍然存在多種關系,包括:

1)遞進:前序規則的執行條件是后序規則執行條件的必要條件;

2)制約:前序規則的執行結果影響后序規則的執行條件;

3)互斥:前序規則的執行條件與后序規則的執行條件互斥。

規則與動態頁面中的語境約束條件具備同質性,往往一個語境約束行為可以描述為一個規則,而規則名稱采用自然語言命名。為了支持語境約束的細粒度描述,并且保持與規則文件的一致性,本文約定在動態頁面中采用一個詞匯命名一個語境約束單元,并為之實現一個同名規則。于是語境約束的計算可以實現規則文件配置化處理,同時規則計算方式消除了冗余的語境約束條件。

4.2 定制標簽及標簽處理

本文采用兩種自定義語境標簽用于驅動規則引擎的執行,實現層槽信息的動態渲染,同時該框架實現包含定制標簽、標簽處理類、規則計算模塊、Fact語境對象和結果緩存。Web語境標簽驅動分層原理如圖3所示。

圖3 Web語境標簽驅動分層框架

其中,語境計算標簽context作為level標簽的父標簽,定義了ruleFiles屬性用于指定待執行規則文件,多個規則文件之間以逗號分隔。context標簽在后臺標簽處理方法中驅動執行引擎,并將執行結果保存在當前請求下的結果緩存中。level標簽通過指定constraints屬性,查詢當前層的細粒度語境約束結果,并控制層槽信息的動態生成。細粒度語境約束的描述可以采用規則文件名形式,以“!”符號取反,“,”表示細粒度語境約束間的邏輯與關系。假設標簽前綴為c,則上述定制標簽的具體使用語法如下:

<c:context ruleFiles=“file1.drl,file2.drl,…”>

<c:level constraints=“rule1,rule2,…”>

<li>E,P1=V1,…,Pi=Vi,…</li>

</c:level>

</c:context>

標簽處理過程中,規則文件的執行往往需要傳入一些當前請求下的語境信息,這些信息定義以<key,value>鍵值對形式封裝在 ContextBean對象中,ContextBean對象作為Fact對象傳入規則引擎的執行內存,并以RequestCache對象作為結果緩存,記錄最終執行結果。

5 實例與分析

在線派工服務系統是一個在線醫療養老服務平臺,目的是為線下醫療服務機構提供在線服務解決方案,是一個多角色多狀態復雜Web系統,由客戶、醫療機構管理員和醫療服務人員共同完成派工服務,系統中將一次派工服務的基本憑證定義為派工單。

5.1 應用

在線醫療派工服務系統,提供了對派工單的在線協同處理。該流程需要客戶、醫療機構管理員以及醫療服務人員協作完成。一個派工單處理頁面中尾部有一個處理按鈕,針對派工單的不同階段,分別對應不同的操作。具體的操作條件分別為

1)未派工。客戶提交服務請求后,機構管理員可以看見未處理的服務請求信息,按鈕狀態應為“派工”。

2)已派工。機構管理員對一個訂單執行派工操作后,服務人員將可以看見更新后的訂單信息,按鈕狀態應為“接單”。

3)待確認。服務人員接受派工服務,當前訂單即更新為待確認狀態,等待客戶處理,按鈕狀態應為“確認”。

一個標準派工單服務活動如圖4所示。

圖4 訂單服務活動圖

上述派工單服務流程,每一個訂單的服務狀態下都蘊含一個復雜語境約束,在現行頁面方案中,多數仍采用多頁面多元素方式處理,所以至少需要“派工”、“接單”、“確認”三個按鈕協作完成本次流程。本文采用LSP客戶端頁面,針對上述流程僅需采用同一頁面,設計一個共有按鈕元素,然后在語境約束滿足情況下,實施組件激活對該元素進行的渲染。共有按鈕設計如下:

<input id=“confirmBtn ”type=“button”/>

動態LSP頁面要求運行時激活層級變化,需要使用context標簽和level標簽,描述并驅動語境約束執行,本文將語境進行細粒度描述,并在規則文件中定義對應的規則。

<c:context ruleFiles=“authority.drl,orderFlow.drl”>

<c:level constraints=“admin,!dispatched”>

<li>confirmBtn,value=派工</li>

</c:level>

<c:level constraints=“servant,dispatched,!solved”>

<li>confirmBtn,value=接單</li>

</c:level>

<c:level constraints=“client,solved ,!confirmed ”>

<li>confirmBtn,value=確認</li>

</c:level>

</c:context>

其中兩個規則文件authority.drl,orderFlow.drl分別對應角色訪問控制規則和訂單狀態規則,其中角色訪問控制規則用于判定客戶角色對當前操作的有效性,定義了ADMIN,SERVANT,CLIENT三個規則。其中ADMIN規則如下:

rule“ADMIN”

when

$contextBean :ContextBean()

eval(roleValidation($contextBean))

then

ServletRequest request

=(ServletRequest)$contextBean.get(“request”);

RequestCache resultCache=(RequestCache)

request.getAttribute(“resultCache”);

resultCache.put(“admin”,Boolean.TRUE);

end

規則計算完成后,level標簽處理方法便可以依據結果緩存中的admin屬性判定“admin”約束是否成立。

訂單狀態規則中定義了dispatched,accepted,confirmed三個規則,對應請求單的狀態判斷。其中

dispatched規則描述如下:

rule“DISPATCHED”

when

$contextBean :ContextBean()

eval(getRequest($contextBean)

.getDispatchTime()!=null)

then

ServletRequest request

=(ServletRequest)$contextBean.get(“request”);

RequestCache resultCache=(RequestCache)

request.getAttribute(“resultCache”);

resultCache.put(“dispatched”,Boolean.TRUE);

end

依據這些規則計算,最終level標簽處理可以動態控制層級信息,實現按鈕狀態與語境約束間的一致性,減少了按鈕元素的冗余,同時采用獨立的規則文件分離了語境約束,實現復雜語境下的語境約束和頁面元素的低冗余重構。

5.2 分析與比較

本文基于COP編程思想,實現動態頁面的一種分層重構方案。本方案適用于Web語境敏感頁面,支持復雜語境約束的細粒度描述,支持動態配置。

與傳統的Jsp/Struts2頁面比較,本文所提方案具有以下特點:

1)封裝變化與可擴展。重構后,將Web敏感頁面中的以元素為中心轉移到以語境約束為中心,封裝語境條件的同時,消除由語境約束變化造成的頁面元素冗余。

2)語境約束松耦合。語境約束條件不斷變化,并且相互之間存在緊耦合的依賴關系,本文將語境約束細粒度描述,并采用規則式組織,使得各LSP層間的語境約束松耦和,編寫LSP層時,僅依賴于當前層所受語境約束。

3)訪問控制策略分離。采用Drools規則文件組織語境約束條件,易于實現訪問控制級別的語境約束共享,如建立一個authority.drl,其中定義了各類角色規則。當實施元素級別的細粒度訪問控制時,僅需配置authority.drl文件中的相應角色的規則信息。易于維持訪問控制策略的一致性,確保系統安全性。

6 結語

針對復雜的語境敏感的Web頁面,本文基于COP中的分層變化編程思想,提取動態頁面中的細粒度語境約束,通過Drools規則引擎和自定義語境表現層標簽,驅動規則引擎執行語境約束條件,實現一種基于定制語境標簽的動態頁面分層重構方案。該方案將散布在頁面中的語境約束條件轉移到規則文件中描述,支持語境變化的動態可配置,支持細粒度控制元素變化,同時在頁面中以語境約束為中心,激活LSP層槽變化,消除頁面元素及語境約束冗余。

本文方法適用于復雜Web語境敏感的頁面,包括:1)語境約束條件密集繁復;2)語境約束與業務邏輯代碼耦合;3)需要大量元素級別的訪問控制。

[1]Hirschfeld R,Costanza P,Nierstrasz O.Context-oriented Programming[J].Journal of Object Technology,2015,7(3):125-151.

[2]Proctor M,Neale M,Lin P,et al.Drools documentation[EB/OL].http://www.drools.org/learn/documentation.html,2015-12-10.

[3]Gregory D.Towards a better understanding of context and context-awareness[J].Handheld and ubiquitous Computing.Berlin:Springer,2000:304-307.

[4]蔣明輝.基于動態語境實現主動式Web訪問控制[D].南京:南京理工大學,2012:17-23.JIANG Minghui.The Implementation of Active Access Control based on Dynamic Context[D].Nanjing:Nanjing University of Science&Technology,2012:17-23.

[5]Meyer B.Object-oriented software construction[M].London:Prentice Hall,1988:53-64.

[6]Costanza P,Hirschfeldb R.Reflective layer activation in ContextL[J].Springer Verlag,2007:1280-1285.

[7]Hirschfeld R.Aspects-aspect-oriented programming with squeak[M].Objects,Components,Architectures,Services,and Applications for a Networked World.Springer Berlin Heidelberg,2003:216-232.

[8]Appeltauer M,Hirschfeld R,Haupt M,et al.ContextJ:Context-oriented programming with Java[J].Information and Media Technologies,2011,6(2):399-419.

[9]Keith J,Sambells J.DOM Scripting:Web Design with JavaScript and the Document Object Model[M].Apress,2010:7-44.

[10]Browne P.Drools JBoss rules 5.X developer's guide[M].Packt Publishing,2013:79-97.

Research on Refactoring Method of Web Dynamic Page Based on Complex Context

LI Shenzhen YAN Han DAI Nan ZHUO qinzheng
(School of Computer Science&Engineering,Nanjing University of Science&Technology,Nanjing 210094)

Considering complex context,for the problem of page redundancy in Web context-aware page,the traditional method of page design and the deficiency in dynamic control is analysed in this paper,and the COP as a reference to propose a dynamic Layer-Slot page syntax which is centered on context is taken,while given the working principle.Through the definition of the presentation layer label correlated with context,the context constraint fine-grained access control in dynamic page is achieved,then it drives the Drools engine to compute rule files and activate the LSP layer information.Finally,the security and efficiency of the refactoring method is validated,which has the ability to adapt with the changeable context and provides the fine-grained security access control.

context-aware,LSP,Web refactoring,access control

TP311

10.3969/j.issn.1672-9722.2017.11.029

Class Number TP311

2017年5月9日,

2017年6月11日

李深圳,男,碩士,研究方向:軟件工程與應用。嚴悍,男,博士,副教授,研究方向:信息安全與軟件工程。

戴楠,男,碩士,研究方向:軟件工程與應用。卓勤政,男,碩士,研究方向:軟件工程與應用。

猜你喜歡
頁面規則
微信群聊總是找不到,打開這個開關就好了
大狗熊在睡覺
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
撐竿跳規則的制定
數獨的規則和演變
規則的正確打開方式
幸福(2018年33期)2018-12-05 05:22:42
讓規則不規則
Coco薇(2017年11期)2018-01-03 20:59:57
TPP反腐敗規則對我國的啟示
搜索新規則
同一Word文檔 縱橫頁面并存
主站蜘蛛池模板: 国产浮力第一页永久地址| 任我操在线视频| 国产九九精品视频| 亚洲人成网站观看在线观看| 日韩东京热无码人妻| 一区二区三区国产| 18禁高潮出水呻吟娇喘蜜芽| 久久久久青草大香线综合精品 | 亚洲侵犯无码网址在线观看| 欧美亚洲另类在线观看| 国产亚洲精久久久久久久91| 欧美三级不卡在线观看视频| 91精品最新国内在线播放| 欧美三级日韩三级| 91精品专区| 97国产在线播放| 美女免费精品高清毛片在线视| 91美女视频在线观看| 91网红精品在线观看| 国产在线观看一区精品| 中文字幕永久视频| 国产精品开放后亚洲| 四虎国产精品永久在线网址| 久久亚洲天堂| 国产丝袜第一页| 精品视频第一页| 亚洲二区视频| 最新日韩AV网址在线观看| 欧洲在线免费视频| 国产导航在线| 国产日产欧美精品| 午夜视频免费一区二区在线看| 国产91无码福利在线| 日韩东京热无码人妻| 免费aa毛片| 国产美女人喷水在线观看| 中文字幕亚洲精品2页| 久久黄色视频影| 国产精品美女免费视频大全| 欧美日韩导航| 日韩少妇激情一区二区| 特级毛片免费视频| 亚洲国产欧洲精品路线久久| 国产区免费| 99草精品视频| 国产视频 第一页| 激情无码字幕综合| 久久人人爽人人爽人人片aV东京热 | 亚洲第一极品精品无码| 乱人伦中文视频在线观看免费| yjizz视频最新网站在线| 麻豆精品久久久久久久99蜜桃| 91亚瑟视频| 国产精品开放后亚洲| aa级毛片毛片免费观看久| 亚洲人成网站观看在线观看| 亚洲国产日韩在线观看| 中文字幕在线看| 日本国产在线| 青青青伊人色综合久久| 国产浮力第一页永久地址 | 99热这里都是国产精品| 国产特级毛片aaaaaa| 日本免费a视频| 一级毛片免费观看久| 欧美在线国产| 亚欧成人无码AV在线播放| 亚洲综合经典在线一区二区| 亚洲高清中文字幕| 91国内在线视频| 精品伊人久久大香线蕉网站| 欧美中文一区| 免费观看三级毛片| 激情六月丁香婷婷四房播| 国产91线观看| 特级做a爰片毛片免费69| 国产一级小视频| 国产午夜福利亚洲第一| 国产9191精品免费观看| 亚洲第一极品精品无码| 国产成人精品日本亚洲| 亚洲高清在线播放|