posts - 0,  comments - 1,  trackbacks - 0
              ===============Spring+Hibernate+Struts配置===============
          spring加載log4j
             web.xml
             < context - param >
              
          < param - name > log4jConfigLocation </ param - name >
              
          < param - value >/ WEB - INF / classes / log4j.properties </ param - value >
            
          </ context - param >
            
          < listener >
              
          < listener - class > org.springframework.web.util.Log4jConfigListener </ listener - class >
            
          </ listener >


          一.spring+struts
          1.加載springContext
                通過struts-config.xml中增加plug-in插件來加載springContext
             <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
               <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
             </plug-in>
            
          applicationContext.xml為spring的配置文件

          2.將strutsAction交給Spring容器進行管理
                修改struts-config.xml中的action屬性,action的type值不指定具體的實現類,統一修改成代理類

            
            <action input="/login.jsp"
                   name="loginActionForm"
                   path="/loginAction" 
                   scope="request"   
                   type="org.springframework.web.struts.DelegatingActionProxy"
                   validate="false">
                <forward name="success" path="/success.jsp" />
                <forward name="failure" path="/failure.jsp" />
              </action>

          3.在applicationContext.xml中的bean name值設定與struts-config.xml中action path值相對應,以使代理類DelegatingActionProxy能夠根據傳入的path在springContext中找到相應的bean,并將實例返回給struts.
          <bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
            <property name="login">
              <ref bean="loginBOProxy" />
            </property>
          </bean>

          二.spring+hibernate
            
          1.dateSource
                在springContext中設置dateSource Bean
               <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
                  <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"></property>
                  <property name="url" value="jdbc:jtds:sqlserver://192.168.56.32:1433/testDB"></property>
                  <property name="username" value="it"></property>
                  <property name="password" value="it"></property>
               </bean>
               2.sessionFactory
                 在springContext中設置sessionFactory Bean
            <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
              <property name="dataSource" ref="dataSource"></property>
              <property name="mappingResources">
                  <list>
                    <value>hbm\OvertimeRecord.hbm.xml</value><!--hbm映射文件-->
                    <value>hbm\OvertimePermit.hbm.xml</value>
                  </list>
              </property>
              <property name="hibernateProperties">
                  <props>
                     <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
                     <prop key="hibernate.show_sql">true</prop>
                     <prop key="hibernate.jdbc.fetch_size">50</prop>
                     <prop key="hibernate.jdbc.batch_size">20</prop>
                  </props>
              </property>
            </bean>
           
           
          3.transactionManager
             在springContext中設置transactionManager Bean
           
            <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
               <property name="sessionFactory">
                 <ref local="sessionFactory" />
               </property>
             </bean>

            
          4.DAO bean
                <bean id="Ilogin" class="com.derek.business.Login">
                    <property name="sessionFactory">
                        <ref local="sessionFactory"/>
                    </property>
                </bean>
                public class Login extends HibernateDaoSupport implements LoginInterface
                DAO 繼承HibernateDaoSupport
                HibernateSupport實現了HibernateTemplate和SessionFactory實例的關聯, HibernateTemplate對Hibernate Session操作進行了封裝,HibernateTemplate.execute方法則是一封裝機制的核心. 借助HibernateTemplate我們可以脫離每次數據操作必須首先獲得Session實例、啟動事務、提交/回滾事務以及煩雜的try/catch/finally的繁瑣操作.
                  Spring中的事務管理實際上是基于動態AOP機制實現,為了實現動態AOP,Spring在默認情況下會使用Java DynamicProxy,但是,Dynamic Proxy要求其代理的對象必須實現一個接口,該接口定義了準備進行代理的方法。而對于沒有實現任何接口的Java Class,需要采用其他方式,Spring通過CGLib實現這一功能。


             5.DAOProxy 代理bean
                  通過代理,將上面的DAO bean 納入到spring容器的事務管理中,并在其中設置對哪些方法進行事務管理
               <bean id="loginBOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
                     <property name="transactionManager">
                          <ref bean="transactionManager" />
                     </property>
                     <property name="target">
                          <ref local="Ilogin" /> <!--所代理的bean-->
                     </property>
                     <property name="transactionAttributes">
                          <props>
                               <prop key="insert*">PROPAGATION_REQUIRED</prop> <!--以insert開頭的方法加入事務管理-->
                               <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <!--以get開頭的方法只讀-->
                          </props>
                     </property>
                </bean>

              
              6.action bean
                <bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
                   <property name="login">
                      <ref bean="loginBOProxy" /> <!--要將其使用的DAO bean加入事務管理,就必須ref他的代理bean,且在LoginAction中該屬性須由其接口強制類型轉換-->
                   </property>
                </bean>

          示例代碼:
            struts-conifg.xml

          <? xml version = " 1.0 "  encoding = " UTF-8 " ?>
          <! DOCTYPE struts - config PUBLIC  " -//Apache Software Foundation//DTD Struts Configuration 1.1//EN "   " http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd " >
          < struts - config >

            
          < form - beans >
              
          < form - bean name = " loginActionForm "  type = " com.derek.form.LoginActionForm "   />
            
          </ form - beans >
            
          < action - mappings >
              
          < action input = " /login.jsp "  name = " loginActionForm "  path = " /loginAction "  scope = " request "  type = " org.springframework.web.struts.DelegatingActionProxy "  validate = " false " >
                
          < forward name = " success "  path = " /success.jsp "   />
                
          < forward name = " failure "  path = " /failure.jsp "   />
              
          </ action >
            
          </ action - mappings >
            
          < plug - in className = " org.springframework.web.struts.ContextLoaderPlugIn " >
              
          < set - property property = " contextConfigLocation "  value = " /WEB-INF/applicationContext.xml "   />
            
          </ plug - in >
          </ struts - config >

            applicationContext.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans SYSTEM "D:\JAVA\MyWork\SpringDemo\SpringWeb\WEB-INF\spring-beans.dtd">
          <!--DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"-->

          <!--
            
          - Root application context for the Countries application.
            
          - Web-specific beans are defined in "countries-servlet.xml".
            
          -->
          <beans>

          <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
           
          <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"></property>
           
          <property name="url" value="jdbc:jtds:sqlserver://192.168.56.32:1433/testDB"></property>
           
          <property name="username" value="it"></property>
           
          <property name="password" value="itservice"></property>
          </bean>

          <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
           
          <property name="dataSource" ref="dataSource"></property>
           
          <property name="mappingResources">
            
          <list>
              
          <value>hbm\OvertimeRecord.hbm.xml</value>
              
          <value>hbm\OvertimePermit.hbm.xml</value>
            
          </list>
           
          </property>
           
          <property name="hibernateProperties">
            
          <props>
               
          <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
               
          <prop key="hibernate.show_sql">true</prop>
               
          <prop key="hibernate.jdbc.fetch_size">50</prop>
               
          <prop key="hibernate.jdbc.batch_size">20</prop>
            
          </props>
           
          </property>
          </bean>

          <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
             
          <property name="sessionFactory">
                 
          <ref local="sessionFactory" />
             
          </property>
          </bean>


          <!---------------使用JNDI數據源----------------
          bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
          <property name="jndiName">
            <value>jdbc/cqccms</value>
          </property>
          <property name="jndiEnvironment">
               <props>
                  <prop key="java.naming.factory.initial">
                    weblogic.jndi.WLInitialContextFactory
                  </prop>
                  <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>
                  <prop key="java.naming.security.principal">weblogic</prop>
                  <prop key="java.naming.security.credentials">weblogic</prop>
               </props>   
             </property> 
          </bean>

          <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate" singleton="true"
            lazy-init="default" autowire="default" dependency-check="default">
            <property name="environment">
               <props>
                  <prop key="java.naming.factory.initial">
                    weblogic.jndi.WLInitialContextFactory
                  </prop>
                  <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>
                  <prop key="java.naming.security.principal">weblogic</prop>
                  <prop key="java.naming.security.credentials">weblogic</prop>
               </props>   
             </property>
          </bean>

          <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" singleton="true"
            lazy-init="default" autowire="default" dependency-check="default">
            <property name="jndiTemplate">
             <ref local="jndiTemplate" />
            </property>
            <property name="userTransactionName">
             <value>weblogic/transaction/UserTransaction</value>
            </property>
          </bean>

          --------------------------------->



          <bean id="RecordDao" class="com.derek.business.RecordDao">
            
          <property name="sessionFactory">
              
          <ref local="sessionFactory"/>
            
          </property>
          </bean>

          <bean id="RecordDaoProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            
          <property name="transactionManager">
              
          <ref bean="transactionManager" />
            
          </property>
            
          <property name="target">
              
          <ref local="RecordDao" />
            
          </property>
            
          <property name="transactionAttributes">
              
          <props>
                
          <prop key="insert*">PROPAGATION_REQUIRED</prop>
                
          <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
              
          </props>
            
          </property>
          </bean>

          <bean id="Ilogin" class="com.derek.business.Login">
            
          <property name="sessionFactory">
              
          <ref local="sessionFactory"/>
            
          </property>
          </bean>

          <bean id="loginBOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            
          <property name="transactionManager">
              
          <ref bean="transactionManager" />
            
          </property>
            
          <property name="target">
              
          <ref local="Ilogin" />
            
          </property>
            
          <property name="transactionAttributes">
              
          <props>
                
          <prop key="insert*">PROPAGATION_REQUIRED</prop>
                
          <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
              
          </props>
            
          </property>
          </bean>

          <bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
            
          <property name="login">
              
          <ref bean="loginBOProxy" />
            
          </property>
          </bean>
          </beans>

          LoginInterface
          package com.derek.myinterface;

          public interface LoginInterface {
              
          public boolean check(String name,String pwd);
          }

          Login
          package com.derek.business;

          import com.derek.myinterface.LoginInterface;
          import org.hibernate.SessionFactory;
          import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
          import java.util.List;

          public class Login extends HibernateDaoSupport implements LoginInterface{
              
          private SessionFactory sessionFactory;
              
          private String hsql = "from OvertimePermit where account=? and password=?";
              
          public Login() {}
              
          public boolean check(String name,String pwd){
                  String condition[] 
          = {name, pwd};//查詢條件
                  /**
                   * 借助HibernateTemplate我們可以脫離每次數據操作必須首先
                   * 獲得Session實例 、啟動事務、提交/回滾事務以及煩雜的try/catch/finally的繁瑣操作
                   
          */       
                  List l 
          = this.getHibernateTemplate().find(hsql, condition);
                  
                  
          if (l.size() > 0return true;
                    
          else return false;
              }
          }

          RecordDaoInterface
          package com.derek.myinterface;

          import java.util.List;
          import hbm.OvertimeRecord;

          public interface IRecordDao {
              
          public List findAll(String hsql);
              
          public void insert(OvertimeRecord or);
          }

          RecordDao
          package com.derek.business;

          import com.derek.myinterface.IRecordDao;
          import java.util.List;
          import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
          import org.hibernate.SessionFactory;
          import hbm.OvertimeRecord;

          public class RecordDao extends HibernateDaoSupport implements IRecordDao{
              
          private SessionFactory sessionFactory;
              
          public RecordDao() {
              }

              
          public List findAll(String hsql) {
                 
          return this.getHibernateTemplate().find(hsql);
              }

              
          public void insert(OvertimeRecord or) {
                  
          this.getHibernateTemplate().saveOrUpdate(or);
              }
          }

          LoginAction通過容器注入的Login實例完成業務操作(必須由接口強制類型轉化)
          package com.derek.action;

          import javax.servlet.http.*;
          import com.derek.form.*;
          import org.apache.struts.action.*;
          import org.apache.log4j.Logger;
          import com.derek.myinterface.LoginInterface;

          public class LoginAction extends Action {
              
          private LoginInterface login;
              
          public ActionForward execute(ActionMapping actionMapping,
                                           ActionForm actionForm,
                                           HttpServletRequest servletRequest,
                                           HttpServletResponse servletResponse) {
                  Logger log 
          = Logger.getLogger(this.getClass().getName());
                  LoginActionForm loginActionForm 
          = (LoginActionForm) actionForm;
                  String name 
          = loginActionForm.getName();
                  String pwd 
          = loginActionForm.getPwd();
                  
          boolean TF = login.check(name,pwd);
                  
          if(TF){ log.warn("LoginSuccess------------");;return actionMapping.findForward("success");}
                    
          else{ log.warn("LoginFailure------------");;return actionMapping.findForward("failure");}
              }
              
          public void setLogin(LoginInterface Ilogin) {this.login = Ilogin;}
              
          public LoginInterface getLogin() {return login;}
          }

          類中直接通過Context獲得bean實例(必須通過代理類獲得實例且由其接口強制類型轉化)

          package com.derek.pub;

          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.FileSystemXmlApplicationContext;
          import com.derek.myinterface.IRecordDao;
          import java.util.List;
          import hbm.OvertimeRecord;

          public class Untitled1 {
              
          public Untitled1() {
              ApplicationContext ctx 
          = new FileSystemXmlApplicationContext("applicationContext.xml");
              IRecordDao recordDao 
          = (IRecordDao)ctx.getBean("RecordDaoProxy");
              OvertimeRecord newor 
          = new OvertimeRecord("004104","dada","100120","it","2006/04/02","2006/04/02","001145","david","001145","david","00","00","1","1","1","1");
              newor.setMark(
          "0");
              recordDao.insert(newor);
              List l 
          = recordDao.findAll("from OvertimeRecord");
              
          for(int i=0;i<l.size();i++){
              OvertimeRecord or 
          = (OvertimeRecord)l.get(i);
              System.out.println(or.getId());
              }
              }
              
          public static void main(String[] a){
              Untitled1 u 
          = new Untitled1();
              }
          }

                一個Spring application context的定義能夠被很多種不同的上下文實現所讀取, 比如FileSystemXmlApplicationContextClassPathXmlApplicationContext以及XmlWebApplicationContext。 默認的情況下,一個web應用程序會從”WEB-INF/applicationContext.xml”中得到root context。 在所有的Spring應用中,XML文件中定義的application context會把所有相關的application beans連接起來, 包括Hibernate session factory以及數據訪問和業務對象(就像上面定義的那些bean)。 它們中的大部分都不會意識到被Spring容器所管理,甚至在同其他bean合作的時候, 因為它們僅僅遵循JavaBeans的規范。一個bean屬性及可以表示值參數,也可以是其他的合作bean。 下面的bean定義能夠作為Spring web MVC context的一部分,在最基礎的 application context中訪問business beans。

          ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);
          ProductService productService 
          = (ProductService) context.getBean("myProductService");
          ApplicationContext context 
          =
              
          new FileSystemXmlApplicationContext("C:/myContext.xml");
          ProductService productService 
          =
              (ProductService) context.getBean(
          "myProductService");
          ApplicationContext context 
          =
              
          new ClassPathXmlApplicationContext("myContext.xml");
          ProductService productService 
          =
              (ProductService) context.getBean(
          "myProductService");

          Feedback

          # re: Spring+Hibernate+Struts  回復  更多評論   

          2006-07-24 21:56 by han
          你好!
          我在調試過程中遇到下面的問題,請指教

          # re: Spring+Hibernate+Struts  回復  更多評論   

          2006-07-24 21:57 by han
          org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/appcontext.xml]: Initialization of bean failed; nested exception is net.sf.hibernate.MappingException: org.dom4j.DocumentException: null Nested exception: null
          org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:403)
          org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
          org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)
          org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)
          org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)
          org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
          org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:252)
          org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:190)
          org.springframework.web.context.ContextLoaderServlet.init(ContextLoaderServlet.java:83)
          javax.servlet.GenericServlet.init(GenericServlet.java:211)
          org.apache.catalina.startup.Catalina.start(Catalina.java:556)
          sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          java.lang.reflect.Method.invoke(Method.java:324)
          org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
          org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)

          # re: Spring+Hibernate+Struts  回復  更多評論   

          2006-07-24 22:01 by han
          web.xml


          <?xml version="1.0" encoding="UTF-8"?>
          <web-app xmlns="http://java.sun.com/xml/ns/j2ee"">http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
          <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/appcontext.xml</param-value>
          </context-param>
          <context-param>
          <param-name>log4jConfigLocation</param-name>
          <param-value>/WEB-INF/log4j.properties</param-value>
          </context-param>

          <servlet>
          <servlet-name>SpringContextServlet</servlet-name>
          <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
          <load-on-startup>1</load-on-startup>
          </servlet>
          <servlet>
          <servlet-name>action</servlet-name>
          <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
          <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
          </init-param>
          <init-param>
          <param-name>debug</param-name>
          <param-value>3</param-value>
          </init-param>
          <init-param>
          <param-name>detail</param-name>
          <param-value>3</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
          </servlet>
          <servlet-mapping>
          <servlet-name>action</servlet-name>
          <url-pattern>*.do</url-pattern>
          </servlet-mapping>

          </web-app>

          # re: Spring+Hibernate+Struts  回復  更多評論   

          2006-07-24 22:01 by han

          appcontext.xml


          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
          "http://www.springframework.org/dtd/spring-beans.dtd">
          <beans>
          <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
          <property name="driverClassName">
          <value>com.mysql.jdbc.Driver</value>
          </property>
          <property name="url">
          <value>jdbc:mysql://localhost:3306/test</value>
          </property>
          <property name="username">
          <value>root</value>
          </property>
          <property name="password">
          <value>1</value>
          </property>
          </bean>
          <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
          <property name="dataSource">
          <ref local="dataSource"/>
          </property>
          <property name="mappingResources">
          <list>
          <value>person/Info.hbm.xml</value>

          </list>
          </property>
          <property name="hibernateProperties">
          <props>
          <prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop>
          <prop key="hibernate.show_sql">true</prop>
          </props>
          </property>
          </bean>

          <bean id="myTransactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
          <property name="sessionFactory">
          <ref local="sessionFactory"/>
          </property>
          </bean>
          <bean id="personService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
          <property name="transactionManager">
          <ref local="myTransactionManager"/>
          </property>
          <property name="target">
          <ref local="personServiceImp"/>
          </property>
          <property name="transactionAttributes">
          <props>
          <prop key="get*">PROPAGATION_REQUIRED</prop>
          <prop key="save*">PROPAGATION_REQUIRED</prop>
          <prop key="update">PROPAGATION_REQUIRED</prop>
          <prop key="delete">PROPAGATION_REQUIRED</prop>
          </props>
          </property>
          </bean>



          <bean id="personDao" class="org.springframework.aop.framework.ProxyFactoryBean">
          <property name="proxyInterfaces">
          <value>person.PersonDao</value>
          </property>
          <property name="interceptorNames">
          <list>
          <value>hibernateInterceptor</value>
          <value>personDaoTarget</value>
          </list>
          </property>
          </bean>

          <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
          <property name="sessionFactory">
          <ref bean="sessionFactory"/>
          </property>
          </bean>



          <bean id="personServiceImp" class="person.PersonServiceImp">
          <property name="person">
          <ref local="personDao"/>
          </property>
          </bean>
          <bean id="personDaoTarget" class="person.PersonDaoImp">
          <property name="sessionFactory">
          <ref local="sessionFactory"/>
          </property>
          </bean>

          </beans>
          posted on 2008-03-27 17:39 火焰出林 閱讀(797) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          留言簿(1)

          隨筆分類

          文章分類(25)

          文章檔案(23)

          新聞檔案(8)

          相冊

          最新隨筆

          搜索

          •  

          最新評論

          主站蜘蛛池模板: 鞍山市| 阿克| 搜索| 锡林浩特市| 静安区| 台东市| 淅川县| 呼玛县| 长沙市| 西乡县| 桦南县| 建瓯市| 随州市| 弋阳县| 江北区| 荔波县| 炎陵县| 宜城市| 郎溪县| 丹东市| 泾川县| 建始县| 海城市| 娱乐| 博乐市| 靖西县| 朝阳市| 手机| 冕宁县| 屯留县| 普宁市| 板桥市| 色达县| 永安市| 正安县| 时尚| 交口县| 浦县| 阳西县| 永仁县| 富民县|