JAVA學(xué)習(xí)札記

          人生起航點(diǎn)!
          posts - 18, comments - 0, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          2011年10月10日

          一.DWR概述   
              DWR是Direct Web Remoting 的縮寫。
              DWR 是一個(gè)開放源碼的使用 Apache 許可協(xié)議的解決方案,它包含服務(wù)器端 Java 庫、一個(gè) DWR servlet 以及 JavaScript 庫。雖然 DWR 不是 Java 平臺(tái)上唯一可用的 Ajax-RPC工具包,但是它是最成熟的,而且提供了許多有用的功能。
              從最簡單的角度來說,DWR 是一個(gè)引擎,可以把服務(wù)器端 Java對象的方法公開給 JavaScript 代碼。使用 DWR 可以有效地從應(yīng)用程序代碼中把 Ajax 的全部請求-響應(yīng)循環(huán)消除掉這意味著客戶端代碼再也不需要直接處理 XMLHttpRequest 對象或者服務(wù)器的響應(yīng)。不再需要編寫對象的序列化代碼或者使用第三方工具才能把對象變成 XML。甚至不再需要編寫 servlet 代碼把 Ajax 請求調(diào)整成對 Java 域?qū)ο蟮恼{(diào)用。 ]
              DWR 是作為 Web 應(yīng)用程序中的 servlet 部署的。把它看作一個(gè)黑盒子,這個(gè) servlet 有兩個(gè)主要作用:首先,對于公開的每個(gè)類,DWR 動(dòng)態(tài)地生成包含在 Web 頁面中的 JavaScript。
          成的JavaScript包含存根函數(shù),代表Java類上的對應(yīng)方法并在幕后執(zhí)行 XMLHttpRequest。這些請求被發(fā)送給 DWR,這時(shí)它的第二個(gè)作用就是把請求翻譯成服務(wù)器端 Java 對象上的方法調(diào)用并把方法的返回值放在 servlet 響應(yīng)中發(fā)送回客戶端,編碼成 JavaScript。DWR 還提供了幫助執(zhí)行常見的用戶界面任務(wù)的 JavaScript 工具函數(shù)。
          二.使用方法
              DWR(Direct Web Remoting)是一個(gè)用于改善web頁面與Java類交互的遠(yuǎn)程服務(wù)器端Ajax開源框架,可以幫助開發(fā)人員開發(fā)包含AJAX技術(shù)的網(wǎng)站.它可以允許在瀏覽器里的代碼使用運(yùn)行在WEB服務(wù)器上的JAVA函數(shù),就像它就在瀏覽器里一樣。
           它包含兩個(gè)主要的部分:允許JavaScript從WEB服務(wù)器上一個(gè)遵循了AJAX原則的Servlet中獲取數(shù)據(jù).另外一方面一個(gè)JavaScript庫可以幫助網(wǎng)站開發(fā)人員輕松地利用獲取的數(shù)據(jù)來動(dòng)態(tài)改變網(wǎng)頁的內(nèi)容. DWR采取了一個(gè)類似AJAX的新方法來動(dòng)態(tài)生成基于JAVA類的JavaScript代碼.這樣WEB開發(fā)人員就可以在JavaScript里使用Java代碼就像它們是瀏覽器的本地代碼(客戶端代碼)一樣;但是Java代碼運(yùn)行在WEB服務(wù)器端而且可以自由訪問WEB 服務(wù)器的資源.出于安全的理由,WEB開發(fā)者必須適當(dāng)?shù)嘏渲媚男㎎ava類可以安全的被外部使用.
          2.1、dwr.xml的配置
          1   <dwr>
          2     <allow>
          3       <create creator="new" javascript="testClass" >
          4          <include method="testMethod1"/> 
          5     </create>
          6    </allow>
          7  </dwr>
          8 

          <allow>標(biāo)簽中包括可以暴露javascript訪問的東西。

          <create>標(biāo)簽中指定javascript中可以訪問的java類,并定義DWR應(yīng)當(dāng)如何獲得要進(jìn)行遠(yuǎn)程的類的實(shí)例。creator="new"屬性指定java類實(shí)例的生成方式,new意味著DWR應(yīng)當(dāng)調(diào)用類的默認(rèn)構(gòu)造函數(shù)來獲得實(shí)例,其他的還有spring方式,通過與IOC容器Spring進(jìn)行集成來獲得實(shí)例等等。javascript=" testClass "屬性指定javascript代碼訪問對象時(shí)使用的名稱。標(biāo)簽指定要公開給javascriptjava類名。

          <include>標(biāo)簽指定要公開javascript的方法。不指定的話就公開所有方法。

          <exclude>標(biāo)簽指定要防止被訪問的方法。

          入門視頻:

          http://www.verycd.com/groups/@g1897244/737357.topic

           

          拓展閱讀:

          http://baike.baidu.com/view/73492.htm

          http://blog.csdn.net/zhaizhanpo/archive/2008/09/27/2988512.aspx

           

          http://blog.csdn.net/caterpillar_here/archive/2006/09/06/1186566.aspx

           

          三.實(shí)例

          先下載DWR的JAR包,下載地址:

           

           

          http://getahead.ltd.uk/dwr/

          將demo(dwr-3.0.0.116.rc1-src\core\impl\demo\web\WEB-INF\lib)實(shí)例下的jar文件導(dǎo)入新建項(xiàng)目的web-inf/lib目錄下,另外還要加入dwr.jar.

          (注意:要加入commons-logging-1.0.4.jar,缺少有時(shí)候會(huì)報(bào)錯(cuò).)

          1.在web.xml文件中注冊DWRServlet:負(fù)責(zé)處理客戶端的請求,并呼叫Java物件的是DWRServlet

           1 <?xml version="1.0" encoding="UTF-8"?>
           2 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
           3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           4     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
           5     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">    
           6     <servlet>
           7         <servlet-name>dwr-invoker</servlet-name>
           8         <servlet-class>
           9             org.directwebremoting.servlet.DwrServlet
          10         </servlet-class>
          11         <init-param>
          12             <param-name>debug</param-name>
          13             <param-value>true</param-value>
          14         </init-param>
          15     </servlet>
          16     
          17     <servlet-mapping>
          18         <servlet-name>dwr-invoker</servlet-name>
          19         <url-pattern>/dwr/*</url-pattern>
          20     </servlet-mapping>    
          21 </web-app>

          2.編寫Java物件,即業(yè)務(wù)Bean:

          1 package helloWorld;
          2 
          3 public class Service {
          4     
          5     public String sayHello(String yourName) { 
          6         //可以是訪問數(shù)據(jù)庫的復(fù)雜代碼
          7         return "Hello World " + yourName;
          8         }
          9 }

          3.編寫dwr.xml:客戶端要呼叫這個(gè)Java物件,傳給它參數(shù),而返回一個(gè)字串,客戶端再展示這個(gè)字串,很神奇吧?其實(shí)就是是要告訴DWRServlet這件事情:

          1 <?xml version="1.0" encoding="UTF-8"?>
          2 <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
          3 <dwr>
          4     <allow>
          5         <create creator="new" javascript="service">
          6             <param name="class" value="helloWorld.Service" />
          7         </create>
          8     </allow>
          9 </dwr>

          4.測試DWR

          將代碼放入應(yīng)用服務(wù)器(比如Tomcat),啟動(dòng)。然后在地址欄輸入http://localhost:8080/你的工程/dwr

          5.編寫一個(gè)jsp
          接下來最后一步就是創(chuàng)建一個(gè)jsp文件
          1) 要引用幾個(gè)dwr的js,其中engine.js必須要,如果需要用到dwr提供的一些方便的工具要引用util.js
          2) 然后還要引用dwr自動(dòng)生成的js,dwr/interface/service.js,注意js名字要和dwr.xml配置的一樣
           3) js里的service.sayHello和java類的那個(gè)有一點(diǎn)區(qū)別,多了個(gè)參數(shù),用來callback返回的數(shù)據(jù)
          index.jsp
           1 <%@ page language="java" pageEncoding="UTF-8"%>
           2 <html>
           3     <head>
           4         <title>testDWR</title>
           5         <script type='text/javascript' src='dwr/util.js'> </script>
           6         <script type='text/javascript' src='dwr/engine.js'> </script>
           7         <script type="text/javascript" src="dwr/interface/service.js"></script>
           8         <script type="text/javascript">
           9             function firstDwr() {
          10                 service.sayHello("Jorwen", callBackHello);
          11             }
          12             function callBackHello(data) {
          13                 alert(data);
          14             }
          15         </script>
          16     </head>
          17     <body>
          18         <input type="button" name="button" value="測試" onclick="firstDwr();">
          19     </body>
          20 </html>
          6.地址欄輸入http://localhost:8080/你的工程/index.jsp 顯示的結(jié)果如下:

           


           



          posted @ 2011-10-10 16:07 簡簡單單 | 編輯 收藏

          本文介紹了幾乎所有關(guān)于對象的基本概念,什么是對象,如何創(chuàng)建對象,對象的屬性的設(shè)置和讀取,刪除屬性的方法,構(gòu)造函數(shù),對象原型,父類,子類,繼承等等。
          1.對象
          * 對象是一種復(fù)合數(shù)據(jù)類型,它們將多個(gè)數(shù)據(jù)值集中在一個(gè)單元中,而且運(yùn)行使用名字來存取這些值。解釋對象的另一種方式是,對象是一個(gè)無序的屬性集合,每個(gè)屬性都有自己的名字和值。存儲(chǔ)在對象中的已命名的值可以是數(shù)字和字符串這樣的原始值,也可以是對象。
          */
          var o = new Object();


          2.對象直接量創(chuàng)建對象
          * 對象直接量由屬性說明列表構(gòu)成,列表包含在大括號(hào)中,其中的屬性說明由逗號(hào)隔開。
          * 對象直接量中的每個(gè)屬性說明都由屬性名加上冒號(hào)和屬性值構(gòu)成。
          */
          var zhangsan = {name:”zhangsan”, age:34, married:true};
          window.alert(typeof zhangsan); //輸出object

          3.屬性的讀取和設(shè)置
          * 對象的屬性通過點(diǎn)號(hào)運(yùn)算符讀取和設(shè)置。對象的新屬性可以通過直接創(chuàng)建。
          */
          window.alert(zhangsan.car); //輸出undefined
          zhangsan.car=”BMW”; //直接賦值
          window.alert(zhangsan.car); //輸出BMW

           4.屬性的枚舉
          * 通過for循環(huán)枚舉每一個(gè)屬性,順序不能保證固定。
          * 注意枚舉出的是屬性名稱,并不是屬性值。
          */
          var values = “”;
          for(var v in zhangsan)values += v+”\n”; //枚舉每一個(gè)屬性
          window.alert(values);

          5.屬性的刪除使用delete,如delete zhangsan.car
          */

          6.構(gòu)造函數(shù)
          * 構(gòu)造函數(shù)是具有兩個(gè)特性的javascript函數(shù):
          * (1)它由new 運(yùn)算符調(diào)用;
          * (2)傳遞給它的是一個(gè)對新創(chuàng)建的空對象的應(yīng)用,將該引用作為關(guān)鍵字this的值,而且它還要對新創(chuàng)建的對象進(jìn)行適當(dāng)?shù)某跏蓟?br />* 記住:構(gòu)造函數(shù)只是初始化對象,并不返回新創(chuàng)建的對象。
          */
          function Rectangle(w, h){
          this.width = w;
          this.height = h;
          }
          var ret1 = new Rectangle(2, 1);
          //注意構(gòu)造函數(shù)是如何使用它的參數(shù)來初始化this關(guān)鍵字所引用的對象的屬性

          7.對象的方法
          * 所謂方法,就是通過對象調(diào)用的javascript函數(shù)。我們知道,函數(shù)就是數(shù)值,它們所使用的名字沒有任何特殊之處,可以將函數(shù)賦給任何變量,甚至賦給一個(gè)對象的任何屬性,那么這個(gè)屬性就是對象的方法了。
          * 在對象的方法體內(nèi),關(guān)鍵字this的值就成了調(diào)用該方法的對象。
          */
          function print(){}
          ret1.print = print;

           8.關(guān)于this的討論
          * 任何一個(gè)用作方法的函數(shù)都會(huì)得到一個(gè)額外的實(shí)際參數(shù),即調(diào)用該函數(shù)的對象。由于方法通常是對那個(gè)對象執(zhí)行某種操作,所以要表達(dá)函數(shù)作用于對象這一事實(shí),最好采用方法的調(diào)用語法。
          * 如rect.setSize(width, height);
          * setSize(rect, width, height);
          * 雖然這兩行代碼對對象rect執(zhí)行相同的操作,但是第一行代碼在表達(dá)對象rect是操作的焦點(diǎn)(或者說操作的目標(biāo))這一觀點(diǎn)時(shí)顯然清楚得多。
          *
          * 雖然有區(qū)別地對待函數(shù)和方法比較有用,但實(shí)際上它們之間的差別并不大。回憶一下,函數(shù)是存儲(chǔ)在變量中的值,而那個(gè)變量也不過是全局對象的一個(gè)屬性。因此,當(dāng)你調(diào)用一個(gè)函數(shù)時(shí),實(shí)際上調(diào)用的是全局對象的一個(gè)方法。
          * 在這樣的函數(shù)中,關(guān)鍵字this引用的是全局對象。所以函數(shù)和方法之間在技術(shù)上沒有差別,真正的差別在于設(shè)計(jì)和目的上,方法是用來對this對象進(jìn)行操作的,而函數(shù)通常會(huì)是獨(dú)立的,并不需要使用this對象。
          */
          (function f(){
          var values = “”;
          for(var v in this)values += v + ” “;
          window.alert(values);
          })(); //返回window對象的所有屬性和方法名稱

          9.原型對象和繼承
          * javascript每個(gè)對象都有原型對象,每個(gè)對象都繼承原型對象的所有屬性。
          * 一個(gè)對象的原型是由創(chuàng)建并初始化該對象的構(gòu)造函數(shù)定義的。javascript中的所有函數(shù)都有prototype屬性,它引用了一個(gè)對象。雖然原型對象初始化時(shí)是空的,
          * 但是你在其中定義的任何屬性都會(huì)被該構(gòu)造函數(shù)創(chuàng)建的所有對象繼承。
          *
          * 構(gòu)造函數(shù)定義了對象的類,并初始化了類中狀態(tài)變量的屬性,如width和height。因?yàn)樵蛯ο蠛蜆?gòu)造函數(shù)關(guān)聯(lián)在一起,所以類的每個(gè)成員都從原型對象繼承了相同的屬性。
          * 這說明原型對象是存放方法和其他常量屬性的理想場所。

          * 注意,繼承是在查詢一個(gè)屬性值時(shí)自動(dòng)發(fā)生的。屬性并非從原型對象復(fù)制到新的對象的,它們只不過看起來像是那些對象的屬性。這其中有兩點(diǎn)重要的含義。
          * 一是使用原型對象可以大量減少每個(gè)對象對內(nèi)存的需求量,因?yàn)閷ο罂梢岳^承許多屬性。二是即使屬性在對象被創(chuàng)建之后才添加到它的原型對象中,對象也能夠繼承這些屬性。
          *
          * 每個(gè)類都有一個(gè)原型對象,這個(gè)原型對象都具有一套屬性。但是實(shí)際上卻有大量的類實(shí)例,每個(gè)實(shí)例都能繼承原型對象的屬性。由于一個(gè)原型對象能夠被多個(gè)對象繼承,所以javascript
          * 必須強(qiáng)化讀寫屬性值之間的不對稱性。在讀對象o的屬性p時(shí),javas會(huì)首先檢查o是否具有一個(gè)名為p的屬性。如果o沒有這個(gè)屬性,javascript就會(huì)再檢查o的原型對象是否具有這個(gè)屬性。這樣才使得以原型為基礎(chǔ)的繼承機(jī)制起作用。
          *
          * 但是當(dāng)寫一個(gè)屬性的值時(shí),javascript并不會(huì)檢查原型對象中是否有這個(gè)屬性的值。因?yàn)椋绻试S改變原型對象的這一屬性,那就改變了整個(gè)對象類的p值,包括其他new出來的對象變量的屬性值。
          *
          * 因此,屬性的繼承只發(fā)生在讀屬性值時(shí),而不會(huì)發(fā)生在寫屬性值時(shí)。如果你設(shè)置的對象o的屬性p是對象o從它的原型對象繼承而來的,那么結(jié)果就是你直接在對象o中創(chuàng)建了一個(gè)新屬性p。現(xiàn)在o已經(jīng)有了一個(gè)自己的名為p的屬性,它就不會(huì)再從它的原型對象繼承p的值了。當(dāng)你讀p的值時(shí),java首先查詢o的屬性。
          * 由于它發(fā)現(xiàn)了o中定義的p,就不必再查詢原型對象,也就不會(huì)再發(fā)現(xiàn)原型對象中定義的p值了。我們稱之為o中的p”遮蔽”了或者說”隱藏”了原型對象中的屬性p。
          *
          * 因?yàn)樵蛯ο蟮膶傩员灰粋€(gè)類的所有對象共享,所以通常只用它們來定義類中所有對象的相同的屬性。這使得原型對象適用于方法定義和常量的定義。
          */

          10. 實(shí)例屬性、實(shí)例方法、類屬性、類方法
          * 每個(gè)對象都有它自己單獨(dú)的實(shí)例屬性的副本。我們說javas中的實(shí)例屬性是那些在對象中用構(gòu)造函數(shù)創(chuàng)建的或初始化的屬性。
          *
          * 實(shí)例方法是由特定對象或?qū)嵗{(diào)用的。實(shí)例方法使用了關(guān)鍵字this來引用它們要操作的對象或?qū)嵗km然一個(gè)類的任何實(shí)例都可以調(diào)用實(shí)例方法,并不意味著每個(gè)對象都像實(shí)例屬性那樣含有自己專有的方法副本。相反,每個(gè)實(shí)例方法都是由類的所有實(shí)例共享的。在javascript中,給類定義一個(gè)實(shí)例方法,是通過把構(gòu)造函數(shù)的原型對象中的一個(gè)屬性設(shè)置為函數(shù)值來實(shí)現(xiàn)的。
          * 這樣,由那個(gè)構(gòu)造函數(shù)創(chuàng)建的所有實(shí)例都會(huì)共享一個(gè)已繼承的對函數(shù)的引用。
          *
          * 類屬性表示在所有類實(shí)例中只有一個(gè)副本。在javascript中,類屬性本質(zhì)上就是全局變量。但是它們與一個(gè)類關(guān)聯(lián)在一起,在javascript的名字空間中擁有一個(gè)邏輯位置,這樣它們就不會(huì)被其他的同名屬性覆蓋。
          * 如Circle.PI=3.14。雖然Circle是一個(gè)構(gòu)造函數(shù),但是由于javascript函數(shù)是對象,所以我們可以創(chuàng)建函數(shù)的屬性,就像創(chuàng)建對象的屬性一樣。
          *
          * 類方法與類屬性相似。在javascript中,要定義一個(gè)類方法,只需要用合適的函數(shù)作為構(gòu)造函數(shù)的屬性即可。
          */

          11. 父類和子類
          * 在javascript中,Object類所有類的父類,處于類層次圖的最上層。所有的類都繼承了Object類的所有方法。
          *
          * 我們已經(jīng)學(xué)會(huì)了對象如何從它們構(gòu)造函數(shù)的原型對象中繼承屬性,那么它們又是如何繼承類Object的屬性哪?我們知道,原型對象本身就是一個(gè)對象,它是由構(gòu)造函數(shù)Object()創(chuàng)建的。
          * 這就意味著原型對象繼承了Object.prototype屬性。因此,ret1會(huì)繼承Rectangle.prototype的屬性,還會(huì)繼承Object.prototype的屬性。整因?yàn)樗袑ο蟮膒rototype屬性會(huì)繼承Object.prototype屬性,
          * 所以所有javascript子類都繼承了Object的所有屬性,也即Object類是javascript的根類,處于類層次圖的最頂層。
          */

           12.使用[]讀取和設(shè)置對象的屬性
          * 通常會(huì)采用點(diǎn)號(hào)運(yùn)算符訪問對象的屬性,但是點(diǎn)號(hào)后面的屬性是標(biāo)識(shí)符。在javascript中,標(biāo)識(shí)符必須逐字輸入,它們不是一種數(shù)據(jù)類型。如果程序中屬性是動(dòng)態(tài)的、不確定的,那么我們將無法訪問。
          * 前面解釋過,對象是一群屬性的集合,也就是數(shù)組。那么可以使用數(shù)組訪問成員的運(yùn)算符[]來訪問對象的屬性。[]中是屬性名稱,是字符串類型,我們就可以動(dòng)態(tài)的確定對象屬性名稱了。
          *
          * 使用[]運(yùn)算符的對象我們也稱之為關(guān)聯(lián)數(shù)組。關(guān)聯(lián)數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),允許你動(dòng)態(tài)地將任意值和任意字符串關(guān)聯(lián)在一起。實(shí)際上,javascript對象在內(nèi)部就是用關(guān)聯(lián)數(shù)組實(shí)現(xiàn)的。使用點(diǎn)號(hào)運(yùn)算符只是為了是他們看起來更像C++和Java的靜態(tài)對象而已。
          *
          * 前面的for/in循環(huán)實(shí)際上是對數(shù)組的操作。
          *
          * 我們通常意義說的數(shù)組是將任何值和非負(fù)整數(shù)關(guān)聯(lián)在一起的數(shù)據(jù)結(jié)構(gòu)。
          *
          * 數(shù)組實(shí)際上是一個(gè)具有額外功能層的對象。如var a = new Array();window.alert(typeof a);輸出Object。
          */

          13. Object類的屬性和方法
          * constructor屬性表示初始化該對象的構(gòu)造函數(shù)。因此,可以使用該屬性來判斷對象的類型。
          */
          function A(){return “aaaaaaaaa”};
          var a = new A();
          window.alert(a.constructor); //輸出的是A的函數(shù)定義
          window.alert(a.constructor==A); //結(jié)果是true
          window.alert(a.constructor()); //輸出aaaaaaaaaa

          /**
          * toString()方法沒有任何實(shí)際參數(shù),它返回的是一個(gè)字符串,該字符串代表了調(diào)用它的對象的類型或值。當(dāng)javascript需要將一個(gè)對象轉(zhuǎn)化成字符串時(shí)就調(diào)用這個(gè)對象的toString方法。
          * 例如,當(dāng)用運(yùn)算符”+”把一個(gè)字符串和一個(gè)對象連接到一起時(shí),或者把一個(gè)對象傳遞給alert()或document.write()方法時(shí),就會(huì)調(diào)用toString()方法。
          */

           

          posted @ 2011-10-10 16:06 簡簡單單 | 編輯 收藏

               摘要: 一.概述:Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP. dom4j是一個(gè)Ja...  閱讀全文

          posted @ 2011-10-10 15:44 簡簡單單 閱讀(662) | 評論 (0)編輯 收藏

               摘要: 一.數(shù)據(jù)庫連接池的概念及作用     數(shù)據(jù)庫連接是一種關(guān)鍵的有限的昂貴的資源,這一點(diǎn)在多用戶的網(wǎng)頁應(yīng)用程序中體現(xiàn)得尤為突出。對數(shù)據(jù)庫連接的管理能顯著影響到整個(gè)應(yīng)用程序的伸縮性和健壯性,影響到程序的性能指標(biāo)。數(shù)據(jù)庫連接池正是針對這個(gè)問題提出來的。數(shù)據(jù)庫連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫連接,而再不是重新建立一個(gè);釋放空閑時(shí)間超...  閱讀全文

          posted @ 2011-10-10 15:38 簡簡單單 閱讀(1021) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 万源市| 巩留县| 临朐县| 涪陵区| 株洲县| 高阳县| 民乐县| 铜陵市| 铅山县| 囊谦县| 山西省| 平邑县| 信丰县| 宁津县| 金华市| 龙井市| 龙海市| 锦州市| 三原县| 泰兴市| 马山县| 拉孜县| 察隅县| 新源县| 石门县| 汝城县| 兴城市| 内江市| 南陵县| 安岳县| 斗六市| 时尚| 宝清县| 津市市| 张北县| 五大连池市| 西乡县| 双城市| 伊金霍洛旗| 监利县| 襄城县|