国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

J2EE 探索:有狀態(tài)網(wǎng)絡(luò)的 J2EE 技術(shù)

2019-11-18 16:03:21
字體:
供稿:網(wǎng)友

  有狀態(tài)應(yīng)用程序管理
您可能會(huì)回想起來,在上一篇文章中,Web 應(yīng)用程序協(xié)議被分成兩大類別:無狀態(tài)(stateless)和有狀態(tài)(stateful),協(xié)議的狀態(tài)指的是它“記憶”從一個(gè)傳輸?shù)较乱粋€(gè)傳輸?shù)男畔⒌哪芰?。因?yàn)橛袪顟B(tài)連通性是大多數(shù)企業(yè)應(yīng)用程序的基本需求之一,并且因?yàn)?Web 應(yīng)用程序依賴于 HTTP(內(nèi)在的無狀態(tài)協(xié)議),所以聰明的開發(fā)人員已經(jīng)找到了許多技巧來在 HTTP 上模擬有狀態(tài)連接。有狀態(tài)信息可以存儲(chǔ)在 Html 表單字段中、附加到超鏈接或者存儲(chǔ)在客戶機(jī)端的 cookie 中。

客戶機(jī)和服務(wù)器之間的有狀態(tài)交互可以在 Web 層或業(yè)務(wù)層上進(jìn)行管理。要在 Web 層上管理狀態(tài),我們使用與 HTTPsession API 結(jié)合的 servlet。要在業(yè)務(wù)層上管理狀態(tài),我們使用有狀態(tài)會(huì)話 EJB 組件。在接下來的章節(jié)里,我們將探究這兩種開發(fā)選項(xiàng)。

Web 層
Servlet 體系結(jié)構(gòu)的 HTTPSession API 允許應(yīng)用程序開發(fā)人員管理跨網(wǎng)絡(luò)的客戶機(jī)/服務(wù)器交互(或會(huì)話)的狀態(tài)。HTTPSession 接口定義了 HTTPSession API 的核心功能。它為 J2EE 應(yīng)用程序提供了一種方法,使它可以識(shí)別跨多個(gè)頁面請(qǐng)求的單個(gè)客戶機(jī),以及將數(shù)據(jù)存儲(chǔ)在與那個(gè)客戶機(jī)相關(guān)聯(lián)的服務(wù)器上。通過該接口,servlet 容器創(chuàng)建和管理客戶機(jī)和服務(wù)器之間的會(huì)話。該會(huì)話由 HTTPSession 對(duì)象表示,它可以跨來自相同客戶機(jī)的多個(gè)連接和頁面請(qǐng)求持續(xù)存在一段特定的時(shí)間。Servlet 使用該接口來查看與處理有關(guān)會(huì)話的信息,如創(chuàng)建時(shí)間和上一次訪問會(huì)話的時(shí)間。該接口還允許 servlet 將對(duì)象綁定到會(huì)話,從而以一種跨多個(gè)連接(來自相同客戶機(jī))持續(xù)存在的方式將該信息與特定的客戶機(jī)進(jìn)行關(guān)聯(lián)。

