Spring_1.2.7 、 webwork_2.2.2及hibernate3的集成

来源:互联网 发布:简单编程 编辑:程序博客网 时间:2024/05/22 16:53

Spring_1.2.7 webwork_2.2.2hibernate3的集成

1.  webwork官网下载webwork-2.2.2.zipspring_1.2.7.ziphibernate3相关类包,获取webwork-2.2.2.jar以及lib/default 目录下的核心必须类包,同时获得spring1.2.7.jar以及hibernate3hibernate3.jarjta.jarehcache-1.1.jar等包,在构建web工程时需要放到工程类库目录中;

2.  编辑webwork_2.2.7web工程中的配置文件,包括xwork.xmlwebwork-default.xmlwebwork.tldwebwork.propertiesweb.xml以及专门为注册事务编写的action配置文件login.xml,另外还要编辑spring的相关配置文件applicationContext.xml以及hibernate的配置,该配置没有单独作为配置文件,而是在applicationContext.xml文件中配置sessionFactory的时候在其<property name="hibernateProperties">属性配置,具体内容请见配置文件, User实体bean的对象关系映射文件User.hbm.xml,其目录结构如下图:

http://p.blog.csdn.net/images/p_blog_csdn_net/xzjguest/EntryImages/20080718/clip_image002.jpg

1 目录结构

 

3. web.xml配置文件说明与举例,web.xml配置文件在WEB-INF目录下,是所有web工程都必须的配置文件,使用webwork框架,需要在改配置文件里面注册webwork框架插件来处理web请求,举例如下:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

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

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

<web-app>

    <display-name>Test v2.0</display-name>

    <context-param>

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

       <param-value>

           /WEB-INF/classes/spring/applicationContext.xml

       </param-value>

    </context-param>

    <filter>

       <filter-name>Encoding</filter-name>

       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

       <init-param>

           <param-name>encoding</param-name>

           <param-value>GBK</param-value>

       </init-param>

    </filter>

 

    <!-- spring -->

    <listener>

       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

    <!-- This needs to be after Spring ContextLoaderListener -->

    <listener>

        <listener-class>com.opensymphony.webwork.spring.lifecycle.SpringExternalReferenceResolverSetupListener</listener-class>

    </listener>

    <!-- spring -->

    <listener>

        <listener-class>com.opensymphony.webwork.spring.WebWorkSpringObjectFactory</listener-class>

    </listener>

   

    <!-- WebWork -->

    <servlet>

       <servlet-name>webwork</servlet-name>

       <servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class>

    </servlet>

 

    <!-- WebWork -->

    <servlet-mapping>

       <servlet-name>webwork</servlet-name>

       <url-pattern>*.action</url-pattern>

    </servlet-mapping>

 

    <welcome-file-list>

       <welcome-file>register.jsp</welcome-file>

    </welcome-file-list>

 

    <taglib>

       <taglib-uri>webwork</taglib-uri>

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

    </taglib>

</web-app> 

4. xwrok.xml配置说明与举例,该文件在类的根目录下,web工程中应放在src目录下,工程编译后就会导入class目录下,即类根目录.其作用:webwork插件,在此也可以称做web请求处理分派器,分派器会根据该配置文件将web请求交给相应的Action处理,举例如下:

<!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">

<interceptors>

<interceptor name="externalReferences" class="com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor" />

<interceptor name="catchException" class="com.jetsum.cantus.core.exception.CatchExceptionInterceptor" />

           <interceptor-stack name="standard-interceptors">

              <interceptor-ref name="externalReferences" />

              <interceptor-ref name="prepare" />

              <interceptor-ref name="static-params" />

              <interceptor-ref name="params" />

              <interceptor-ref name="conversionError" />

           </interceptor-stack>

           <interceptor-stack name="stand-upload-interceptors">

              <interceptor-ref name="externalReferences" />

              <interceptor-ref name="prepare" />

              <interceptor-ref name="fileUpload" />

              <interceptor-ref name="static-params" />

              <interceptor-ref name="params" />

              <interceptor-ref name="conversionError" />

           </interceptor-stack>

       </interceptors>

       <default-interceptor-ref name="standard-interceptors" />

    </package>

    <include file="login.xml" />

</xwork> 

 

5. login.xml 配置文件说明与举例,专门用来配置LoginAction,该配置文件会被包含入xwork.xml配置文件,这样才能生效,举例如下:

