2010年3月31日

            由于項(xiàng)目需要部署在Linux上,而又使用到Apache James作郵件服務(wù)器,因此總結(jié)了一下在Linux上部署Apache James的步驟,寫得比較凌亂。

          在Linux上部署Apache James

          前提工作:

          1)由于Apache James郵件服務(wù)需要用到1024以下的端口,因此請用root用戶登錄進(jìn)行部署。

          2)需要先安裝JDK1.5或以上版本,部署前請確保您的JDK環(huán)境變量如JAVA_HOME等已經(jīng)設(shè)置好。

          3)James 啟動時,其SMTP 服務(wù)默認(rèn)在 25 端口啟動,POP3 服務(wù)默認(rèn)在 110 端口啟動, NNTP 服務(wù)默認(rèn)在 119 端口啟動, 請確保這些端口未被占用。Linux下查過這些端口是否被占用的命令是:lsof -i:端口號,例如:

          [root@nhslj-app ~]# lsof -i:25

          COMMAND   PID USER   FD   TYPE DEVICE SIZE NODE NAME

          sendmail 3268 root    4u  IPv4   8650       TCP nhslj-app:smtp (LISTEN)

          這表示25端口正在被sendmail服務(wù)占用。

          關(guān)閉SendMail服務(wù):

          一般RedHat的系統(tǒng)安裝時都會默認(rèn)安裝了sendmail郵件服務(wù),因此在部署Apache James時,需要把sendmail關(guān)閉。可以通過以下方法來關(guān)閉sendmail,以防止系統(tǒng)重啟時又自動啟動sendmail服務(wù)。

          1)用chkconfig --list sendmail命令查看sendmail的情況:

          [root@susun177 ~]# chkconfig --list sendmail

          sendmail        0:關(guān)閉  1:關(guān)閉  2:啟用  3:關(guān)閉  4:啟用  5:啟用  6:關(guān)閉

          2)通過chkconfig sendmail off命令來關(guān)閉sendmail的啟動:

          [root@susun177 ~]# chkconfig sendmail off

          3)這時再用chkconfig --list sendmail命令可以查看到sendmail的所有啟動級別都已經(jīng)關(guān)閉了:

          [root@susun177 ~]# chkconfig --list sendmail

          sendmail        0:關(guān)閉  1:關(guān)閉  2:關(guān)閉  3:關(guān)閉  4:關(guān)閉  5:關(guān)閉  6:關(guān)閉

          這樣,即使重新啟動Linux系統(tǒng),sendmail服務(wù)也不會自動啟動了。

          前期工作做完了,接下來就是部署Apache  James了。

          1)解壓Apache James包(apache-james-2.3.2.tar.gz):

          [root@susun177 local]# tar zxvf apache-james-2.3.2.tar.gz

          解壓后,會多了一個目錄james-2.3.2

          2)進(jìn)入james-2.3.2/bin目錄,運(yùn)行run.sh,生成james的配置文件config.xml:

          [root@susun177 bin]# sh run.sh

          run.sh: line 37: /usr/local/james-2.3.2/bin/phoenix.sh: 權(quán)限不夠

          權(quán)限不夠(估計是解壓后run.sh文件沒有賦予執(zhí)行權(quán)限),可以執(zhí)行以下命令:

          [root@susun177 bin]# chmod +x run.sh phoenix.sh

          然后再次運(yùn)行run.sh命令:

          [root@susun177 bin]# sh run.sh

          Using PHOENIX_HOME:   /usr/local/james-2.3.2

          Using PHOENIX_TMPDIR: /usr/local/james-2.3.2/temp

          Using JAVA_HOME:      /usr/java/jdk1.5.0

          Running Phoenix:

          Phoenix 4.2

          James Mail Server 2.3.2

          Remote Manager Service started plain:4555

          POP3 Service started plain:110

          SMTP Service started plain:25

          NNTP Service started plain:119

          FetchMail Disabled

          說明James啟動成功。

          3)按Ctrl + C退出James,編輯config.xml文件。生成的config.xml放置在../james-2.3.2/apps/james/SAR- INF目錄下。關(guān)于James的config.xml的修改,網(wǎng)上很多資料,請自行查閱。在這里,只寫關(guān)鍵的修改:

          A)找到<servernames autodetect="true" autodetectIP="true"> 設(shè)成        

                   autodetect="false" autodetectIP="false"

                   autodetct設(shè)為true會自動偵測你的主機(jī)名,設(shè)成false會用你指定的server name。

                   autodetectIP設(shè)為true會為你的servername加上ip。

          B)設(shè)置servername 將默認(rèn)的為localhost改成你的server名字 如king.cn:

          <servername>king.cn</servername>

          然后修改Linux的hosts主機(jī)設(shè)置文件:

          [root@susun177 SAR-INF]# vi /etc/hosts

          在打開的文件添加一行,然后保存:

          192.168.1.177           king.cn   king

          注意:第一個為IP地址  第二個為主機(jī)域名  第三個為主機(jī)名稱

          提示:名字后面應(yīng)該要加上.com或者.cn這樣163等郵件服務(wù)器才不會拒絕的。

          C)注釋掉

                   <mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor>

                       <processor> relay-denied </processor>

                       <notice>550 - Requested action not taken: relaying denied</notice>

                   </mailet>

          D)配置DNS Server,先通過netstat命令查看dns配置

          [root@susun177 SAR-INF]# netstat -rn

          Kernel IP routing table

          Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface

          192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0

          169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0

          找到<dnsserver>,在<servers>里最前面添加一行: <server>192.168.1.0</server> ,                同時設(shè)置autodiscover為false。

             <dnsserver>

                <servers>

                   <!--Enter ip address of your DNS server, one IP address per server -->

                   <!-- element. -->

                   <!--

                    <server>127.0.0.1</server>

                   -->

                     <server>10.168.0.10</server>         

                </servers>

                <!-- Change autodiscover to false if you would like to turn off autodiscovery -->

                <!-- and set the DNS servers manually in the <servers> section -->

                <autodiscover>false</autodiscover>

                <authoritative>false</authoritative>

                <!-- Maximum number of entries to maintain in the DNS cache -->

                <maxcachesize>50000</maxcachesize>

             </dnsserver>

          E)修改James數(shù)據(jù)庫連接字符串:

                <data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">

                   <driver>oracle.jdbc.driver.OracleDriver</driver>

                   <dburl>jdbc:oracle:thin:@192.168.1.17:1521:hello</dburl>

                   <user>hello</user>

                   <password>kitty</password>

                   <keep-alive>select 1 from dual</keep-alive>

                   <testOnBorrow>true</testOnBorrow>

                   <testOnReturn>true</testOnReturn>

                   <max>50</max>

                </data-source>

          以上用的是oracle數(shù)據(jù)庫,如果是其他數(shù)據(jù)庫,則需要修改為對應(yīng)的數(shù)據(jù)庫連接驅(qū)動,以及數(shù)據(jù)庫用戶信息。

          注意:一定要記得配置<keep-alive>,該參數(shù)的意思是,在使用連接池的連接之前,是否需要驗(yàn)證該連接是否有效。之前,我沒有設(shè)置該參數(shù),結(jié)果總是出現(xiàn)收不到郵件的問題。

          4)優(yōu)化一下James內(nèi)存,在../james-2.3.2/bi/phoenix.sh加入:

          # Set Heap Size 2007-0818,fix OutOfMemory bug while transporting big mail

          PHOENIX_JVM_OPTS="$PHOENIX_JVM_OPTS -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M"

          修改../james-2.3.2/conf/wrapper.conf的jvm配置,設(shè)置初始內(nèi)存128M,最大內(nèi)存512M

                             # Initial Java Heap Size (in MB)

                             #wrapper.java.initmemory=16

                             wrapper.java.initmemory=128

                  

                             # Maximum Java Heap Size (in MB)

                             #wrapper.java.maxmemory=64

                             wrapper.java.maxmemory=512

          5) 復(fù)制數(shù)據(jù)庫驅(qū)動到../james-2.3.2/lib目錄下,我用的是oracle數(shù)據(jù)庫,驅(qū)動包為:ojdbc14.jar

          6)重啟Apache James服務(wù)。

          7)最后,進(jìn)入郵件系統(tǒng)全局管理,將系統(tǒng)的域名改為上述的server name。

          8)如無意外一切OK。

          posted @ 2011-03-24 20:35 別昨非 閱讀(5012) | 評論 (0)編輯 收藏
           
          1. Map<String,String> map = new HashMap<String,String>();  
          2. for(Map.Entry<String, String> entry : map.entrySet()){  
          3.     String value = entry.getValue();  
          4.     String key = entry.getKey();  
          5. }
          posted @ 2011-03-24 11:08 別昨非 閱讀(353) | 評論 (0)編輯 收藏
           

          PHP數(shù)據(jù)類型轉(zhuǎn)換

          PHP的數(shù)據(jù)類型轉(zhuǎn)換屬于強(qiáng)制轉(zhuǎn)換,允許轉(zhuǎn)換的PHP數(shù)據(jù)類型有:

          •(int)、(integer):轉(zhuǎn)換成整形
          •(float)、(double)、(real):轉(zhuǎn)換成浮點(diǎn)型
          •(string):轉(zhuǎn)換成字符串
          •(bool)、(boolean):轉(zhuǎn)換成布爾類型
          •(array):轉(zhuǎn)換成數(shù)組
          •(object):轉(zhuǎn)換成對象
          PHP數(shù)據(jù)類型有三種轉(zhuǎn)換方式:

          •在要轉(zhuǎn)換的變量之前加上用括號括起來的目標(biāo)類型
          •使用3個具體類型的轉(zhuǎn)換函數(shù),intval()、floatval()、strval()
          •使用通用類型轉(zhuǎn)換函數(shù)settype(mixed var,string type)
           第一種轉(zhuǎn)換方式: (int)  (bool)  (float)  (string)  (array) (object)

           
          1.<?php   
          2.$num1=3.14;   
          3.$num2=(int)$num1;   
          4.var_dump($num1); //輸出float(3.14)   
          5.var_dump($num2); //輸出int(3)   
          6.?>  
          第二種轉(zhuǎn)換方式:  intval()  floatval()  strval()

           
          1.<?php   
          2.$str="123.9abc";   
          3.$int=intval($str);     //轉(zhuǎn)換后數(shù)值:123   
          4.$float=floatval($str); //轉(zhuǎn)換后數(shù)值:123.9   
          5.$str=strval($float);   //轉(zhuǎn)換后字符串:"123.9"    
          6.?>  
          第三種轉(zhuǎn)換方式:  settype();

           
          1.<?php   
          2.$num4=12.8;   
          3.$flg=settype($num4,"int");   
          4.var_dump($flg);  //輸出bool(true)   
          5.var_dump($num4); //輸出int(12)   
          6.?> 

          posted @ 2010-03-31 20:25 別昨非 閱讀(70498) | 評論 (3)編輯 收藏
           
          1. $(document).ready(function(){    
          2.   
          3. /* 設(shè)置默認(rèn)屬性 */    
          4. $.validator.setDefaults({    
          5.   submitHandler: function(form) { form.submit(); }    
          6. });    
          7. // 中文字兩個字節(jié)    
          8. jQuery.validator.addMethod("byteRangeLength", function(value, element, param) {    
          9.   var length = value.length;    
          10.   for(var i = 0; i < value.length; i++){    
          11.    if(value.charCodeAt(i) > 127){    
          12.     length++;    
          13.    }    
          14.   }    
          15.   return this.optional(element) || ( length >= param[0] && length <= param[1] );    
          16. }, "請確保輸入的值在3-15個字節(jié)之間(一個中文字算2個字節(jié))");    
          17.   
          18. /* 追加自定義驗(yàn)證方法 */    
          19. // 身份證號碼驗(yàn)證    
          20. jQuery.validator.addMethod("isIdCardNo", function(value, element) {    
          21.   return this.optional(element) || isIdCardNo(value);    
          22. }, "請正確輸入您的身份證號碼");    
          23.   
          24. // 字符驗(yàn)證    
          25. jQuery.validator.addMethod("userName", function(value, element) {    
          26.   return this.optional(element) || /^[\u0391-\uFFE5\w]+$/.test(value);    
          27. }, "用戶名只能包括中文字、英文字母、數(shù)字和下劃線");    
          28.   
          29. // 手機(jī)號碼驗(yàn)證    
          30. jQuery.validator.addMethod("isMobile", function(value, element) {    
          31.   var length = value.length;    
          32.   return this.optional(element) || (length == 11 && /^(((13[0-9]{1})|(15[0-9]{1}))+\d{8})$/.test(value));    
          33. }, "請正確填寫您的手機(jī)號碼");    
          34.   
          35. // 電話號碼驗(yàn)證    
          36. jQuery.validator.addMethod("isPhone", function(value, element) {    
          37.   var tel = /^(\d{3,4}-?)?\d{7,9}$/g;    
          38.   return this.optional(element) || (tel.test(value));    
          39. }, "請正確填寫您的電話號碼");    
          40.   
          41. // 郵政編碼驗(yàn)證    
          42. jQuery.validator.addMethod("isZipCode", function(value, element) {    
          43.   var tel = /^[0-9]{6}$/;    
          44.   return this.optional(element) || (tel.test(value));    
          45. }, "請正確填寫您的郵政編碼");    
          46. $(regFrom).validate({    
          47. /* 設(shè)置驗(yàn)證規(guī)則 */    
          48.   rules: {    
          49.    userName: {    
          50.     required: true,    
          51.     userName: true,    
          52.     byteRangeLength: [3,15]    
          53.    },    
          54.    password: {    
          55.     required: true,    
          56.     minLength: 5    
          57.    },    
          58.    repassword: {    
          59.     required: true,    
          60.     minLength: 5,    
          61.     equalTo: "#password"    
          62.    },    
          63.    question: {    
          64.     required: true    
          65.    },    
          66.    answer: {    
          67.     required: true    
          68.    },    
          69.    realName: {    
          70.     required: true    
          71.    },    
          72.    cardNumber: {    
          73.     isIdCardNo: true    
          74.    },    
          75.    mobilePhone: {    
          76.     isMobile: true    
          77.    },    
          78.    phone: {    
          79.     isPhone: true    
          80.    },    
          81.    email: {    
          82.     required: true,    
          83.     email: true    
          84.    },    
          85.    zipCode: {    
          86.     isZipCode:true    
          87.    }    
          88.   },    
          89. /* 設(shè)置錯誤信息 */    
          90.   messages: {    
          91.    userName: {    
          92.     required: "請?zhí)顚懹脩裘?,    
          93.     byteRangeLength: "用戶名必須在3-15個字符之間(一個中文字算2個字符)"    
          94.    },    
          95.    password: {    
          96.     required: "請?zhí)顚懨艽a",    
          97.     minlength: jQuery.format("輸入{0}.")    
          98.    },    
          99.    repassword: {    
          100.     required: "請?zhí)顚懘_認(rèn)密碼",    
          101.     equalTo: "兩次密碼輸入不相同"    
          102.    },    
          103.    question: {    
          104.     required: "請?zhí)顚懩拿艽a提示問題"    
          105.    },    
          106.    answer: {    
          107.     required: "請?zhí)顚懩拿艽a提示答案"    
          108.    },    
          109.    realName: {    
          110.     required: "請?zhí)顚懩恼鎸?shí)姓名"    
          111.    },    
          112.    email: {    
          113.     required: "請輸入一個Email地址",    
          114.     email: "請輸入一個有效的Email地址"    
          115.    }    
          116.   },    
          117. /* 錯誤信息的顯示位置 */    
          118.   errorPlacement: function(error, element) {    
          119.    error.appendTo( element.parent() );    
          120.   },    
          121. /* 驗(yàn)證通過時的處理 */    
          122.   success: function(label) {    
          123.    // set   as text for IE    
          124.    label.html(" ").addClass("checked");    
          125.   },    
          126. /* 獲得焦點(diǎn)時不驗(yàn)證 */    
          127.   focusInvalid: false,    
          128.   onkeyup: false    
          129. });    
          130.   
          131. // 輸入框獲得焦點(diǎn)時,樣式設(shè)置    
          132. $('input').focus(function(){    
          133.   if($(this).is(":text") || $(this).is(":password"))    
          134.    $(this).addClass('focus');    
          135.   if ($(this).hasClass('have_tooltip')) {    
          136.    $(this).parent().parent().removeClass('field_normal').addClass('field_focus');    
          137.   }    
          138. });    
          139.   
          140. // 輸入框失去焦點(diǎn)時,樣式設(shè)置    
          141. $('input').blur(function() {    
          142.   $(this).removeClass('focus');    
          143.   if ($(this).hasClass('have_tooltip')) {    
          144.    $(this).parent().parent().removeClass('field_focus').addClass('field_normal');    
          145.   }    
          146. });    
          147. });   
          posted @ 2010-03-31 15:27 別昨非 閱讀(892) | 評論 (0)編輯 收藏
           

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          <html xmlns="http://www.w3.org/1999/xhtml">
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
          <title>jQuery validation plug-in - main demo</title>

          <link rel="stylesheet" type="text/css" media="screen" href="css/screen.css" />

          <script src="../lib/jquery.js" type="text/javascript"></script>
          <script src="../jquery.validate.js" type="text/javascript"></script>

          <script type="text/javascript">
          $.validator.setDefaults({
           submitHandler: function() { alert("submitted!"); }
          });

          $().ready(function() {
           // validate the comment form when it is submitted
           $("#commentForm").validate();
           
           // validate signup form on keyup and submit
           $("#signupForm").validate({
            rules: {
             firstname: "required",
             lastname: "required",
             username: {
              required: true,
              minlength: 2
             },
             password: {
              required: true,
              minlength: 5
             },
             confirm_password: {
              required: true,
              minlength: 5,
              equalTo: "#password"
             },
             email: {
              required: true,
              email: true
             },
             topic: {
              required: "#newsletter:checked",
              minlength: 2
             },
             agree: "required"
            },
            messages: {
             firstname: "Please enter your firstname",
             lastname: "Please enter your lastname",
             username: {
              required: "Please enter a username",
              minlength: "Your username must consist of at least 2 characters"
             },
             password: {
              required: "Please provide a password",
              minlength: "Your password must be at least 5 characters long"
             },
             confirm_password: {
              required: "Please provide a password",
              minlength: "Your password must be at least 5 characters long",
              equalTo: "Please enter the same password as above"
             },
             email: "Please enter a valid email address",
             agree: "Please accept our policy"
            }
           });
           
           // propose username by combining first- and lastname
           $("#username").focus(function() {
            var firstname = $("#firstname").val();
            var lastname = $("#lastname").val();
            if(firstname && lastname && !this.value) {
             this.value = firstname + "." + lastname;
            }
           });
           
           //code to hide topic selection, disable for demo
           var newsletter = $("#newsletter");
           // newsletter topics are optional, hide at first
           var inital = newsletter.is(":checked");
           var topics = $("#newsletter_topics")[inital ? "removeClass" : "addClass"]("gray");
           var topicInputs = topics.find("input").attr("disabled", !inital);
           // show when newsletter is checked
           newsletter.click(function() {
            topics[this.checked ? "removeClass" : "addClass"]("gray");
            topicInputs.attr("disabled", !this.checked);
           });
          });
          </script>

          <style type="text/css">
          #commentForm { width: 500px; }
          #commentForm label { width: 250px; }
          #commentForm label.error, #commentForm input.submit { margin-left: 253px; }
          #signupForm { width: 670px; }
          #signupForm label.error {
           margin-left: 10px;
           width: auto;
           display: inline;
          }
          #newsletter_topics label.error {
           display: none;
           margin-left: 103px;
          }
          </style>

          </head>
          <body>

          <h1 id="banner"><a >jQuery Validation Plugin</a> Demo</h1>
          <div id="main">

          <p>Default submitHandler is set to display an alert into of submitting the form</p>

          <form class="cmxform" id="commentForm" method="get" action="">
           <fieldset>
            <legend>Please provide your name, email address (won't be published) and a comment</legend>
            <p>
             <label for="cname">Name (required, at least 2 characters)</label>
             <input id="cname" name="name" class="required" minlength="2" />
            <p>
             <label for="cemail">E-Mail (required)</label>
             <input id="cemail" name="email" class="required email" />
            </p>
            <p>
             <label for="curl">URL (optional)</label>
             <input id="curl" name="url" class="url" value="" />
            </p>
            <p>
             <label for="ccomment">Your comment (required)</label>
             <textarea id="ccomment" name="comment" class="required"></textarea>
            </p>
            <p>
             <input class="submit" type="submit" value="Submit"/>
            </p>
           </fieldset>
          </form>

          <form class="cmxform" id="signupForm" method="get" action="">
           <fieldset>
            <legend>Validating a complete form</legend>
            <p>
             <label for="firstname">Firstname</label>
             <input id="firstname" name="firstname" />
            </p>
            <p>
             <label for="lastname">Lastname</label>
             <input id="lastname" name="lastname" />
            </p>
            <p>
             <label for="username">Username</label>
             <input id="username" name="username" />
            </p>
            <p>
             <label for="password">Password</label>
             <input id="password" name="password" type="password" />
            </p>
            <p>
             <label for="confirm_password">Confirm password</label>
             <input id="confirm_password" name="confirm_password" type="password" />
            </p>
            <p>
             <label for="email">Email</label>
             <input id="email" name="email" />
            </p>
            <p>
             <label for="agree">Please agree to our policy</label>
             <input type="checkbox" class="checkbox" id="agree" name="agree" />
            </p>
            <p>
             <label for="newsletter">I'd like to receive the newsletter</label>
             <input type="checkbox" class="checkbox" id="newsletter" name="newsletter" />
            </p>
            <fieldset id="newsletter_topics">
             <legend>Topics (select at least two) - note: would be hidden when newsletter isn't selected, but is visible here for the demo</legend>
             <label for="topic_marketflash">
              <input type="checkbox" id="topic_marketflash" value="marketflash" name="topic" />
              Marketflash
             </label>
             <label for="topic_fuzz">
              <input type="checkbox" id="topic_fuzz" value="fuzz" name="topic" />
              Latest fuzz
             </label>
             <label for="topic_digester">
              <input type="checkbox" id="topic_digester" value="digester" name="topic" />
              Mailing list digester
             </label>
             <label for="topic" class="error">Please select at least two topics you'd like to receive.</label>
            </fieldset>
            <p>
             <input class="submit" type="submit" value="Submit"/>
            </p>
           </fieldset>
          </form>

          <h3>Syntetic examples</h3>
          <ul>
           <li><a href="errorcontainer-demo.html">Error message containers in action</a></li>
           <li><a href="custom-messages-metadata-demo.html">Custom Messages as Metadata</a></li>
           <li><a href="radio-checkbox-select-demo.html">Radio and checkbox buttons and selects</a></li>
           <li><a href="ajaxSubmit-intergration-demo.html">Integration with Form Plugin (AJAX submit)</a></li>
           <li><a href="custom-methods-demo.html">Custom methods and message display.</a></li>
           <li><a href="dynamic-totals.html">Dynamic forms</a></li>
           <li><a href="themerollered.html">Forms styled with jQuery UI Themeroller</a></li>
          </ul>
          <h3>Real-world examples</h3>
          <ul>
           <li><a href="milk/">Remember The Milk signup form</a></li>
           <li><a href="marketo/">Marketo signup form</a></li>
           <li><a href="multipart/">Buy and Sell a House multipart form</a></li>
           <li><a href="captcha/">Remote captcha validation</a></li>
          </ul>

          <h3>Testsuite</h3>
          <ul>
           <li><a href="../test/">Validation Testsuite</a></li>
          </ul> 

          </div>

          <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
          </script>
          <script type="text/javascript">
          _uacct = "UA-2623402-1";
          urchinTracker();
          </script>
          </body>
          </html>

          posted @ 2010-03-31 15:27 別昨非 閱讀(3511) | 評論 (3)編輯 收藏
           
          主站蜘蛛池模板: 泰顺县| 开封市| 雷州市| 治多县| 马山县| 肃宁县| 霞浦县| 永清县| 任丘市| 枣强县| 松桃| 山丹县| 云和县| 六安市| 宜都市| 仙居县| 西贡区| 项城市| 平乡县| 临漳县| 于田县| 临清市| 宁河县| 合作市| 望城县| 本溪市| 华池县| 泉州市| 南部县| 和顺县| 泗洪县| 大新县| 肥乡县| 闸北区| 灵山县| 桃源县| 襄城县| 安庆市| 曲阜市| 顺昌县| 阿拉善右旗|