Servlet 體系結(jié)構(gòu)
Servlet 體系結(jié)構(gòu)并沒有因?yàn)槭褂?HTTPSession API 而發(fā)生改變。就象在無狀態(tài)網(wǎng)絡(luò)中一樣,servlet 代表客戶機(jī)執(zhí)行業(yè)務(wù)請(qǐng)求,并且充當(dāng)控制器、視圖,或者二者同時(shí)兼任。Servlet 還可以有效地處理用戶交互,如內(nèi)容格式化和顯示、基本請(qǐng)求處理和安全性請(qǐng)求及更多。就象在無狀態(tài)網(wǎng)絡(luò)中一樣,servlet 最好用于管理客戶機(jī)交互,那么通??墒褂弥诸悾ㄈ?javaBeans)來應(yīng)付繁重的處理或者與后端組件相互操作(interface)。
因此,HTTPSession 接口允許 servlet 容器創(chuàng)建和管理客戶機(jī)會(huì)話,并且使 servlet 能訪問與會(huì)話相關(guān)的信息、將對(duì)象綁定到會(huì)話以及訪問先前綁定的對(duì)象。到現(xiàn)在為止,一直都還不錯(cuò)。但是 servlet 容器如何跟蹤通過無狀態(tài)協(xié)議(如 HTTP)通信的客戶機(jī)呢?為了實(shí)現(xiàn)這一點(diǎn),為每個(gè) HTTPSession 對(duì)象都提供一個(gè)唯一的標(biāo)識(shí),以確保每個(gè)客戶機(jī)會(huì)話和與會(huì)話相關(guān)的數(shù)據(jù)可以被唯一標(biāo)識(shí)??紤]到 HTTP 內(nèi)在的無狀態(tài)本質(zhì),在每次請(qǐng)求時(shí),該會(huì)話標(biāo)識(shí)必須被客戶機(jī)傳遞給服務(wù)器,以便于 servlet 容器將客戶機(jī)與正確的會(huì)話相關(guān)聯(lián)。會(huì)話標(biāo)識(shí)可以用三種方式中一種進(jìn)行傳遞:作為 HTML 表單中的參數(shù)(通常是隱藏字段);作為附加在查詢字符串后的參數(shù);或者作為 cookie 的屬性。不管會(huì)話標(biāo)識(shí)如何傳遞,servlet 容器都將攔截它,檢查它,并找到與之關(guān)聯(lián)的 HTTPSession 對(duì)象。

Servlet 性能
由 Servlet 體系結(jié)構(gòu)創(chuàng)建的輕量級(jí)線程模型決不會(huì)因?yàn)?servlet 或 jsp 文件創(chuàng)建、讀取或修改 HTTPSession 對(duì)象而受到破壞。該對(duì)象只是將對(duì)象引用存儲(chǔ)為簡(jiǎn)單鍵-值對(duì)的散列表或類似的集合。同樣,HTTPSession 內(nèi)存空間的實(shí)現(xiàn)本身也是輕量級(jí)的,只需要存儲(chǔ)(或許序列化)會(huì)話對(duì)象和相應(yīng)的會(huì)話標(biāo)識(shí)。簡(jiǎn)而言之,servlet 可以支持與 HTTP 客戶機(jī)的有狀態(tài)交互,而且對(duì)應(yīng)用程序設(shè)計(jì)或容器資源產(chǎn)生最小的影響。

業(yè)務(wù)層
J2EE 為在業(yè)務(wù)層上處理狀態(tài)提供了內(nèi)置的支持。與無狀態(tài)會(huì)話 bean 一樣,有狀態(tài)會(huì)話 bean 也被映射到業(yè)務(wù)過程。兩者之間的關(guān)鍵區(qū)別是:無狀態(tài) bean 及其數(shù)據(jù)在單個(gè)客戶機(jī)請(qǐng)求的生命周期內(nèi)存活,而有狀態(tài) bean 卻維護(hù)與客戶機(jī)的對(duì)話并且它們的數(shù)據(jù)跨多個(gè)請(qǐng)求持續(xù)存在。與 servlet 不同,有狀態(tài)會(huì)話 bean 不需要任何特殊的對(duì)象,也不需要使用額外的接口來創(chuàng)建有狀態(tài)連接。EJB 容器提供了所有有狀態(tài)會(huì)話 bean 管理。對(duì)于 bean 而言,所有必要的工作就是在其部署描述符中將其聲明為 stateful。

EJB 體系結(jié)構(gòu)
從體系結(jié)構(gòu)的觀點(diǎn)看,有狀態(tài)會(huì)話 bean 與其無狀態(tài)的同類沒有任何差別。兩種類型的 bean 都可以很好地充當(dāng)視圖、控制器或模型;二者通常都可以實(shí)現(xiàn)虛包(Facade)模式或業(yè)務(wù)委派(Business Delegate)模式;二者都可以與多個(gè)客戶機(jī)類型一起使用。有狀態(tài)會(huì)話 bean 可以通過 servlet(或 JSP 文件)、幫助 servlet(或 JSP 文件)的 JavaBean 和另一個(gè)企業(yè) bean 訪問,或者直接通過 applet、Swing 應(yīng)用程序或其它 Java 應(yīng)用程序,或者甚至是使用 IIOP 協(xié)議的非 Java 客戶機(jī)訪問。
管理有狀態(tài) bean
正如以前闡述的,會(huì)話 bean 是最輕量級(jí)類型的企業(yè) bean 類型。特別地,無狀態(tài)會(huì)話 bean 可以方便地被容器合用,因?yàn)樗鼈冎恍枰S護(hù)每個(gè)請(qǐng)求的狀態(tài)。