<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd">

<xwork>

    <package name="logins" extends="default" externalReferenceResolver="com.opensymphony.xwork.spring.SpringExternalReferenceResolver">

 

       <!-- 门诊挂号  -->

       <action name="login" class="com.jetsum.test.action.LoginAction">

       <external-ref name="userService" required="true">UserService</external-ref>

           <result name="error" type="dispatcher">

              <param name="location">register.jsp</param>

           </result>

           <result name="login" type="dispatcher">

              <param name="location">register.jsp</param>

           </result>

           <result name="waibu" type="dispatcher">

              <param name="location">register.jsp</param>

           </result>

       </action>

    </package>

</xwork>

注意:externalReferenceResolver="com.opensymphony.xwork.spring.SpringExternalReferenceResolver" 告知spring框架在需要时配置action内实体之间的映射关系,例如:<external-ref name="userService" required="true">UserService</external-ref>就会引用spring配置的userService对象

 

 

6. webwork.properties配置说明与举例 ,此配置文件主要向webwork框架提供一些参数,如编码等,更多信息要查找相关文档,举例如下:

webwork.locale=zh_CN

webwork.i18n.encoding=GBK

 

7. applicationContext.xml 配置文件说明与举例,专门用来配置bean之间的依赖关系,在需要的时候进行动态的依赖注射,举例如下:

<?xml version="1.0" encoding="GBK"?>

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

<beans>

    <!-- Hibernate SessionFactory -->

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

       <property name="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver"></property>

       <property name="url" value="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=xzj"></property>

       <property name="username" value="sa"></property>

       <property name="password" value="sa"></property>

       <property name="maxActive" value="200"></property>

       <property name="maxIdle" value="50"></property>

       <property name="maxWait" value="60000"></property>

       <property name="removeAbandoned" value="true"></property>

       <property name="removeAbandonedTimeout" value="30"></property>

    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

       <property name="dataSource">

           <ref bean="dataSource" />

       </property>

       <property name="mappingResources">

           <list>

              <value>com/jetsum/test/entity/User.hbm.xml</value>

           </list>

       </property>

       <property name="hibernateProperties">

           <props>

              <prop key="hibernate.show_sql">true</prop>

              <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>

           </props>

       </property>

    </bean>

    <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

       <property name="sessionFactory">

           <ref local="sessionFactory" />

       </property>

    </bean>

    <bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

       <property name="transactionManager">

           <ref bean="transactionManager" />

       </property>

       <property name="transactionAttributes">

           <props>

              <prop key="get*">PROPAGATION_SUPPORTS,readOnly</prop>

              <prop key="*">PROPAGATION_REQUIRED</prop>

           </props>

       </property>

    </bean>

    <!--   用户DAO配置     -->

    <bean id="UserDao" class="com.jetsum.test.dao.impl.UserDao">

       <property name="sessionFactory">

           <ref local="sessionFactory" />

       </property>

    </bean>

    <!-- 用户注册逻辑 -->

    <bean id="UserService" parent="txProxyTemplate">

       <property name="target">

           <bean class="com.jetsum.test.service.impl.UserService">

              <property name="dao">

                  <ref bean="UserDao" />

              </property>

           </bean>

       </property>

    </bean>

</beans>

 

 

8. User.hbm.xml 配置文件说明实体bean User.java与数据库中表user的对象关系映射,举例如下:

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

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

  <class    name="com.jetsum.test.entity.User"     table="users">

   <id   name="id" type="java.lang.Integer"   unsaved-value="null">

   <column name="id"  sql-type="int"/>

            <generator class="native">

            </generator>

        </id>

        <property

            name="name"

            type="java.lang.String"

            update="true"

            insert="true"

            column="name"

            length="100"

        />

        <property

            name="password"

            type="java.lang.String"

            update="true"

            insert="true"

            column="password"

        />

    </class>

</hibernate-mapping>

 

9. webwork-default.xml 配置文件说明举例如下:

<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd">

