乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      spring and hibernate,spring and tapestry整合篇

       duduwolf 2005-08-06

      目前java開源框架真可以說是琳瑯滿目,最近一個多星期一直在接觸spring、hibernatetapestry。將最近一個多星期以來的學(xué)習(xí)匯總一下,以便日后查閱,也方便大家學(xué)習(xí)。

      簡單的介紹到處都是,對于spring、hibernate、tapestry是干什么用的,我就不多介紹了。大致能夠知道springIOC/DI概念(AOP方面我也理解不好,暫時)、hibernate的基本概念,如對象持久,ORM,POJO這些概念,tapestry重在組件。我想懂這些并且做個簡單小例子,理解本文應(yīng)該就沒什么大問題了。

      我的開發(fā)環(huán)境是eclipse3.1+tomcat5.0.18+jdk1.4.2/jdk1.5 +mysql+這些相關(guān)jar

      注:spring1.2+hibernate2.1+tapestry3.0.3

      對于eclipse的操作這里不做詳細(xì)介紹,下面會給出整合代碼。

      建立項目如together,引入需要的包,方便起見就把spring.jar引入,因為它比較全,它沒有包含mock(主要是測試用的)。總之是把這些都導(dǎo)進(jìn)到你的project里來。別import時候找不到就可以了。

      Springhibernate結(jié)合部分:

      數(shù)據(jù)庫準(zhǔn)備工作:如mysql,建庫為learn,建表為customer,包含字段(aidusername,password)分別為int,varchar型。

      相關(guān)代碼(代碼存放位置):

      spring-hibernate.xml(與src保持同級)

      <?xml version="1.0" encoding="UTF-8" ?>

      <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www./dtd/spring-beans.dtd">

      <beans>

          <description>test spring and hibernate</description>

          <!-- datasource -->

          <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/learn</value>

             </property>

             <property name="username">

                 <value>root</value>

             </property>

             <property name="password">

                 <value></value>

             </property>

          </bean>

          <!-- hibernate support -->

          <bean id="sessionFactory"

             class="org.springframework.orm.hibernate.LocalSessionFactoryBean">

             <property name="dataSource">

                 <ref local="datasource" />

             </property>

             <property name="mappingResources">

                 <list>

                    <value>yunguang/learn/springandhibernate/Customer.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>

          <!-- hibernate dao -->

          <bean id="hibernatedao" class="yunguang.spring.dao.TestDao">

             <property name="sessionFactory">

                 <ref local="sessionFactory" />

             </property>

          </bean>

      </beans>

      customer.hbm.xmlyunguang.learn.springandhibernate包下

      <?xml version="1.0"?>

      <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"

      "http://hibernate./hibernate-mapping-2.0.dtd">

      <hibernate-mapping>

          <class name="yunguang.learn.springandhibernate.Customer" table="customer">

             <id name="id" column="aid">

                 <generator class="increment" />

             </id>

             <property name="username" column="username" />

             <property name="password" column="password" />

          </class>

      </hibernate-mapping>

       

      /*

       * Created on 2005-7-6

       *

       * TODO To change the template for this generated file go to

       * Window - Preferences - Java - Code Style - Code Templates

       */

      package yunguang.learn.springandhibernate;

       

      /**

       * @author Administrator

       *

       * TODO To change the template for this generated type comment go to Window -

       * Preferences - Java - Code Style - Code Templates

       */

      public class Customer {

           private int id;

       

           private String username;

       

           private String password;

       

           public int getId() {

                  return id;

           }

       

           public String getPassword() {

                  return password;

           }

       

           public String getUsername() {

                  return username;

           }

       

           public void setId(int id) {

                  this.id = id;

           }

       

           public void setPassword(String password) {

                  this.password = password;

           }

       

           public void setUsername(String username) {

                  this.username = username;

           }

      }

       

       

      單元測試類

      package test.junit;

       

      import junit.framework.TestCase;

      import junit.textui.TestRunner;

       

      import org.springframework.context.ApplicationContext;

      import org.springframework.context.support.FileSystemXmlApplicationContext;

       

      import yunguang.learn.springandhibernate.Customer;

      import yunguang.spring.dao.ITestDao;

       

      public class TestDaoTest extends TestCase {

       

           public void testInsertTest(){

                  ApplicationContext beans = new FileSystemXmlApplicationContext("spring-hibernate.xml");

      //          XmlBeanFactory beans = new XmlBeanFactory(new FileInputStream(

      //                        "spring-hibernate.xml"));

                  ITestDao tests = (ITestDao) beans.getBean("hibernatedao");

                  Customer customer = new Customer();

                  customer.setId(55);

                  customer.setUsername("yunguangtest==================");

                  customer.setPassword("passwordsdlkjfklsd");

                  tests.insertTest(customer);

           }

       

           public static void main(String[] args) {

                  TestRunner.run(TestDaoTest.class);

           }

      }

       

      eclipse中的junite運(yùn)行這一單元測試。即可一路跑綠,查看數(shù)據(jù)庫完成插入操作。

      小結(jié):

      核心為spring-hibernate.xml,利用spring的依賴注入的特性。不用單獨(dú)配置hibernate的配置文件(hibernate.cfg.xmlhibernate.properties)。其他部分見代碼吧!如果單獨(dú)都能各自都能理解,則看上面代碼不會有什么太大障礙。

       

       

      springtapestry結(jié)合部分:

      相關(guān)代碼(代碼存放位置):

      前提當(dāng)然是建立web project,才能使tapestry發(fā)揮其作用,才能完整此例子的練習(xí)。這里我只是在tomcat下建立deploy并且簡單測試了一下:

      Web.xml:(這個文件我想大家都知道放在哪里吧。呵呵)

      <?xml version="1.0" encoding="UTF-8"?>

      <!DOCTYPE web-app

            PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

            "http://java./dtd/web-app_2_3.dtd">

      <!-- generated by Spindle, http://spindle. -->

       

      <web-app>

       

           <display-name>together</display-name>

           <!--        Redirect it to the servlet mapping address /h-->

       

       

       

       

           <!--

                  <filter>

                  <filter-name>redirect</filter-name>

                  <filter-class>org.apache.tapestry.RedirectFilter</filter-class>

                  </filter>

                 

                  <filter-mapping>

                  <filter-name>redirect</filter-name>

                  <url-pattern>/</url-pattern>

                  </filter-mapping>

                  <listener>

                  <listener-class>

                  org.springframework.web.context.ContextLoaderListener

                  </listener-class>

                  </listener>

           -->

       

       

           <context-param>

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

                  <param-value>/WEB-INF/springandtapestry.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>

       

           <servlet>

                  <servlet-name>together</servlet-name>

                  <servlet-class>

                         org.apache.tapestry.ApplicationServlet

                  </servlet-class>

           </servlet>

           <servlet-mapping>

                  <servlet-name>together</servlet-name>

                  <url-pattern>/app</url-pattern>

           </servlet-mapping>

       

           <session-config>

                  <session-timeout>15</session-timeout>

           </session-config>

       

           <welcome-file-list>

                  <welcome-file>Home.html</welcome-file>

           </welcome-file-list>

       

      </web-app>

       

      Springandtapestry.xml(這個和web.xml 放在同個目錄下,即web-inf目錄下)

      <?xml version="1.0" encoding="UTF-8"?>

      <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

      "http://www./dtd/spring-beans.dtd">

      <beans>

           <bean id="aBean" class="yunguang.learn.springandtapestry.Bean"></bean>

      </beans>

       

      Together. application(與project同名的xml文件。這是tapestry的要求)

      <?xml version="1.0" encoding="UTF-8"?>

      <!DOCTYPE application PUBLIC

        "-//Apache Software Foundation//Tapestry Specification 3.0//EN"

        "http://jakarta./tapestry/dtd/Tapestry_3_0.dtd">

      <!-- generated by Spindle, http://spindle. -->

      <application name="together" engine-class="yunguang.learn.springandtapestry.MyEngine">

          <description>

              add a description

          </description>

              <page name="Home" specification-path="Home.page"/>

          </application>

       

      Home.html(在你的tapestry能夠訪問到的默認(rèn)目錄)

      <span jwcid="$Content$">

      <table width="337" border="1">

           <tr align="center">

                  <td><span jwcid="@Insert" value="ognl:aBean.amethod" /></td>

           </tr>

      </table>

      </span>

      Home.page(與home.html同級)

      <?xml version="1.0" encoding="UTF-8"?>

      <!DOCTYPE page-specification PUBLIC

        "-//Apache Software Foundation//Tapestry Specification 3.0//EN"

        "http://jakarta./tapestry/dtd/Tapestry_3_0.dtd">

      <page-specification class="yunguang.learn.springandtapestry.Home">

          <property-specification name="aBean" type="yunguang.learn.springandtapestry.IBean">

              global.appContext.getBean("aBean")

          </property-specification>

      </page-specification>

       

      相關(guān)類文件:

      package yunguang.learn.springandtapestry;

       

      public interface IBean {

           public String getAmethod();

      }

       

      package yunguang.learn.springandtapestry;

       

      public class Bean implements IBean {

       

           public String getAmethod() {

                  // do something;

                  System.out

                                .println("================================================test a amethod=============================================");

                  return "===================test===========================";

           }

      }

       

      package yunguang.learn.springandtapestry;

       

      public class Global {

       

      }

       

       

      package yunguang.learn.springandtapestry;

       

      import java.util.Map;

       

      import org.apache.tapestry.engine.BaseEngine;

      import org.apache.tapestry.request.RequestContext;

      import org.springframework.context.ApplicationContext;

      import org.springframework.web.context.support.WebApplicationContextUtils;

       

      public class MyEngine extends BaseEngine {

           public static final String APPLICATION_CONTEXT_KEY = "appContext";

       

           protected void setupForRequest(RequestContext context) {

                  super.setupForRequest(context);

                  Map global = (Map) getGlobal();

                  ApplicationContext ac = (ApplicationContext) global

                                .get(APPLICATION_CONTEXT_KEY);

                  if (ac == null) {

                         ac = WebApplicationContextUtils.getWebApplicationContext(context

                                       .getServlet().getServletContext());

                         System.out.println("測試" + ac);                 global.put(APPLICATION_CONTEXT_KEY, ac);

                        

                  }

           }

      }

       

      package yunguang.learn.springandtapestry;

       

      import org.apache.tapestry.event.PageEvent;

      import org.apache.tapestry.event.PageRenderListener;

      import org.apache.tapestry.html.BasePage;

      import org.springframework.web.context.WebApplicationContext;

      import org.springframework.web.context.support.WebApplicationContextUtils;

       

      public abstract class Home extends BasePage implements PageRenderListener {

           public abstract IBean getABean();

       

            /** 當(dāng)頁面表現(xiàn)之前,首先運(yùn)行這個方法 */

           public void pageBeginRender(PageEvent event)  {

                  WebApplicationContext appContext = WebApplicationContextUtils

                                .getWebApplicationContext(getRequestCycle().getRequestContext()

                                              .getServlet().getServletContext());

                  IBean bean = (IBean) appContext.getBean("aBean");

                  //bean.getAmethod();

           }

      }

       

      小結(jié):

      核心在于利用engine部分,通過定義mapglobal。然后在home.page中可以進(jìn)行通過global.appContext.getBean("aBean")home.javaabstract屬性進(jìn)行賦值。

      另外:

      <context-param>

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

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

           </context-param>

      這部分是個小小重點!如果把此xml文件改成spring默認(rèn)的xml文件,則不需要此配置參數(shù)過程。

      一個小疑惑是:在home.html"ognl:aBean.Amethod"中的amethod中的a大小寫都可以。我覺得應(yīng)該小寫a是正確的,但是錯誤的寫成大寫A了居然也可以正常顯示。還是看看tapestry源代碼吧。以后再寫了!

       

       

      希望本文對你有所幫助。至于其中原理,我想可以通過breakpoint方式一步一步跟下去就明白了。

      當(dāng)然完成本文例子需要有基本的springhibernate、tapestry知識。而高手們就不要見笑了。就當(dāng)看看笑話吧!

       

      其實距離真正結(jié)合還差一步,因為并沒有通過tapestry作為view,而spring作為主體框架,實現(xiàn)hibernate的對象持久。邏輯清了,下面也就不難了。GOOD LUCK

       

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多