相反,有狀態(tài)會(huì)話 bean 與容器資源并不那樣友好。有狀態(tài)會(huì)話 bean 的池不能象無狀態(tài) EJB 組件的池那樣用來容納任何客戶機(jī)請(qǐng)求。有狀態(tài) bean 只能處理來自一個(gè)客戶機(jī)的請(qǐng)求,直到該客戶機(jī)釋放其對(duì)那個(gè)特殊 bean 實(shí)例的控制。有狀態(tài)會(huì)話 bean 消耗了容器的大量時(shí)間和內(nèi)存。為了保存客戶機(jī)調(diào)用之間的 bean 狀態(tài),容器必須將 bean 實(shí)例保存在活動(dòng)內(nèi)存中,或者臨時(shí)將狀態(tài)寫到持久性存儲(chǔ)(如文件系統(tǒng)或數(shù)據(jù)庫)中。將狀態(tài)分配到持久性存儲(chǔ)中就是所謂的鈍化(passivation)。當(dāng)以前鈍化的企業(yè) bean 被再次請(qǐng)求時(shí),容器通過從池中檢索 bean,并且利用鈍化前 bean 的持久性狀態(tài)對(duì)它進(jìn)行初始化,來激活它。下圖闡明了有狀態(tài)會(huì)話 bean 的鈍化和激活:

圖 1. 有狀態(tài)會(huì)話 bean 的鈍化/激活


決定將 bean 保存在內(nèi)存中還是對(duì)它進(jìn)行鈍化,然后再激活它,這取決于各個(gè)供應(yīng)商。盡管在釋放容器資源方面鈍化機(jī)制非常有幫助,但是在防止服務(wù)器崩潰以避免丟失有狀態(tài)會(huì)話 bean 的活動(dòng)狀態(tài)方面卻無能為力。盡管一些供應(yīng)商提供了會(huì)話恢復(fù)功能以解決這個(gè)問題,但它不是標(biāo)準(zhǔn)的,因此依賴該功能會(huì)降低應(yīng)用程序的可移植性。但是,別擔(dān)心!EJB 規(guī)范確實(shí)定義了一個(gè)接口(javax.ejb.SessionSynchronization),它可以向企業(yè) bean 警報(bào)事務(wù)的狀態(tài),包括由于服務(wù)器崩潰而失敗的事務(wù)(假定不是拔了服務(wù)器的插頭)。實(shí)現(xiàn) SessionSynchronization 接口的企業(yè) bean 必須定義三個(gè)已聲明的方法特征符:afterBegin()、beforeCompletion() 和 afterCompletion(boolean)。這些方法使 bean 可以從容器接收三個(gè)額外的回調(diào),以允許正確處理 bean 中的事務(wù)狀態(tài)。

EJB 組件性能
從性能的角度看,servlet 和無狀態(tài)會(huì)話 bean 是相當(dāng)具有競(jìng)爭(zhēng)力的技術(shù)。它們都可以使用實(shí)例池為來自客戶機(jī)的請(qǐng)求提供服務(wù)。但是,當(dāng)您添加了應(yīng)用程序狀態(tài)管理時(shí),巨大的性能差異就將顯現(xiàn)。與可用作 Servlet 體系結(jié)構(gòu)一部分的輕量級(jí) HTTPSession 機(jī)制不同,有狀態(tài)會(huì)話 bean 需要一個(gè)更加重量級(jí)的針對(duì)狀態(tài)管理(如上面概述的鈍化/激活方案)的解決方案。這個(gè)針對(duì)有狀態(tài)會(huì)話 bean 的常用解決方案需要花費(fèi)服務(wù)器時(shí)間和資源來鈍化 bean 狀態(tài)、回收 bean 實(shí)例和激活 bean 狀態(tài)。上述的每個(gè)過程都需要幾次容器調(diào)用,以及需要直接對(duì) bean 執(zhí)行回調(diào)方法,以確保正確處理 bean 的狀態(tài)。總而言之,有狀態(tài)會(huì)話 EJB 組件為管理應(yīng)用程序狀態(tài)提供了一種重量級(jí)機(jī)制。