<xwork>

    <package name="webwork-default">

        <result-types>

            <result-type name="dispatcher" class="com.opensymphony.webwork.dispatcher.ServletDispatcherResult" default="true"/>

            <result-type name="redirect" class="com.opensymphony.webwork.dispatcher.ServletRedirectResult"/>

            <result-type name="velocity" class="com.opensymphony.webwork.dispatcher.VelocityResult"/>

            <result-type name="chain" class="com.opensymphony.xwork.ActionChainResult"/>

            <result-type name="xslt" class="com.opensymphony.webwork.views.xslt.XSLTResult"/>

            <result-type name="jasper" class="com.opensymphony.webwork.views.jasperreports.JasperReportsResult"/>

            <result-type name="freemarker" class="com.opensymphony.webwork.views.freemarker.FreemarkerResult"/>

            <result-type name="httpheader" class="com.opensymphony.webwork.dispatcher.HttpHeaderResult"/>

            <result-type name="stream" class="com.opensymphony.webwork.dispatcher.StreamResult"/>

        </result-types>

        <interceptors>

            <interceptor name="timer" class="com.opensymphony.xwork.interceptor.TimerInterceptor"/>

            <interceptor name="logger" class="com.opensymphony.xwork.interceptor.LoggingInterceptor"/>

            <interceptor name="chain" class="com.opensymphony.xwork.interceptor.ChainingInterceptor"/>

            <interceptor name="static-params" class="com.opensymphony.xwork.interceptor.StaticParametersInterceptor"/>

            <interceptor name="params" class="com.opensymphony.xwork.interceptor.ParametersInterceptor"/>

            <interceptor name="model-driven" class="com.opensymphony.xwork.interceptor.ModelDrivenInterceptor"/>

            <interceptor name="component" class="com.opensymphony.xwork.interceptor.component.ComponentInterceptor"/>

            <interceptor name="token" class="com.opensymphony.webwork.interceptor.TokenInterceptor"/>

            <interceptor name="token-session" class="com.opensymphony.webwork.interceptor.TokenSessionStoreInterceptor"/>

            <interceptor name="validation" class="com.opensymphony.xwork.validator.ValidationInterceptor"/>

            <interceptor name="workflow" class="com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor"/>

            <interceptor name="servlet-config" class="com.opensymphony.webwork.interceptor.ServletConfigInterceptor"/>

            <interceptor name="prepare" class="com.opensymphony.xwork.interceptor.PrepareInterceptor"/>

            <interceptor name="conversionError" class="com.opensymphony.webwork.interceptor.WebWorkConversionErrorInterceptor"/>

            <interceptor name="fileUpload" class="com.opensymphony.webwork.interceptor.FileUploadInterceptor"/>

            <interceptor name="execAndWait" class="com.opensymphony.webwork.interceptor.ExecuteAndWaitInterceptor"/>

            <!-- Basic stack -->

            <interceptor-stack name="defaultStack">

                <interceptor-ref name="servlet-config"/>

                <interceptor-ref name="prepare"/>

                <interceptor-ref name="static-params"/>

                <interceptor-ref name="params"/>

                <interceptor-ref name="conversionError"/>

            </interceptor-stack>

            <!-- Sample validation and workflow stack -->

            <interceptor-stack name="validationWorkflowStack">

                <interceptor-ref name="defaultStack"/>

                <interceptor-ref name="validation"/>

                <interceptor-ref name="workflow"/>

            </interceptor-stack>

            <!-- Sample file upload stack -->

            <interceptor-stack name="fileUploadStack">

                <interceptor-ref name="fileUpload"/>

                <interceptor-ref name="defaultStack"/>

            </interceptor-stack>

 

            <!-- Sample Inversion of Control stack -->

            <interceptor-stack name="componentStack">

                <interceptor-ref name="component"/>

                <interceptor-ref name="defaultStack"/>

            </interceptor-stack>

            <!-- Sample model-driven stack  -->

            <interceptor-stack name="modelDrivenStack">

                <interceptor-ref name="model-driven"/>

                <interceptor-ref name="defaultStack"/>

            </interceptor-stack>

            <!-- Sample action chaining stack -->

            <interceptor-stack name="chainStack">

                <interceptor-ref name="chain"/>

                <interceptor-ref name="defaultStack"/>

            </interceptor-stack>

            <!-- Sample execute and wait stack.

                 Note: execAndWait should always be the *last* interceptor. -->

            <interceptor-stack name="executeAndWaitStack">

                <interceptor-ref name="defaultStack"/>

                <interceptor-ref name="execAndWait"/>

            </interceptor-stack>

            <interceptor-stack name="completeStack">

                <interceptor-ref name="prepare"/>

                <interceptor-ref name="servlet-config"/>

                <interceptor-ref name="chain"/>

                <interceptor-ref name="model-driven"/>

                <interceptor-ref name="component"/>

                <interceptor-ref name="fileUpload"/>

                <interceptor-ref name="static-params"/>

                <interceptor-ref name="params"/>

                <interceptor-ref name="conversionError"/>

                <interceptor-ref name="validation"/>

                <interceptor-ref name="workflow"/>

            </interceptor-stack>

        </interceptors>

    </package>

