SSH技術(shù)的整合

           

          基于Struts+Spring+Hibernate的使用和部署

          課題說(shuō)明:   就現(xiàn)在WEB開(kāi)發(fā)而言,J2EE企業(yè)級(jí)開(kāi)發(fā)技術(shù)比較成熟,開(kāi)發(fā)模式模式也比較繁多,較流行開(kāi)發(fā)模式MVC更是普遍,而基于MVC模式開(kāi)發(fā)的框架也是種類繁多,現(xiàn)在使用最多的可能就是SSH這三種框架,所以展開(kāi)對(duì)這三個(gè)框架的糅合使用和淺顯的研究探討。還有由于過(guò)去常用的是TomCat的部署和使用,下來(lái)學(xué)習(xí)WebLogic的部署,比較其相同點(diǎn)和不同點(diǎn)。

          研究?jī)?nèi)容:   主要是研究討論SSH這三種開(kāi)源框架的糅合使用到底是怎樣實(shí)現(xiàn)方法和策略,及各自的優(yōu)缺點(diǎn),對(duì)以后Domino技術(shù)和J2EE技術(shù)結(jié)合奠定基礎(chǔ)及WebLogic的部署和TomCat的比較。

          需要注意:

          第一:環(huán)境的配置,因?yàn)?/span>SSH使用到的是三種基于java語(yǔ)言實(shí)現(xiàn)的開(kāi)源框架,所以基本要先把JRE配置好即安裝JDK(6.0).

          第二:配置好Struts ,Spring ,Hibernate這三個(gè)開(kāi)源框架的開(kāi)發(fā)環(huán)境配置。鑒于簡(jiǎn)單起見(jiàn)可以使用MyEclipse6.0 IDE這樣三種開(kāi)源框架的配置文件IDE已經(jīng)集成好,直接添加就可以是要用。

          第三:開(kāi)發(fā)使用的部署工具是Tomcat,可以嘗試使用WebLogic,然后對(duì)其比較。

          成果方式:

          一:Struts的基礎(chǔ)介紹。

           1: 介紹Struts

          Struts是目前WEB開(kāi)發(fā)中比較流行的一種開(kāi)源框架,它主要是采用ServletJSP技術(shù)實(shí)現(xiàn)Model2(Servlet+JSP+JavaBean)類型MVC的設(shè)計(jì)模式,即是實(shí)現(xiàn) 模型-視圖-控制三部分模塊的分離。

          2StrutsMVC的比較

           

           

          Struts

          MVC

          M

          JavaBean(業(yè)務(wù)數(shù)據(jù)),

          Service Class(業(yè)務(wù)邏輯)

          M模型

          V

          JSP(動(dòng)態(tài)網(wǎng)頁(yè))

          ActionForm(表單數(shù)據(jù)操作)

          V視圖

          C

          ActionServlet(接受頁(yè)面請(qǐng)求),

          Action(處理請(qǐng)求;控制流程),

          struts-config.xml(配置參數(shù))

          C控制部分

          3Struts的基本工作流程

           基本流程:

          (1):WEB啟動(dòng),初始化ActionServlet,讀取struts-config.xml的配置信息,作準(zhǔn)備。

          (2):用戶發(fā)出一個(gè)請(qǐng)求,ActionServlet接受,根據(jù)ActionMapping查找相應(yīng)的Action

          (3):Action調(diào)用JavaBean,并且結(jié)合ActionForm,處理數(shù)據(jù)。

          (4):處理完成后,返回ActionForward,指定轉(zhuǎn)向的地方。

          二:Spring基礎(chǔ)介紹

          1: 介紹Spring

          Spring框架也是一個(gè)開(kāi)源框架,它的核心概念是依賴注入(Dependency Injection),通過(guò)依賴注入機(jī)制,可以再運(yùn)行期間將組件之間的依賴關(guān)系由Spring容器注入組件,同時(shí)spring框架還提供AOP開(kāi)發(fā)以及事務(wù)管理的組件,以及對(duì)WEB層和持久層的支持,從而可以很好配合StrutsHibernate框架。

          2Spring框架的組建構(gòu)成

            Spring框架大體由七個(gè)模塊構(gòu)成:

          A Core模塊。該模塊是其他模塊的功能基礎(chǔ),在這個(gè)模塊中存在BeanFactory類,它是Spring框架的核心,它實(shí)現(xiàn)依賴注入,是系統(tǒng)中的各組件的一倆關(guān)系從代碼中獨(dú)立出來(lái),通過(guò)配置文件來(lái)實(shí)現(xiàn);BeanFactory也是Spring框架的核心容器,因?yàn)樗芾砣萜髦袑?duì)象的生命周期。

          B Context模塊。這個(gè)模塊是通過(guò)配置文件將各個(gè)組件組合在一起,使spring成為框架。其中ApplicationContext類擴(kuò)展繼承BeanFactory的功能,因此它也可以成為Spring容器。此外該模塊還提供其他的服務(wù)。

          C DAO模塊。這個(gè)模塊把JDBC代碼中的一些內(nèi)容抽象出來(lái),簡(jiǎn)化JDBC編碼。

          D ORM模塊。這個(gè)模塊提供對(duì)ORM框架的支持,從而可以擴(kuò)展Spring框架支持ORM框架。

          E AOP模塊。這個(gè)模塊提供AOP(面向切面編程)的功能,通過(guò)這個(gè)模塊可以將通用功能插入到業(yè)務(wù)邏輯中。

          FWEB模塊。此模塊提供WEB應(yīng)用所需要的上下文,可以與Struts等框架相結(jié)合。

          GWEBmvc模塊,它提供面向WEB應(yīng)用的MVC模式,模塊利用依賴注入將控制部分和業(yè)務(wù)邏輯清晰分離。

          3:理解依賴注入和方式

               依賴注入也就是控制反轉(zhuǎn)(IoC),把組件之間的依賴關(guān)系通過(guò)Spring容器來(lái)管理和注入。

          組件之間的依賴關(guān)系通過(guò)配置文件來(lái)定義,或者說(shuō)通過(guò)注入來(lái)實(shí)現(xiàn)的。

           

          A:配置WebApplicationContext

             兩種方式:

                 (1):在web.xml文件中配置WebApplicationContext ,就可以在WEB容器自動(dòng)加載applicationContext.xml文件,具體的配置方法有兩種:

          a:利用Servlet接口來(lái)實(shí)現(xiàn)

          具體代碼:

               <context-param>

                   <param-name>contextConfigLocation</param-value>

                   <param-value>/WEB-INF/applicationContext.xml</param-value>

               </context-param>

               <servlet>

                  <servlet-name>context</servlet-name>

          <servlet-class>org.springframework.web.context.ContextLoaderServlet

          </servlet-class>

                  <load-on-startup>1</load-on-startup>

               </servlet>

          b:利用Listeners接口來(lái)實(shí)現(xiàn)

          具體代碼:

          <listener>

           <listener-class>

          org.springframework.web.context.ContextLoaderListener

          </listener-class>

          </listerer>

               <context-param>

                   <param-name>contextConfigLocation</param-value>

                   <param-value>/WEB-INF/applicationContext.xml</param-value>

               </context-param>

          (2)Struts中實(shí)現(xiàn)Spring的插件集成

          <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
                          
          <set-propert property="contextConfigLocation"

          value="/WEB-INF/applicationContext.xml" />
                    
          </plug-in>

          BSpringBean

          Bean的定義:

           1Bean的參數(shù)配置

                    id bean的代號(hào)標(biāo)示

                    classBean的對(duì)應(yīng)的類URL

                    singleton設(shè)置是否為單態(tài)

                    

          2Bean屬性的配置

                 三種類型的Bean屬性配置:一般用<property>屬性來(lái)嵌入Bean的引用屬性

                   a:基本數(shù)據(jù)類型     —— 通過(guò)<value>元素來(lái)表示

                   b:其他Bean的引用  —— 通過(guò)<ref>元素來(lái)表示

                   c:對(duì)集合的引用      —— 通過(guò)<list><set><map>

          3:依賴注入的兩種方式

                   a:設(shè)置注入。

                         主要是在Bean中通過(guò)get()set()方法獲得相應(yīng)的屬性,在配置文件中通過(guò)<property>元素來(lái)實(shí)現(xiàn)。

                   B:構(gòu)造函數(shù)注入。 

                         主要是在Bean中通過(guò)Bean的構(gòu)造方法初始化相應(yīng)的屬性,在配置文件中通過(guò)<constructor-arg>元素來(lái)實(shí)現(xiàn)。

          C:實(shí)例化Bean

                1BeanFactory的實(shí)例化

           

                       BeanFactory采用工廠模式實(shí)例化和分發(fā)Bean。BeanFactory接口路徑為:org.springframework.beans.factory.BeanFactory. 該接口定義4個(gè)方法:

                     Boolean containsBean(String) 判斷給定的bean是否存在。

                     Object getBeanString)返回給定名字的Bean實(shí)例。

                     Object getBeanString,Class)返回給定名字的Bean,并把該Bean強(qiáng)制轉(zhuǎn)化為給定的Class類型。

                      Boolean isSingleton(String) 判斷給定的名字Bean是否為單態(tài)。

                

          BeanFactory接口有多實(shí)現(xiàn),其中常用的是org.springframework.beans.factory.XmlBeanFactory.

           使用方式:InputStream is=new FileInputStream(“applicationContext.xml”);

                           XmlBeanFactory factory=new XmlBeanFactory(is);

              sampleSpringBean sample=( sampleSpringBean) factory.getBean(“sampleSpringBean”);                

           

                 2:ApplicationContext的實(shí)例化

           

                         BeanFactory適應(yīng)于較為簡(jiǎn)單的應(yīng)用系統(tǒng),對(duì)于復(fù)雜的應(yīng)用系統(tǒng)應(yīng)該使用ApplicationContext容器,它覆蓋BeanFactory的所有功能,而且提供更多的其他方法。

                ApplicationContext接口位于包org.springframework.context.ApplicationContext中,他繼承BeanFactory接口,它的實(shí)現(xiàn)有多個(gè),常用的有3個(gè):

             ClassPathXmlApplicationContext:利用類路徑裝載bean配置文件信息。

             FileSystemXmlApplicationContext:利用文件系統(tǒng)裝載bean配置文件的信息。

             XmlWebApplicationContext:從Web裝載bean配置文件的信息。

                       加載ApplicationContext容器:  

          可以通過(guò)兩種方式:

          1:編碼的方式——就是配置WebApplicationContext是講到的。

          2:硬編碼的方式。

          ApplicationContext context = new FileSystemXmlApplicationContext(“applicationContext.xml”)

           

          ApplicationContext實(shí)例化bean的使用方法

          ApplicationContext context= new FileSystemXmlApplicationContext(“applicationContext.xml”);

          sampleSpringBean sample=( sampleSpringBean) context.getBean(“sampleSpringBean”);

           

           

           

           

          三:StrutsSpring的集成

                Struts框架出現(xiàn)早,對(duì)MVC的設(shè)計(jì)技術(shù)比Spring成熟,但是Spring框架的依賴注入和AOP(面向切面),以及聲明事務(wù)管理方面優(yōu)勢(shì)顯著,所以可以再業(yè)務(wù)邏輯方面使用它。

              StrutsSpring的集成實(shí)現(xiàn)方式也是比較多的,大體有三種方案:

            A:使用SpringActionSupport類集成Struts

               采用這種方式進(jìn)行集成的方案是:    修改Struts中的Action,使StrutsAction繼承SpringActionSupport類,這樣Action中定義的業(yè)務(wù)邏輯對(duì)象就可以通過(guò)getBean()方法從Spring的配置文件中獲得,從而達(dá)到目的。  但是這也有缺點(diǎn),就是StrutsActionSpring緊密的耦合在一起。

            B:使用SpringAction代理集成Struts

                 采用這種方式進(jìn)行集成的方案是:    需要建立一個(gè)SpringAction代理,代理StrutsAction,當(dāng)Struts執(zhí)行Action時(shí)候就會(huì)執(zhí)行這個(gè)代理。代理會(huì)在Spring的配置文件中找到真正的StrutsAction,然后交友這個(gè)Action去處理,當(dāng)然首先要在spring的配置文件中跑那個(gè)配置這個(gè)Action。                  這種集成只需要修改Actiontype屬性為 org.springframework.web.struts.DelegationActionProxy.并且SpringAction配置中的name屬性和StrutsAction配置path相同。       缺點(diǎn)是不容易找到是哪個(gè)Action處理的。

             C:修改struts控制器來(lái)集成Struts

                 采用這種方式進(jìn)行集成的方案是:   為拉直觀的的在Struts配置中顯示Action對(duì)應(yīng)的處理類,需要修改Strutscontroller,將struts-config.xml中的controller改為org.springframework.web.struts.DelegatingRequestProcessor.

           

          四:Hibernate的介紹

               Hibernate利用ORM(對(duì)象關(guān)系映射)的機(jī)制解決業(yè)務(wù)邏輯和數(shù)據(jù)訪問(wèn)的相分離的問(wèn)題,Hibernate封裝數(shù)據(jù)訪問(wèn)的細(xì)節(jié),簡(jiǎn)化數(shù)據(jù)訪問(wèn)的復(fù)雜程度,把注意力主要在業(yè)務(wù)邏輯上面,同時(shí)通過(guò)維護(hù)ORM文件,簡(jiǎn)單用以維護(hù)。

          1:對(duì)象持久化的概念

             由于實(shí)體域?qū)ο蟠嬖谟趦?nèi)存中,但是不可能永遠(yuǎn)存在,很多情況下把實(shí)體域?qū)ο笥谰玫拇鎯?chǔ)在數(shù)據(jù)庫(kù)中,這個(gè)過(guò)程就是對(duì)象持久化。  其中被持久化的實(shí)體域?qū)ο蠓Q為持久化對(duì)象,持久化對(duì)象對(duì)應(yīng)的產(chǎn)生類稱為持久化類。

            傳統(tǒng)的持久化方法是:  創(chuàng)建連接,執(zhí)行SQL語(yǔ)句,獲得結(jié)果集,關(guān)閉結(jié)果集,關(guān)閉數(shù)據(jù)庫(kù)連接。所以每次都要重復(fù)相同的過(guò)程,冗余太大。

          2ORM介紹

               ORM就是對(duì)象關(guān)系映射,主要目的是使業(yè)務(wù)邏輯和數(shù)據(jù)庫(kù)訪問(wèn)相分離,ORM中間件封裝數(shù)據(jù)訪問(wèn)的細(xì)節(jié),開(kāi)發(fā)者只需要進(jìn)行簡(jiǎn)單的操作就可以完成持久化工作。

               ORM的關(guān)鍵就是對(duì)象和關(guān)系的映射關(guān)系,因?yàn)橛羞@樣的映射關(guān)系,所以才可以簡(jiǎn)單的持久化對(duì)象。在ORM中,這種對(duì)應(yīng)的關(guān)系存在于一個(gè)XML文件中,稱為對(duì)象關(guān)系映射文件,這個(gè)映射文件起到一個(gè)橋梁作用,使得ORM中間件持久化一個(gè)對(duì)系那個(gè)的時(shí)候能夠找到目的地,即就是表。

          3Hibernate簡(jiǎn)介

          Hibernate就是一個(gè)ORM中間件,它是一個(gè)開(kāi)源的框架,對(duì)JDBC做啦輕量級(jí)的封裝,并且支持主流數(shù)據(jù)庫(kù),可以提高開(kāi)發(fā)效率。

           AHibernate的核心接口

               Hibernate的核心接口一共五個(gè):分別為ConfigurationSessionFactory,Session,QueryCriteria接口,以及Transaction接口。

           

            1configuration接口主要功能:   它是Hibernate的入口,創(chuàng)建configuration對(duì)象主要是把Hibernate的配置文件和ORM文件讀到內(nèi)存中,并且創(chuàng)建SessionFactory對(duì)象,把所有讀到的信息復(fù)制給SessionFactory。

           

           2SessionFactory接口主要功能:   它緩存復(fù)制到的所有讀到的信息,以及根據(jù)映射信息自動(dòng)生成的SQL語(yǔ)句,并產(chǎn)生Session對(duì)象。一個(gè)數(shù)據(jù)庫(kù)只能對(duì)應(yīng)一個(gè)SessionFactory。

           

           3session接口主要功能:          這個(gè)接口主要是定義各種持久化操作的方法,比如:Save();CreateQuery();Update();

           

            4QueryCriteria接口主要功能:  主要數(shù)據(jù)庫(kù)的查詢,HQL語(yǔ)句主要是面向?qū)ο蟮臎](méi)他的參數(shù)是持久化類的類名和屬性,SQL語(yǔ)句主要是表和字段。

            5Transaction接口的主要功能是:    對(duì)底層的數(shù)據(jù)事務(wù)進(jìn)行封裝。

          BHibernate的配置文件

              Hibernate的配置文件有兩種類型:Hibernate.property ;Hibernate.cfg.xml,或者自定義配置文件。主要功能是配置數(shù)據(jù)庫(kù)連接的相關(guān)信息。

                   兩種文件的區(qū)別是:

          1Hibernate.cfg.xml多個(gè)<mapping>元素,這個(gè)元素的resource屬性值是ORM文件的路徑。

          2:兩者同時(shí)存在時(shí)候,configuration接口線加載Hibernate.property 文件,在加載Hibernate.cfg.xml,然后Hibernate.cfg.xml的信息覆蓋掉Hibernate.property的信息。

               CHibernate的初始化過(guò)程

                    Hibernate的初始化過(guò)程主要是遵循五個(gè)接口來(lái)實(shí)現(xiàn):

                  1:建立configuration對(duì)象。

                        Configuration config=new Configuration();

                        Config.addClass(持久化類);

                 或者  Configuration config=new Configuration().configureHibernate配置文件URL);

                  2:建立SessionFactory對(duì)象

                        SessionFactory factory=config.buildSessionFactory();

                        12步就完成Hibernate的初始化。

          3:建立Session對(duì)象

                 Session session=factory.OpenSession();

                  Session.save();

                 接著就可以完成相關(guān)操作。

          DHibernate的一般實(shí)例使用。

              1:創(chuàng)建數(shù)據(jù)庫(kù)  2:寫(xiě)相應(yīng)的持久化類  3:建立ORM文件 

          4:建立Hibernate配置文件  5:建立數(shù)據(jù)庫(kù)訪問(wèn)類DAO  6:建立業(yè)務(wù)邏輯

          五:SpringHibernate的集成策略

            通過(guò)對(duì)HibernateSpring的基本知識(shí)的了解和應(yīng)用,了解到SpringHibernate的有點(diǎn)鮮明,所以實(shí)現(xiàn)兩者的整合對(duì)開(kāi)發(fā)效率有很大的提高。

           

          A:集成方案:   SpringHibernate的集成方案有兩種:

           

           1:一種是利用Hibernate Synchronizer來(lái)自動(dòng)生成大量數(shù)據(jù)訪問(wèn)操作的方法。這些方法封裝了session對(duì)象的操作,開(kāi)發(fā)者可以直接利用這些方法來(lái)定義DAO,這種DAOSpring是沒(méi)有耦合的。

            2:另一種方式是通過(guò)Spring提供的Hibernate模板(Hibernate Template)來(lái)訪問(wèn)的。模板對(duì)session對(duì)象的操作進(jìn)行啦封裝,在開(kāi)發(fā)過(guò)程中可以直接使用模板的方法來(lái)實(shí)現(xiàn)數(shù)據(jù)的訪問(wèn),而且用戶不需要在定義和事物相關(guān)的語(yǔ)句,如開(kāi)始,提交,回滾事物以及進(jìn)行事務(wù)處理。但是這種方式HibernateSpring的耦合在一起,不利于移植。

           

          B:第一種方案的介紹

          Hibernate SynchronizerHibernate自帶的一種插件,利用它可以根據(jù)數(shù)據(jù)庫(kù)的表自動(dòng)生成ORM文件,持久化類,DAO類,并且對(duì)其中任何一個(gè)修改,都可以相應(yīng)的自動(dòng)改變。從而提高開(kāi)發(fā)效率。

          在這種集成方式中,Spring的配置文件ApplicationContext.xml文件是SpringHibernate結(jié)合的重要部分,它將應(yīng)用中的各種依賴關(guān)系裝配起來(lái),在運(yùn)行期將這種依賴關(guān)系注入內(nèi)存,還可以注入事務(wù)代理等,他就像是SpringHibernate結(jié)合的紐帶。

           

          C:第二種方案的介紹

          這種方案是利用Spring提供那個(gè)Hibernate Template來(lái)建立DAO類,并通過(guò)Spring配置文件將DAO類注入到應(yīng)用中。

          Spring對(duì)HibernateDAO提供支持,其中Spring提供的Hibernate Template類以及HibernateDaoSupport類是建立DAO時(shí)候用到的兩個(gè)類。

          1Hibernate模板類介紹

             Hibernate模板類存在于包org.springframework.orm.hibernate3下,它提供很多方法完成基本的操作??梢酝瓿纱蠖鄶?shù)DAO的基本方法。

           

          利用Hibernate的自帶的一下方法可以實(shí)現(xiàn)簡(jiǎn)單的一些數(shù)據(jù)庫(kù)操作,但隨對(duì)于復(fù)雜的數(shù)據(jù)庫(kù)操作,可以通過(guò)下面的方法來(lái)實(shí)現(xiàn):

           aObject execute(HibernateCallback  action)

           bList executeFind(HibernateCallback  action)

            從上面的方法中可以看到,都有一個(gè)HibernateCallback的實(shí)例作為參數(shù),因?yàn)橥ㄟ^(guò)HibernateCallback可以完成完全使用Hibernate的方式訪問(wèn)數(shù)據(jù)庫(kù),解決SpringHibernate集成以后不靈活的缺陷。

          HibernateCallback只是一個(gè)接口,他只有一個(gè)方法doInHibernateorg.hibernate.Session session,這個(gè)方法也只有一個(gè)參數(shù)Session。這樣doInHibernate方法的持久化操作與不使用Spring時(shí)的操作完全相同,這樣就可以像使用Hibernate一樣的訪問(wèn)方式。

           

          使用方法:首先DAO中聲明HibernateTemplate對(duì)象,然后通過(guò)該對(duì)象執(zhí)行那個(gè)相應(yīng)的簡(jiǎn)單操作。

           

          2 HibernateDaoSupport

              HibernateDaoSupport類封裝Hibernate Template類的操作,在HibernateDaoSupport類中主要提供兩個(gè)方法用于實(shí)現(xiàn)DAO。

          Apublic final void setSessionFactory(SessionFactory sessionFactory):這個(gè)方法用于接收Spring上下文中的SessionFactory對(duì)象的依賴注入。

          BPublic final HibernateTemplate getHibernateTemplate():用于根據(jù)SessionFactory產(chǎn)生的session,然后生成HibernateTemplate,從而訪問(wèn)數(shù)據(jù)庫(kù)。

           

          使用方法:在DAO的實(shí)現(xiàn)中,首先要使DAO集成HibernateDaoSupport類,然后通過(guò)Spring上下文注入DAO對(duì)SessionFactory的依賴,最后使用getHibernateTemplate()方法來(lái)完成具體的DAO的操作。

           

            

          posted on 2009-05-15 15:03 安陽(yáng) 閱讀(5052) 評(píng)論(7)  編輯  收藏 所屬分類: SSH筆記

          評(píng)論

          # re: SSH技術(shù)的整合 2009-05-15 15:05 安陽(yáng)

          很不錯(cuò)的,很詳細(xì)。努力。  回復(fù)  更多評(píng)論   

          # re: SSH技術(shù)的整合 2009-05-15 17:33 V

          不錯(cuò)  回復(fù)  更多評(píng)論   

          # re: SSH技術(shù)的整合 2009-05-21 10:51 11

          頂一下。。。  回復(fù)  更多評(píng)論   

          # re: SSH技術(shù)的整合 2009-05-30 23:17 哈哈哈

          恩 不賴   回復(fù)  更多評(píng)論   

          # re: SSH技術(shù)的整合 2009-06-26 17:02 w

          很好  回復(fù)  更多評(píng)論   

          # re: SSH技術(shù)的整合 2009-06-28 14:03 安陽(yáng)

          黑猩猩頂一下。  回復(fù)  更多評(píng)論   

          # re: SSH技術(shù)的整合 2012-08-22 16:28 andysd

          不錯(cuò)  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2012年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          隨筆分類(8)

          隨筆檔案(9)

          文章檔案(1)

          最新隨筆

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 唐河县| 华宁县| 南昌县| 紫金县| 贵阳市| 敖汉旗| 东明县| 万全县| 芷江| 米脂县| 页游| 郎溪县| 广德县| 逊克县| 台南市| 务川| 日土县| 玉树县| 板桥市| 稻城县| 余干县| 望江县| 英山县| 佛教| 六盘水市| 齐河县| 虎林市| 通江县| 东乌珠穆沁旗| 乐东| 桐城市| 盐边县| 新巴尔虎左旗| 晋中市| 连城县| 宁远县| 沧源| 遂川县| 宜丰县| 莱芜市| 南城县|