選擇合適的技術(shù)
與無狀態(tài)的 J2EE 體系結(jié)構(gòu)不同,J2EE 應(yīng)用程序不提供典型的配置來充當(dāng)指南或藍(lán)圖。管理狀態(tài)時(shí),合適的體系結(jié)構(gòu)取決于下列因素:

客戶機(jī)是基于 Web(HTTP)的嗎?
對(duì)話狀態(tài)需要包含到 GUI 中嗎?
服務(wù)器將處于哪種負(fù)載條件下呢?
有狀態(tài)組件需要能夠在服務(wù)器崩潰后仍然有效嗎?
該組件需要哪種事務(wù)上下文呢?
有狀態(tài)數(shù)據(jù)有多重要?
盡管上述一些問題似乎明顯地傾向于其中一種技術(shù),但是許多有狀態(tài)方案實(shí)際上既需要使用 servlet 又需要使用 EJB 組件。至關(guān)重要的決定就是確定是在 Web 層還是在業(yè)務(wù)層上管理狀態(tài),或者同時(shí)在兩個(gè)層上管理狀態(tài)。在下一節(jié)中,我們將研究一些可能的企業(yè)應(yīng)用程序方案,及其最適宜的解決方案。

應(yīng)用程序客戶機(jī)
標(biāo)準(zhǔn)的應(yīng)用程序客戶機(jī)是與另一個(gè)系統(tǒng)或組件相互操作的客戶機(jī)。我們將研究三種典型的應(yīng)用程序客戶機(jī)方案,并且討論每個(gè)客戶機(jī)最適合的有狀態(tài)解決方案:

如果客戶機(jī)是基于 Java 的,并且與服務(wù)器處于相同的防火墻之后,那么您首先應(yīng)該決定有狀態(tài)交互模型是否是必需的。管理有狀態(tài)會(huì)話 bean 是資源密集型的,因此您應(yīng)該考慮更輕量級(jí)的備用方案。最佳解決方案就是使用 RMI 直接與應(yīng)用程序服務(wù)器中的無狀態(tài)會(huì)話 bean 對(duì)話。如果有狀態(tài)解決方案是必需的,則請(qǐng)考慮使用帶有簡(jiǎn)單事務(wù)層的無狀態(tài)會(huì)話 bean,或者在業(yè)務(wù)層上創(chuàng)建瘦 servlet 層。任何一種解決方案花費(fèi)部分成本即可提供有狀態(tài)體驗(yàn)。最后,如果您的客戶機(jī)必須與跨多個(gè)請(qǐng)求的業(yè)務(wù)過程的狀態(tài)進(jìn)行緊耦合,并且不能接受添加 Web 層,那么有狀態(tài)會(huì)話 bean 是顯而易見的選擇。


如果您正在使用非 Java 的客戶機(jī)或者使用與服務(wù)器不在同一個(gè)防火墻之后的客戶機(jī),那么狀態(tài)管理問題略有不同。在這種方案中,您首先應(yīng)該確定狀態(tài)管理的目標(biāo)。如果目標(biāo)是通過某種 GUI 為用戶提供流暢的體驗(yàn),那么您可以在 Web 層上管理狀態(tài)。如果目標(biāo)是將跨多個(gè)請(qǐng)求的復(fù)雜業(yè)務(wù)過程聯(lián)系在一起,那么狀態(tài)管理應(yīng)該在業(yè)務(wù)層上進(jìn)行。再次強(qiáng)調(diào),您應(yīng)當(dāng)始終探索其它選項(xiàng),如使用帶有事務(wù)層的無狀態(tài)會(huì)話 bean。


