• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      混合方式數(shù)據(jù)驗證方案的研究

      2013-11-30 05:02:12陳建勛
      計算機工程與設(shè)計 2013年1期
      關(guān)鍵詞:表單監(jiān)聽服務(wù)器端

      劉 成,張 凱,陳建勛

      (武漢科技大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,湖北 武漢430065)

      0 引 言

      在企業(yè)級信息系統(tǒng)中,數(shù)據(jù)的準(zhǔn)確性、合法性是企業(yè)關(guān)注的核心。數(shù)據(jù)驗證是指對數(shù)據(jù)在特定的上下文中的合法性檢查,是過濾非法數(shù)據(jù)的安全屏障[1]。在企業(yè)級應(yīng)用項目中,幾乎所有與用戶交互相關(guān)的地方也都會用到數(shù)據(jù)驗證,它既可以防止非法數(shù)據(jù)進入系統(tǒng)內(nèi)部,又可以及時為用戶反饋錄入數(shù)據(jù)的驗證結(jié)果。所以,數(shù)據(jù)驗證是提高軟件系統(tǒng)魯棒性的一個關(guān)鍵過程。

      一般來說,數(shù)據(jù)驗證根據(jù)不同的因素有不同的類型劃分。從場所上來說分為:客戶端驗證、服務(wù)器端驗證和數(shù)據(jù)庫端驗證。從驗證時機來說分為:用戶輸入時驗證和用戶輸入后驗證。其中驗證輸入時只能在客戶端實現(xiàn)。從驗證復(fù)雜度來說分為:錄入控制、域完整性校驗、實體完整性校驗和參照完整性校驗。錄入控制是約束用戶輸入的每個字符;域完整性校驗指輸入項要有指定的規(guī)則;實體完整性校驗指在域完整性的前提下,不同域之間是否存在相互矛盾;參照完整性校驗指在滿足以上驗證基礎(chǔ)上還要考慮到數(shù)據(jù)在數(shù)據(jù)庫表中主鍵不能重復(fù)的問題等。

      當(dāng)前大多數(shù)數(shù)據(jù)驗證方案:只實現(xiàn)驗證復(fù)雜度中域完整性校驗,從而數(shù)據(jù)驗證功能不夠全面;驗證場所單一化,導(dǎo)致服務(wù)器端效率較低。如文獻[2]提出了一種面向切面的數(shù)據(jù)驗證組件設(shè)計方案,該方案只在服務(wù)器端進行數(shù)據(jù)驗證,驗證場所單一,不能實現(xiàn)驗證復(fù)雜度中的錄入控制,會降低用戶與系統(tǒng)的交互效率。文獻[3]提出了基于Valang技術(shù)的數(shù)據(jù)驗證方案,該方案能實現(xiàn)完整的數(shù)據(jù)驗證功能,但驗證功能在客戶端和服務(wù)器兩端有重復(fù)性工作,服務(wù)器端性能沒有最優(yōu)化,并且移植性較不好。為了克服以上問題,本文提出一種客戶端和服務(wù)器端在驗證復(fù)雜度上進行分工合作的混合驗證方案。

      1 混合驗證方案的設(shè)計

      基于系統(tǒng)的移植性和維護性,開發(fā)者一般不采用數(shù)據(jù)庫端驗證的方式。要實現(xiàn)一個完善的數(shù)據(jù)驗證功能,應(yīng)該包括4種驗證復(fù)雜度。從驗證場所來說,不管是客戶端數(shù)據(jù)驗證還是服務(wù)器端數(shù)據(jù)驗證都不能覆蓋所有驗證復(fù)雜度,但兩者的并集可以實現(xiàn)所有的驗證復(fù)雜度驗證。

      本文驗證方案的整體組織結(jié)構(gòu)圖如圖1所示。將驗證復(fù)雜度中的錄入控制驗證和域完整性驗證在客戶端實現(xiàn),實體完整性驗證和參照完整性在服務(wù)器端實現(xiàn)。其依據(jù)是:把盡可能多的任務(wù)放到客戶端處理是提高服務(wù)器端效率的有效途徑。在上述的驗證復(fù)雜度中,前兩者只涉及到詞法分析,可以在客戶端完成;后兩者需要語義分析,需要在服務(wù)器端進行。但同時為了數(shù)據(jù)驗證的安全性,在客戶端驗證失效時,服務(wù)器端也能處理域完整性驗證。

      圖1 驗證方案的組織結(jié)構(gòu)

      1.1 客戶端數(shù)據(jù)驗證方案設(shè)計

      以往客戶端表單的數(shù)據(jù)驗證中,一般在文本對象模型(document object model,DOM)元素中指定了點擊事件的觸發(fā)函數(shù),如給提交按鈕指定onClick觸發(fā)事件,并在此函數(shù)中進行數(shù)據(jù)驗證。該驗證函數(shù)逐個檢驗表單中每個組件的值,若全部驗證成功則執(zhí)行后臺操作,否則提示用戶錯誤的表單項,阻止后續(xù)的操作。這種實現(xiàn)在邏輯上易于理解,但是表示層的組件代碼需要引用驗證函數(shù),而驗證函數(shù)也要引用表單項組件,兩者不能獨立開來,導(dǎo)致耦合度較高,不易于維護和擴展,重用性也較低。

      針對此問題,提出了在客戶端以事件監(jiān)聽方式分離表示層和表示層數(shù)據(jù)驗證的方案??蛻舳蓑炞C的模型包括XML文件、表單、驗證文件、事件監(jiān)聽器。其具體框架如圖2所示。

      圖2 客戶端驗證框架

      在圖2中,驗證模型的各個部分之間的功能如下:

      (1)XML配置文件。它描述對應(yīng)表單中具體表單項所采用的驗證方式。它以驗證類(Validator類及其子類)的數(shù)組形式被加載到程序中。在客戶端框架中,由于表單多樣化,XML文件需要編程人員具體編寫。XML文檔包括一個根結(jié)點和多個第二級結(jié)點,其格式約定如下:

      <FormValidator>

      <Validator type=”String”expression=””source=””/>

      <Validator type=”Number”source=””/>

      </FormValidator>

      在第二級結(jié)點中,type屬性代表域完整性驗證的類型,expression表示按照正則表達式規(guī)則驗證匹配,source對應(yīng)表單組件的id。

      (2)Validator類及其子類。該類的source屬性指向表單中要驗證的表單項元素,擁有對目標(biāo)元素數(shù)據(jù)值驗證的功能。Validator1和Validator2是Validator的不同子類,比如用來驗證數(shù)字的驗證類和用來驗證日期的驗證類等。

      (3)表單。只描述表示層具體元素和排版信息,無需關(guān)心元素的value值是否需要驗證。

      (4)事件監(jiān)聽器。事件監(jiān)聽器FormValidator通過加載XML文件中的配置,把對應(yīng)表單的驗證需求信息以Validator類的形式全部存入其中。然后通過Validator給表單項添加上監(jiān)聽事件,并監(jiān)聽Validator類的驗證結(jié)果。

      1.2 服務(wù)器端數(shù)據(jù)驗證方案設(shè)計

      服務(wù)器端數(shù)據(jù)驗證完成驗證復(fù)雜度中的實體完整性驗證和參照完整性驗證。當(dāng)用戶取消客戶端腳本運行狀態(tài)時,客戶端驗證將失效,然而域完整性控制驗證是系統(tǒng)安全性保障的必要條件,故服務(wù)器端需要域完整性驗證。面向切面編程(aspect-oriented programming,AOP)技術(shù)能較好的分離服務(wù)器端驗證模塊和系統(tǒng)業(yè)務(wù)邏輯模塊,使代碼耦合度更低,Valang可以解決域完整性控制驗證,并且侵入性?。?]。因此,本文采用AOP和Valang技術(shù)來實現(xiàn)服務(wù)器端的數(shù)據(jù)驗證。

      當(dāng)客戶端數(shù)據(jù)傳到服務(wù)器端,服務(wù)器端執(zhí)行相應(yīng)的業(yè)務(wù)邏輯處理。在執(zhí)行業(yè)務(wù)邏輯前AOP切面類截獲處理函數(shù)的參數(shù)并阻止業(yè)務(wù)處理函數(shù)的執(zhí)行,然后對截獲的數(shù)據(jù)進行驗證,從而實現(xiàn)業(yè)務(wù)邏輯和驗證模塊的完全分離。服務(wù)器端數(shù)據(jù)驗證的數(shù)據(jù)流圖如圖3所示。

      圖3 服務(wù)器端數(shù)據(jù)驗證數(shù)據(jù)流

      服務(wù)器端數(shù)據(jù)驗證主要進行了實體完整性驗證和參照完整性驗證,這些數(shù)據(jù)驗證涉及到系統(tǒng)中的邏輯性問題。譬如,工程的開工日期不能大于結(jié)束日期、身份證的隱含性別和填寫性別不能矛盾、憑據(jù)有效日期在幾個月之內(nèi)、數(shù)據(jù)庫表能接受當(dāng)前信息的插入等。而在服務(wù)器端的域完整性驗證是在客戶端驗證失效的情況下才執(zhí)行,其通常是約定參數(shù)的格式。譬如,時間的格式、身份證號碼的格式等。服務(wù)器端數(shù)據(jù)驗證模塊結(jié)構(gòu)圖如圖4所示。

      圖4 服務(wù)器端數(shù)據(jù)驗證模塊類結(jié)構(gòu)

      Java能較好的闡述邏輯性問題,適合實體完整性驗證和參照完整性驗證;Valang支持以XML配置方式來約束驗證項的約束規(guī)則,適合域完整性驗證。在圖5中通過Java編碼方式實現(xiàn)實體完整性驗證和參照完整性驗證,從Spring IoC(inversion of control,控制反轉(zhuǎn))容器中取得驗證規(guī)則并用Valang方式實現(xiàn)域完整性驗證。

      2 混合驗證方案的實現(xiàn)

      2.1 客戶端事件監(jiān)聽方案工作流程

      DOM是一種與瀏覽器、平臺、語言無關(guān),允許程序和腳本動態(tài)的訪問和更新HTML與XML文件內(nèi)容、結(jié)構(gòu)和樣式的API[4]。DOM定義了標(biāo)準(zhǔn)的事件機制,目前大部分主流的瀏覽器實現(xiàn)了該事件機制[5]。在DOM標(biāo)準(zhǔn)下除了可以直接為DOM元素指定事件,也可以通過注冊的方式為DOM元素綁定事件[6]。本文客戶端驗證方案的核心是通過獨立于表示層外的XML文檔來為表示層組件注冊on-Change事件。

      客戶端驗證方案的工作流程在時間上分為兩個階段。第一個是程序加載時的初始化階段:①初始化一個Form-Validator對象用來控制表單驗證;②把XML靜態(tài)配置文件中的每個結(jié)點轉(zhuǎn)化成Validator對象添加到FormValidator中,為每個Validator對象的源目標(biāo)source注冊onChange監(jiān)聽事件。設(shè)置每個Validator對象的觸發(fā)者trigger為FormValidator;③在FormValidator中初始化一個bool類型數(shù)組voteMap,其中的元素對應(yīng)每個Validator是否驗證成功的布爾值,全部初始化為false;④設(shè)置每個Validator對象驗證成功和驗證失敗的監(jiān)聽函數(shù),在這個監(jiān)聽函數(shù)中回調(diào)自定義的函數(shù)。

      第二個階段是用戶開始向表單中錄入數(shù)據(jù):①用戶在表單中錄入數(shù)據(jù),觸發(fā)表單元素的onChange事件;②on-Change事件被FormValidator監(jiān)聽,F(xiàn)ormValidator中定義了對應(yīng)的監(jiān)聽函數(shù),并分派出CHANGE事件;③在初始化階段設(shè)定了Validator的觸發(fā)者為FormValidator,當(dāng)FormValidator派出CHANGE事件時會使Validator進行表單項數(shù)據(jù)驗證,并對驗證的結(jié)果發(fā)出valid(驗證合法事件)或invalid(驗證不合法事件);④在FormValidator中設(shè)定了對Validator發(fā)出的valid和invalid事件的監(jiān)聽,然后做出相應(yīng)的回調(diào)事件。圖5是用戶在錄入時,客戶端進行的一次數(shù)據(jù)驗證時序圖。

      圖5 用戶輸入時驗證的一次驗證時序圖

      2.2 服務(wù)器端數(shù)據(jù)驗證實現(xiàn)

      AOP為開發(fā)者提供了另一種組織應(yīng)用程序結(jié)構(gòu)的方式,不再是面向?qū)ο缶幊蹋∣bject Oriented Programming,OOP)中的類和接口,它主要的編程元素是切面(aspect),故它善于解決項目中的橫切性問題[7-8]。

      目前,成熟的AOP框架比較多,它們都是針對不同的目的,基于不同的技術(shù)實現(xiàn)。但主流的有AspectJ、JBoss AOP、Spring AOP三個開源的框架[9]。本文采用Spring AOP框架實現(xiàn)服務(wù)器端數(shù)據(jù)驗證。Spring AOP的基本術(shù)語見表1。

      表1 Spring AOP基本術(shù)語

      在Spring AOP應(yīng)用中,開發(fā)者只需進行AOP的相關(guān)配置。本文涉及以下配置項,切面類(Aspect):業(yè)務(wù)邏輯中橫切性的問題,如數(shù)據(jù)驗證;切入點(PointCut):切面動作切入到業(yè)務(wù)邏輯中的具體位置,通常是一串匹配符;連接點(JoinPoint):切入點地方的業(yè)務(wù)邏輯,在Spring中是業(yè)務(wù)邏輯中的某些函數(shù);通知(Advice):決定切面在連接點之前還是之后等。Spring AOP含有5種advice,Before、After、AfterReturning、AfterThrowing、Around,其中Around是所有通知類型中功能最為強大的,能夠全面控制連接點,決定何時執(zhí)行連接點甚至短路連接點,起到一個真正攔截器的作用[10]。數(shù)據(jù)驗證如果不通過,那么業(yè)務(wù)邏輯就不會執(zhí)行,用Around通知可在此時短路業(yè)務(wù)邏輯。

      Valang是一種支持聲明式的驗證器。作為一種新型的驗證工具,它提供了專門的驗證語言,具有簡單、易擴展和可讀性高等特性。Valang除了可以應(yīng)用到Spring MVC(module-view-control,模型-視圖-控制)框架中,還可以對簡單Java對象(plain old java objects,POJO)進行驗證[11]。Valang支持XML配置方式,可以通過Spring的IoC把驗證類注入到環(huán)境中從而降低了耦合度[12]。為了提高驗證的絕對安全性,本文采用Valang作為 “替補”,僅在客戶端失效的時候代替客戶端完成域完整性驗證:用Valang驗證語言定制表達式,并通過Spring依賴注入(depending injection,DI)方式注入到Bean標(biāo)記定義的驗證器的Valang屬性中。驗證器由Valang框架提供,開發(fā)者只需配置與POJO對應(yīng)的屬性約束。其約束性驗證語言通俗易懂且與系統(tǒng)低耦合。

      3 驗證方案的實際運行

      3.1 客戶端驗證方案的使用方式

      在客戶端驗證方案中實現(xiàn)了驗證核心類FormValidator和對數(shù)據(jù)進行域完整性驗證的Validator類。在使用的過程中分為如下3步:①編寫對應(yīng)一個表單的XML文件;②在客戶端頁面加載程序中初始化FormValidator對象,并加載XML文檔;③設(shè)定FormValidator對象的驗證失敗和驗證成功時的回調(diào)函數(shù),通常是設(shè)定 “提交按鈕”是否可用。其中②③步驟在不同的應(yīng)用中使用方式都一樣,所以客戶端驗證方案的主要任務(wù)是編寫對應(yīng)表單的XML文件。XML文件的約束格式簡單,能適應(yīng)表單的需求變化,靈活性強。

      3.2 服務(wù)器端驗證方案的使用方式

      在服務(wù)器端的驗證方案中,實現(xiàn)技術(shù)是Spring AOP和Valang技術(shù)。AOP技術(shù)跟驗證模塊沒有直接的關(guān)系,它是把驗證模塊徹底從業(yè)務(wù)邏輯中分離出來,降低系統(tǒng)模塊的耦合度。而驗證模塊的代碼實現(xiàn)需要編程人員根據(jù)系統(tǒng)的特定邏輯具體實現(xiàn)。AOP配置核心代碼如下:

      在上述配置代碼中,把AOP切面指定到類validate-Aop上,并采用validateAop類中的ValidateDatas方法來進行數(shù)據(jù)驗證,而AOP的橫切性關(guān)注點是checkData,即形如 “* bllimpl.*.add*(..)”和 “bllimpl.*.mod*(..)”形式的方法(bllimpl包下所有類中以add和mod開頭的方法)。在ValidateDatas方法中進行編程人員自定義的驗證邏輯。Valang方面以驗證POJO為例,如類User(其只包括username,age一個String類型和一個int類型)為例,驗證器bean的定義和驗證規(guī)則注入。

      3.3 驗證方案的運行效果

      最后在某個礦山企業(yè)的工程項目管理系統(tǒng)中采用此驗證方案實現(xiàn)該系統(tǒng)的數(shù)據(jù)驗證功能。以其中的付款憑證錄入界面為例,其實際運行效果圖如圖6、圖7所示。在圖6和圖7需要驗證的表單項中,憑證號按憑證的編寫規(guī)則進行驗證,預(yù)付款、結(jié)算款、扣材料、質(zhì)保金等都是金額。圖6為有非法輸入的界面,圖7為正確輸入的界面。

      圖6 驗證不成功時界面

      該驗證方案有較好的交互性。當(dāng)表單項的驗證不成功時,表單項的邊框變成紅色,能清晰的告訴用戶所輸入的數(shù)據(jù)是否合法。并且當(dāng)光標(biāo)落到輸入不合法的表單項時能提示用戶具體的錯誤信息。界面的 “提交”按鈕最初以不可用的狀態(tài)呈現(xiàn)給用戶,直到用戶填寫的所有數(shù)據(jù)符合了驗證規(guī)則,“提交”按鈕自動轉(zhuǎn)成可用狀態(tài)。當(dāng)客戶端滿足驗證進行提交后,如果服務(wù)器端實體完整性驗證和參照完整性驗證不通過,以彈出框的形式提示客戶端用戶。經(jīng)該系統(tǒng)的投入運行,確實提高了用戶交互的效率。

      圖7 驗證成功時界面

      4 結(jié)束語

      本文的數(shù)據(jù)驗證方案完整地實現(xiàn)了所有的驗證復(fù)雜度,與傳統(tǒng)只關(guān)注域完整性驗證方案相比有較好的安全性和用戶體驗;采用分工合作的多場所驗證方式,與傳統(tǒng)單一場所驗證方式相比有較高的效率。實現(xiàn)方式上分別在客戶端采用事件監(jiān)聽機制和服務(wù)器端采用Aop和Valang技術(shù),與傳統(tǒng)AOP數(shù)據(jù)驗證方案相比更簡化數(shù)據(jù)驗證模塊。該方案可以應(yīng)用到所有以服務(wù)器/客戶端模式的管理系統(tǒng)中。但不足之處在于AOP和Valang技術(shù)依賴Java的Spring框架,服務(wù)器端實現(xiàn)方式只能在Java環(huán)境中實現(xiàn)。

      [1]YANG Tiejun,NIU Qinzhou,HUANG Lin,et al.Method of heterogeneous data validation based on interface definition[J].Computer Engineering,2009,35(24):66-68(in Chinese).[楊鐵軍,牛秦洲,黃琳,等.基于接口定義的異構(gòu)數(shù)據(jù)有效性驗證方法[J].計算機工程,2009,35(24):66-68.]

      [2]ZHAO Guangli.Research and implementation of aspect-oriented data validation component[J].Computer Engineering and Design,2010,31(1):206-209(in Chinese).[趙廣利.面向切面的數(shù)據(jù)驗證組件研究與實現(xiàn)[J].計算機工程與設(shè)計,2010,31(1):206-209.]

      [3]CHENG Man,ZHAO Binzhi,WANG Tianli,et al.Research on data validation with Valang[J].Computer Engineering and Design,2009,30(13):3251-3253(in Chinese).[程滿,趙賓植,王天理,等.基于Valang技術(shù)的數(shù)據(jù)驗證機制研究[J].計算機工程與設(shè)計,2009,30(13):3251-3253.]

      [4]ZHANG Ruixue,SONG Mingqiu,GONG Yanlei,et al.Parsing DOM tree reversely and extracting web main page information[J].Computer Science,2011,38(4):213-215(in Chinese).[張瑞雪,宋明秋,公衍磊,等.逆序解析DOM樹及網(wǎng)頁正文信息提?。跩].計算機科學(xué),2011,38(4):213-215.]

      [5]Patrick O Bobbie,Yiming Ji.Modeling and synthesizing eventdriven simulators from collaborating uml statecharts[C].10th IASTED International Conference on Software Engineering and Applications,2006:1-7.

      [6]GUO Hongyan,YANG Bo,JIN Beihong,et al.Research on high performance DOM implementation[J].Computer Science,2006,33(6):274-277(in Chinese).[郭紅艷,楊波,金蓓弘,等.高效DOM實現(xiàn)的技術(shù)研究[J].計算機科學(xué),2006,33(6):274-277.]

      [7]ZHANG Xian,DONG Wei,QI Zhichang,et al.Conflicts detection in runtime verification based on AOP[J].Journal of Software,2011,22(6):1224-1235(in Chinese).[張獻,董威,齊治昌,等.基于AOP的運行時驗證中的沖突檢測[J].軟件學(xué)報,2011,22(6):1224-1235.]

      [8]SHAO Fudong,LIU Xiaodong,YANG Baoming,et al.Research and implementation of program condition visualization based on AOP[J].Journal of Computer Applications,2006,26(10):2483-2485(in Chinese).[邵付東,劉曉東,楊保明,等.基于AOP的程序狀態(tài)可視化方法研究與實現(xiàn)[J].計算機應(yīng)用,2006,26(10):2483-2485.]

      [9]ZHANG Yingjie,LIU Wanjun.Research on the application of Spring AOP in the security authentication of J2EE systems[J].Computer Engineering & Science,2008,30(8):137-138(in Chinese).[張英捷,劉萬軍.Spring AOP技術(shù)在J2EE系統(tǒng)安全性驗證中的應(yīng)用研究[J].計算機工程與科學(xué),2008,30(8):137-138.]

      [10]Eric Tanter,Rodolfo Toledo,Guillaume Pothier,et al.Flexible metaprogramming and AOP in Java[J].Science of Computer Programming,2008,72(1/2):22-30.

      [11]Pasquale Arpaia,Mario Luca Bernardi.An aspect-oriented programming-based approach to software development for fault detection in measurement systems[J].Computer Standards and Interfaces,2010,32(3):141-152.

      [12]ZHAO Yanni,WANG Yinghui,LEI Yu,et al.Research and implement of software framework based on IOC/AOP[J].Computer Engineering and Applications,2008,44(29):92-95(in Chinese).[趙艷妮,王映輝,雷宇,等.一種基于AOP/IOC的軟件框架研究與實現(xiàn)[J].計算機工程與應(yīng)用,2008,44(29):92-95.]

      猜你喜歡
      表單監(jiān)聽服務(wù)器端
      電子表單系統(tǒng)應(yīng)用分析
      華東科技(2021年9期)2021-09-23 02:15:24
      千元監(jiān)聽風(fēng)格Hi-Fi箱新選擇 Summer audio A-401
      淺談網(wǎng)頁制作中表單的教學(xué)
      淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
      成功(2018年10期)2018-03-26 02:56:14
      網(wǎng)絡(luò)監(jiān)聽的防范措施
      電子制作(2017年20期)2017-04-26 06:58:02
      在Windows中安裝OpenVPN
      應(yīng)召反潛時無人機監(jiān)聽航路的規(guī)劃
      局域網(wǎng)監(jiān)聽軟件的設(shè)計
      河南科技(2014年5期)2014-02-27 14:08:21
      基于Infopath實現(xiàn)WEB動態(tài)表單的研究
      電子世界(2012年24期)2012-12-17 10:49:06
      動態(tài)表單技術(shù)在教學(xué)管理中的應(yīng)用*
      404 Not Found

      404 Not Found


      nginx
      天津市| 黔西县| 泾川县| 田东县| 泽州县| 桦川县| 邛崃市| 颍上县| 株洲市| 河津市| 揭西县| 泾源县| 天等县| 新泰市| 渑池县| 柘荣县| 新源县| 鱼台县| 洛南县| 景谷| 水富县| 荣成市| 遂溪县| 丹凤县| 仙居县| 隆昌县| 乐都县| 罗甸县| 丹巴县| 宜州市| 运城市| 澄迈县| 叙永县| 昆明市| 洛扎县| 浦东新区| 三门县| 封开县| 澄城县| 宁波市| 成都市|