</xwork>

 

10. log4j.properties 配置文件说明举例如下:

 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.rootLogger=warn, stdout

log4j.logger.org.hibernate=info

log4j.logger.org.hibernate.type=info

log4j.logger.org.hibernate.tool.hbm2ddl=debug

 

 

11.Action类举例

RegisterAction类 源码如下:

package com.jetsum.test.action;

 

import com.jetsum.test.entity.User;

import com.jetsum.test.service.IUserService;

import com.opensymphony.xwork.ActionSupport;

 

public class RegisterAction extends ActionSupport {

   

    private IUserService userService;

 

    private User user = new User();

   

 

    private String statu;

 

    public String getStatu() {

        return statu;

    }

 

    public void setStatu(String statu) {

        this.statu = statu;

    }

 

    public String login() {

        System.out.println("my name is " + user.getName());

        System.out.println("my password is " + user.getPassword());

        userService.saveUser(user);

        this.statu = "y";

        return "error";

    }

 

    public IUserService getUserService() {

        return userService;

    }

 

    public void setUserService(IUserService userService) {

        this.userService = userService;

    }

 

    public User getUser() {

        return user;

    }

 

    public void setUser(User user) {

        this.user = user;

    }

}

 

User 类源码如下:

package com.jetsum.test.entity;

 

public class User {

    private int id;

 

    private String name;

 

    private String password;

 

    public int getId() {

       return id;

    }

 

    public void setId(int id) {

       this.id = id;

    }

 

    public String getName() {

       return name;

    }

 

    public void setName(String name) {

       this.name = name;

    }

 

    public String getPassword() {

       return password;

    }

 

    public void setPassword(String password) {

       this.password = password;

    }

   

}

 

12.UserService.java举例

package com.jetsum.test.service.impl;

 

import java.util.List;

 

import com.jetsum.test.dao.IUserDao;

import com.jetsum.test.entity.User;

import com.jetsum.test.service.IUserService;

 

public class UserService implements IUserService{

   

    private IUserDao dao;

   

    public Object saveUser(Object User) {

       return dao.saveUser(User);

    }

 

    public void delUser(Object User) {

    }

 

    public User findById(Integer id) {

       return null;

    }

 

    public List getYuYue() {

       return null;

    }

 

    public Object saveList(List list) {

       return null;

    }

 

    public List getAll() {

       return null;

    }

 

    public IUserDao getDao() {

       return dao;

    }

 

    public void setDao(IUserDao dao) {

       this.dao = dao;

    }

 

}

 

 

 

13.AbstractDao.java举例

package com.jetsum.test.dao.impl;

 

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

 

public abstract class AbstractDao extends HibernateDaoSupport {

 

    public AbstractDao() {

        super();

    }

 

    public Object save(Object type) {

        getHibernateTemplate().save(type);

        return type;

    }

 

   

    public void delete(Object type) {

       if(type!=null)

           getHibernateTemplate().delete(type);

    }

 

}

 

14.UserDao.java举例

package com.jetsum.test.dao.impl;

 

import java.util.List;

 

import com.jetsum.test.dao.IUserDao;

import com.jetsum.test.entity.User;

 

public class UserDao extends AbstractDao implements IUserDao {

 

    public Object saveUser(Object user) {

       return this.save(user);

    }

 

    public void delBook(Object Book) {

      

    }

 

    public User findById(Integer id) {

       return null;

    }

 

    public List getAll() {

       return null;

    }

}

 

15. register.jsp举例

<%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="gb2312"%>

<%@taglib prefix="ww" uri="webwork"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title></title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>

 

<body>

    <form name="form1" method="post" action="login!login.action">

       <input type="text" name="user.name" id="name"  size="19"/><br><br>

          <input name="user.password" id="password" type="password" /><br><br>

       <input type="submit" class="btn" value="注册"/>

    </form>

</body>

</html>

注意:action="login!login.action"属性,!前面的login表示action名,后面的login表示action需要执行的方法,默认方法为execute方法

 

 

 

原创粉丝点击