一些應(yīng)用程序服務(wù)器供應(yīng)商以一種諸如接受本機(jī) IIOP 調(diào)用的方式公開 EJB 容器,從而允許 CORBA 客戶機(jī)將 EJB 組件當(dāng)成本機(jī) CORBA 應(yīng)用程序。這允許非 Java 客戶機(jī)使用 IIOP 協(xié)議與無狀態(tài)會(huì)話 bean 進(jìn)行通信。在該設(shè)置中,客戶機(jī)繞過了 Web 層,并使用 IIOP 協(xié)議直接與業(yè)務(wù)層(會(huì)話 bean)進(jìn)行通信。這時(shí),體系結(jié)構(gòu)分析與位于防火墻后的基于 Java 的應(yīng)用程序分析是相同的。請(qǐng)參考第一種方案,以理解業(yè)務(wù)層上的狀態(tài)管理問題。
電子商務(wù)隨需應(yīng)變環(huán)境
正如我們上個(gè)月討論的,無狀態(tài)會(huì)話 bean 是為電子商務(wù)隨需應(yīng)變(e-business on demand)應(yīng)用程序精心設(shè)計(jì)的。它們是非常輕量級(jí)的,可以輕松地匯聚為池,以確保卓越的可伸縮性。相反,有狀態(tài)會(huì)話 bean 并不是為這類應(yīng)用程序而精心設(shè)計(jì)的。電子商務(wù)隨需應(yīng)變應(yīng)用程序中通常需要狀態(tài)管理,但是最好由專用的機(jī)制或通過 J2EE 事務(wù)進(jìn)行處理。另一種可能性是調(diào)用 EJB 組件,就好象它是 CORBA 組件一樣。當(dāng)一個(gè)或多個(gè)被集成的應(yīng)用程序是 CORBA 組件時(shí),該選項(xiàng)特別有用。

“富”GUI 客戶機(jī)
有三種基本的“富”GUI(不是 HTML,也不是命令行)客戶機(jī)類型:Java applet、獨(dú)立應(yīng)用程序和 Java Web Start。下列解決方案適用于這三種“富”GUI 組件類型中的任何一種:

如果您的客戶機(jī)和服務(wù)器被防火墻分隔,您應(yīng)該讓客戶機(jī)通過 HTTP 與 servlet 直接通信。該 servlet 層可以使用助手類應(yīng)付簡(jiǎn)單的業(yè)務(wù)處理。如果您的應(yīng)用程序有更復(fù)雜的需求,或者對(duì)企業(yè)資源有更高的請(qǐng)求頻率,您應(yīng)該使用會(huì)話 bean 來處理業(yè)務(wù)過程。這里再?gòu)?qiáng)調(diào)一次,您應(yīng)當(dāng)將有狀態(tài)交互模型的必要性作為決策過程的一部分進(jìn)行考慮。


如果您的客戶機(jī)和服務(wù)器位于同一個(gè)防火墻之后,直接的 RMI 調(diào)用可能是您的最佳選擇。在這種情形下,servlet 只會(huì)帶來額外的開銷和不必要的體系結(jié)構(gòu)復(fù)雜性。在 applet 或 Java Web Start 情形中,通過提供帶有 applet 或 Java Web Start 應(yīng)用程序鏈接的首個(gè) HTML 文檔,servlet 可以啟動(dòng)事務(wù)。然后,最好使客戶機(jī)與一個(gè)或多個(gè)會(huì)話 bean 建立直接的 RMI 連接。該方案的設(shè)置與典型的應(yīng)用程序客戶機(jī)方案(與服務(wù)器不在同一個(gè)防火墻之后)的設(shè)置相同。
如果您正在使用本機(jī) GUI 客戶機(jī),并且需要管理復(fù)雜的事務(wù)或事務(wù)系列,那么您應(yīng)該再次考慮調(diào)用 EJB 組件,就象它是 CORBA 組件一樣。如果不能那樣做,您可以始終讓客戶機(jī)通過 HTTP 與 servlet 通信,并且相應(yīng)地管理會(huì)話。

Web 應(yīng)用程序
在標(biāo)準(zhǔn)的、基于 Web 的應(yīng)用程序情形中,客戶機(jī)位于防火墻的哪一側(cè)并不重要;使用 servlet 是必需的。因?yàn)槟鷮⑹褂?HTTP 作為傳輸協(xié)議,所以將在 Web 層上工作。唯一實(shí)際的決定 ? 是否在幕后使用 EJB 組件 ? 將取決于對(duì) EJB 容器服務(wù)的相關(guān)需求。首先,您將選擇通用的組件類型(如 servlet 和會(huì)話 bean)。接下來,您將選擇一些匹配應(yīng)用程序的用戶界面顯示和業(yè)務(wù)請(qǐng)求處理需求的更特定類型(如 JSP 頁面和有狀態(tài)會(huì)話 bean)。就所關(guān)心的狀態(tài)管理而言,Web 應(yīng)用程序中存在著和其它客戶機(jī)類型中類似的問題。一些標(biāo)準(zhǔn)問題(和答案)將有助于您為您的 Web 應(yīng)用程序確定合適的狀態(tài)管理解決方案:

