webwork是個優(yōu)秀的開源框架,特別是其攔截器機制,我認為是整個系統(tǒng)最大的亮點,可在其上面做大量文章
          我的開發(fā)環(huán)境為Eclipse3.0.1+lomoz,數(shù)據(jù)庫我用的是MySQL4.0.12,當然,也用到了mysqlcc,服務器我用的是tomcat4.0.3和tomcat4.1
          請先下載webwork.,spring.,hibernate,并把JAR文件放到web-inf的lib目錄里面。同時,請下載http://unc.dl.sourceforge.net/sourceforge/aopalliance/aopalliance.zip ,將aopalliance.jar放到lib目錄里面。
          還有webwork2-spring.jar,以及mysql的驅(qū)動都要下載并放到lib里面,缺一不可
          然后是配置log4j,如果沒有正確配置log,TOMCAT將不能正常發(fā)布你的項目。配置log4j很簡單,
          在web-inf/classes下建立一個log4j.properties的文件,內(nèi)容如下
              log4j.rootLogger=INFO, A1 , R
              log4j.appender.A1=org.apache.log4j.ConsoleAppender
              log4j.appender.A1.layout=org.apache.log4j.PatternLayout
              log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
              log4j.appender.R=org.apache.log4j.RollingFileAppender
              log4j.appender.R.File=d:/Tomcat 4.1/webapps/demo/logs/log4j.log
              log4j.appender.R.MaxFileSize=100KB
              log4j.appender.R.MaxBackupIndex=1
              log4j.appender.R.layout=org.apache.log4j.PatternLayout
              log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
          其中l(wèi)og4j.appender.R.File這一項請按照你TOMCAT的安裝位置進行修改,關(guān)于log4j的詳細內(nèi)容,推薦大家看Hilton的學習筆記以及IBM網(wǎng)站上的相關(guān)文章.
           好了,開始我們的webwork之旅了。首先是配置web.xml文件
          <?xml version="1.0" ?>
          <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

          <!-- Copyright (c) 2002 by ObjectLearn. All Rights Reserved. -->
          <web-app>
                 <listener>
                        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
                 </listener>
                 <listener>
                        <listener-class>com.atlassian.xwork.ext.ResolverSetupServletContextListener</listener-class>
                 </listener>
              <servlet>
                  <servlet-name>webwork</servlet-name>
                  <servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class>
              </servlet>
              <servlet-mapping>
                  <servlet-name>webwork</servlet-name>
                  <url-pattern>*.action</url-pattern>
              </servlet-mapping>

               <taglib>
                  <taglib-uri>webwork</taglib-uri>
                  <taglib-location>/WEB-INF/webwork.tld</taglib-location>
              </taglib>

          </web-app>

          我們配置了兩個監(jiān)聽器,還有一個servlet,這個servlet負責action的轉(zhuǎn)發(fā)工作,關(guān)于action的詳細工作原理,大家可以參看xwork的源代碼
          在接下來配置之前,我想大概說一下我想實現(xiàn)的功能,就是簡單的往mysql的一個表中插入一些數(shù)據(jù)
          首先我用Middlegen-Hibernate和hibernate-extensions(我沒用eclipse的hibernate插件,我喜歡用這兩樣工具來生成)生成了表對應的hbm.xml文件和兩個JAVA類,表的字段是"tablename,fieldname,chinesename", 表名是
          "systable",其中tablename,fieldname做雙主鍵,這樣,生成出來的類應該是兩個,一個PK主鍵類和主類本身,我把他們加入到了我的項目中.
          然后我做了一個接口類
           package com.cz.struct;

           /**
            * @author tijichen
            *
            * TODO To change the template for this generated type comment go to
            * Window - Preferences - Java - Code Style - Code Templates
            */
           public interface SystableDAO {
            public abstract void insert(Systable data);
           }
          然后是實現(xiàn)類
           package com.cz.struct;
           import net.sf.*;
           import org.springframework.orm.hibernate.support.HibernateDaoSupport;
           /**
            * @author tijichen
            *
            * TODO To change the template for this generated type comment go to
            * Window - Preferences - Java - Code Style - Code Templates
            */
           public class SysTableDAOImp extends HibernateDaoSupport implements
           SystableDAO{
            public void insert(Systable data)
            {
             this.getHibernateTemplate().save(data);
            }
           }
          為什么要用接口類?因為spring會用到JAVA的動態(tài)代理,關(guān)于這部分,大家可以看xiaxin的spring指南
          在insert 方法中,我直接調(diào)用了spring提供的hibernate模板方法,真是方便呀

          然后是 spring的配置了,請在web-lib/下建立applicationContext.xml文件,內(nèi)容如下
          <?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.springframework.jdbc.datasource.DriverManagerDataSource"
             destroy-method="close">
             <property name="driverClassName">
              <value>org.gjt.mm.mysql.Driver</value>
             </property>
             <property name="url">
              <value>jdbc:mysql://localhost/mystructs</value>
             </property>
             <property name="username">
              <value>chenzhi</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>com\cz\struct\SysTable.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="transactionManager"
             class="org.springframework.orm.hibernate.HibernateTransactionManager">
             <property name="sessionFactory">
              <ref local="sessionFactory" />
             </property>
            </bean>
            <bean id="systableDAO" class="com.cz.struct.SysTableDAOImp">
             <property name="sessionFactory">
              <ref local="sessionFactory" />
             </property>
            </bean>
            <bean id="systableDAOProxy"
             class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
             <property name="transactionManager">
              <ref bean="transactionManager" />
             </property>
             <property name="target">
              <ref local="systableDAO" />
             </property>
             <property name="transactionAttributes">
              <props>
                <prop key="insert*">PROPAGATION_REQUIRED</prop>
                <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
              </props>
             </property>
            </bean>
          </beans>

          在這個配置文件里面,我們設(shè)置了datasource\sessionfactory以及spring的動態(tài)代理,還有hibernate所需要的XML映射文件路徑
          然后是配置xwork.xml
          <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd">
          <xwork>
           <include file="webwork-default.xml" />
            <package name="default" extends="webwork-default"
             externalReferenceResolver="com.atlassian.xwork.ext.SpringServletContextReferenceResolver">
            <interceptors>
            <interceptor name="reference-resolver"
            class="com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor" />
            <interceptor-stack name="vxStack">
            <interceptor-ref name="params" />
            <interceptor-ref name="model-driven" />
            <interceptor-ref name="reference-resolver" />
            </interceptor-stack>
            </interceptors>
          <action name="Test" class="com.cz.struct.TestAction">
           <external-ref name="systableDAO">systableDAOProxy</external-ref>
           <result name="success" type="dispatcher">
           <param name="location">/index.jsp</param>
           </result>

           <interceptor-ref name="vxStack" />
          </action>
          </package>
          </xwork>

          在配置action的external-ref的時候我遇到了一個不大不小的玩笑,一般編輯XML的時候我都是在editplus里面編輯的
          ,最開始我寫成
          <external-ref name="systableDAO">
           systableDAOProxy
          </external-ref>
          結(jié)果系統(tǒng)提示找不到叫systableDAOProxy這個名字的bean,結(jié)果一查,發(fā)現(xiàn)旁邊不能加上空格和tab,哎。。肯定是返回串的時候沒加trim
          的后果
          好了,最后是我們的TestAction.java
          package com.cz.struct;
          import com.opensymphony.xwork.*;
          import com.opensymphony.webwork.*;
          import java.util.*;
          /**
           * @author tijichen
           *
           * TODO To change the template for this generated type comment go to
           * Window - Preferences - Java - Code Style - Code Templates
           */
          public class TestAction extends ActionSupport
          {
           private SystableDAO systabledao;
           
           String testname=null;
           public void setSystableDAO(SystableDAO dao)
           {
            this.systabledao=dao;
           }
           public SystableDAO getSystableDAO()
           {return this.systabledao;}
              public String execute() throws Exception {
               testname="executeing";
               SystablePK pk=new SystablePK();
               Systable newdata=new Systable();
               pk.setFieldName("test");
               pk.setTableName("test3");
               newdata.setComp_id(pk);
               newdata.setChineseName("tets");

               systabledao.insert(newdata);
                  return Action.SUCCESS;
              }
           
          }
          ok,編譯打包,然后在瀏覽器地址欄中輸入http://localhost:8080/你的發(fā)布目錄/Test.action
          看看,是不是數(shù)據(jù)庫里面多出了一條數(shù)據(jù)了?
          至于其他,比如從頁面提交的值插入數(shù)據(jù)庫等等,這里都不多說了,webwork自帶的sample就是最好的參考資料


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


          網(wǎng)站導航:
           

          posts - 10, comments - 9, trackbacks - 0, articles - 0

          Copyright © 我的JAVA

          主站蜘蛛池模板: 塔城市| 合阳县| 呼图壁县| 玉环县| 武义县| 吴旗县| 钟祥市| 澄城县| 平湖市| 西昌市| 东平县| 南充市| 黎平县| 甘泉县| 横山县| 梓潼县| 洛川县| 桃江县| 武邑县| 满城县| 且末县| 秦皇岛市| 尖扎县| 拜城县| 遂宁市| 晋江市| 贞丰县| 永定县| 平利县| 玉山县| 黄龙县| 阳谷县| 务川| 安阳市| 天水市| 虞城县| 德令哈市| 大足县| 水富县| 礼泉县| 额济纳旗|