有狀態(tài)體驗(yàn)需要直接與用戶界面聯(lián)系嗎? 如果是,那么必須使用 servlet 和 HTTPSession API 管理狀態(tài)。


您的業(yè)務(wù)過程需要跨越來自客戶機(jī)的多個(gè)調(diào)用嗎? 如果是,您有三種選項(xiàng):
使用有狀態(tài)會(huì)話 bean 來提供有狀態(tài)業(yè)務(wù)過程。


使用無狀態(tài)會(huì)話 bean,并且讓持久數(shù)據(jù)高速緩存在服務(wù)器上。接著對(duì)高速緩存的引用可以存儲(chǔ)在客戶機(jī)的 HTTPSession 對(duì)象中。


通過調(diào)用 bean 上的方法使 JavaBean 充當(dāng)業(yè)務(wù)委派(請(qǐng)參閱參考資料),從而使 bean 批處理所有來自客戶機(jī)的數(shù)據(jù),并且僅在客戶機(jī)準(zhǔn)備提交業(yè)務(wù)過程時(shí)才聯(lián)系無狀態(tài)會(huì)話 EJB 組件。再次使用了 HTTPSession API 來持久化 JavaBean 實(shí)例。



您的有狀態(tài)業(yè)務(wù)過程需要故障保護(hù)嗎? 如果是,您有三種選項(xiàng):
使用應(yīng)用程序服務(wù)器,該服務(wù)器為有狀態(tài)會(huì)話 bean 的狀態(tài)恢復(fù)提供自動(dòng)支持。


SessionSycnhronization 接口允許無狀態(tài)或有狀態(tài)會(huì)話 bean 對(duì)事務(wù)故障做出響應(yīng)。這將允許您回滾事務(wù)、持久化數(shù)據(jù)或執(zhí)行您可能需要的任何其它清除功能。通常,服務(wù)器故障將不會(huì)阻礙容器調(diào)用由接口聲明的回調(diào)方法。


許多 Web 服務(wù)器都提供了故障保護(hù) HTTPSession 實(shí)現(xiàn)。如果您的服務(wù)器可以這樣做,那么您可以使用 JavaBean 作為業(yè)務(wù)委派。
多客戶機(jī)類型
最后的情形需要客戶機(jī)類型的組合,例如基于 Web 的瀏覽器和標(biāo)準(zhǔn)的“富”GUI 桌面。在這種情形下,有狀態(tài)選項(xiàng)同無狀態(tài)選項(xiàng)沒有區(qū)別。請(qǐng)參考本系列的第一篇文章以獲取詳細(xì)信息。

結(jié)束語
在本部分(J2EE Pathfinder 系列的第二部分)中,我們探討了使用 Java servlet 和有狀態(tài)會(huì)話 bean 來執(zhí)行客戶機(jī)請(qǐng)求和提供有狀態(tài)體驗(yàn)的相對(duì)優(yōu)缺點(diǎn)。本文討論的方案并未包含所有情形,但是它們代表了有狀態(tài)通信環(huán)境中的 servlet 和會(huì)話 EJB 組件的一些最常見用法。

在下一部分中,我們將開始有關(guān)持久數(shù)據(jù)管理的兩部分探討,首先將比較實(shí)體 bean 和 JDBC。愿我們到時(shí)“探索”愉快!

(出處:http://m.survivalescaperooms.com)



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 安塞县| 辽宁省| 曲周县| 德江县| 靖宇县| 温州市| 玉环县| 神木县| 丹巴县| 鸡西市| 瑞丽市| 晋中市| 荆州市| 玛曲县| 交城县| 霍州市| 乐平市| 保靖县| 威信县| 精河县| 深水埗区| 嘉兴市| 海原县| 黑水县| 万年县| 年辖:市辖区| 福安市| 佛学| 武冈市| 青川县| 利辛县| 东乡族自治县| 灌阳县| 康平县| 土默特右旗| 大余县| 北辰区| 南投市| 镇远县| 杨浦区| 五家渠市|