读书人

Struts2+spring2+hibernate3调整方案(

发布时间: 2012-10-27 10:42:26 作者: rapoo

Struts2+spring2+hibernate3整合方案(1)

最近闲来无事可做,于是开始学习struts2。Struts2和struts1、webwork2有什么区别我也不说了,网上有很多这方面的资料。以前在项目中从未使用过struts,一直使用spring+hibernate,现在既然学习了Struts,也不能浪费,于是乎开始琢磨着怎么整合这3个框架。整合原理以spring为容器,管理hibernate的DAO和Struts2的Action。
一、?准备工作
Struts2.06+spring2.5+hibernate3.2+jdk6.0+myeclipse6.0+tomcat5.5+mysql5.0
以上是整合的原料。下面以一个注册登陆的例子来开始我们的整合过程。
这个例子很简单,下面是它的sql脚本内容:
CREATE TABLE `user` (
? `userid` int(11) NOT NULL AUTO_INCREMENT,
? `username` varchar(20) NOT NULL,
? `password` varchar(16) NOT NULL,
? `email` varchar(30) NOT NULL,
? PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf-8;
二、?开始行动
包结构可以参考下图

Struts2+spring2+hibernate3调整方案(1)

Struts2+spring2+hibernate3调整方案(1)
Struts2+spring2+hibernate3调整方案(1)

1) Struts部分:建立struts.xml和struts.properties
Struts.xml内容如下:

<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" ><struts>    <package name="user_curd" extends="struts-default" >        <global-results>            <!-- 下面定义的结果对所有的Action都有效 -->            <result name="exception">/error.jsp</result>        </global-results>        <global-exception-mappings>            <!-- 指Action抛出Exception异常时,转入名为exception的结果。 -->            <exception-mapping exception="java.lang.Exception" result="exception"/>        </global-exception-mappings>        <action name="Login" class="LoginAction">            <result name="success">/success.jsp</result><result name="input">/login.jsp</result>        </action>        <action name="Regist" class="RegistAction">            <result name="success">/success.jsp</result><result name="input">/regist.jsp</result>        </action>    </package></struts>


Struts.properties内容如下:

struts.devMode=false
struts.enable.DynamicMethodInvocation=true
struts.i18n.reload=true
struts.ui.theme=simple

struts.locale=zh_CN
struts.i18n.encoding=UTF-8
struts.objectFactory=spring
struts.objectFactory.spring.autoWire=name

struts.serve.static.browserCache=false
struts.url.includeParams=none

2) 建立User.java和User.hbm.xml、jdbc.properties:
User.java内容如下:

<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/** *//**** @author <a href="mailto:flustar2008@163.com">flustar</a>* @version 1.0* Creation date: Dec 23, 2007 1:55:28 PM*/package com.firstssh.model;import java.io.Serializable;public class User implements Serializable {private int id;private String username;private String password;private String email;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}}


User.hbm.xml内容?

<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mappingpackage="com.firstssh.model">    <class name="User" table="User">        <id name="id" column="userid">            <generator class="identity" />        </id><property name="username"                  column="username"                  not-null="true"                  length="20"        />        <property name="password"                  column="password"                  not-null="true"                  length="16" />        <property name="email"                  column="email"                  not-null="true"                  length="30"/>    </class></hibernate-mapping>


jdbc.properties内容如下:

datasource.type=mysql
datasource.driverClassName=com.mysql.jdbc.Driver
datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8

datasource.username=root
datasource.password=123456

datasource.maxActive=10
datasource.maxIdle=2
datasource.maxWait=120000
datasource.whenExhaustedAction=1
datasource.validationQuery=select 1 from dual
datasource.testOnBorrow=true
datasource.testOnReturn=false

c3p0.acquireIncrement=3
c3p0.initialPoolSize=3
c3p0.idleConnectionTestPeriod=900
c3p0.minPoolSize=2
c3p0.maxPoolSize=50
c3p0.maxStatements=100
c3p0.numHelperThreads=10
c3p0.maxIdleTime=600

hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
#hibernate.dialect=org.hibernate.dialect.MySQLMyISAMDialect

hibernate.jdbc.batch_size=25
hibernate.jdbc.fetch_size=50
hibernate.show_sql=true
hibernate.connection.release_mode=after_transaction

3) Spirng部分:为了清晰把Spring的配置文件拆分成以下几部分applicationContext-dao.xml、appliationContext-service.xml、applicationContext-hibernate.xml、action-servlet.xml。
applicationContext-hibernate.xml内容:

<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"><beans><bean id="propertyConfigurer"    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">    <property name="locations">        <list>            <!--  <value>WEB-INF/mail.properties</value>-->            <value>WEB-INF/jdbc.properties</value>            <!--  <value>WEB-INF/oscache.properties</value>-->        </list>    </property></bean><!-- MailSender used by EmailAdvice --><!--    <bean id="mailSender" value="${mail.host}"/></bean>--><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"    destroy-method="close" dependency-check="none">    <property name="driverClass">        <value>${datasource.driverClassName}</value>    </property>    <property name="jdbcUrl">        <value>${datasource.url}</value>    </property>    <property name="user">        <value>${datasource.username}</value>    </property>    <property name="password">        <value>${datasource.password}</value>    </property>    <property name="acquireIncrement">        <value>${c3p0.acquireIncrement}</value>    </property>    <property name="initialPoolSize">        <value>${c3p0.initialPoolSize}</value>    </property>    <property name="minPoolSize">        <value>${c3p0.minPoolSize}</value>    </property>    <property name="maxPoolSize">        <value>${c3p0.maxPoolSize}</value>    </property>    <property name="maxIdleTime">        <value>${c3p0.maxIdleTime}</value>    </property>    <property name="idleConnectionTestPeriod">        <value>${c3p0.idleConnectionTestPeriod}</value>    </property>    <property name="maxStatements">        <value>${c3p0.maxStatements}</value>    </property>    <property name="numHelperThreads">        <value>${c3p0.numHelperThreads}</value>    </property></bean><bean id="sessionFactory"    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    <property name="dataSource">        <ref local="dataSource" />    </property>    <property name="mappingResources">        <list>            <value>com/firstssh/model/User.hbm.xml</value>        </list>    </property>    <property name="hibernateProperties">        <props>            <prop key="hibernate.dialect">${hibernate.dialect}</prop>            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>            <prop key="hibernate.jdbc.fetch_size">                ${hibernate.jdbc.fetch_size}</prop>            <prop key="hibernate.jdbc.batch_size">                ${hibernate.jdbc.batch_size}</prop>        </props>    </property></bean><!-- 配置事务管理器bean,使用HibernateTransactionManager事务管理器 --><bean id="transactionManager"    class="org.springframework.orm.hibernate3.HibernateTransactionManager">        <!-- 为事务管理器注入sessionFactory" -->        <property name="sessionFactory" ref="sessionFactory"/></bean><!-- 配置事务拦截器Bean --><bean id="transactionInterceptor"    class="org.springframework.transaction.interceptor.TransactionInterceptor">    <!-- 为事务拦截器bean注入一个事物管理器 -->    <property name="transactionManager" ref="transactionManager"></property>    <property name="transactionAttributes">    <!-- 定义事务传播属性 -->        <props>                <prop key="insert*">PROPAGATION_REQUIRED</prop>                <prop key="update*">PROPAGATION_REQUIRED</prop>                <prop key="save*">PROPAGATION_REQUIRED</prop>                <prop key="add*">PROPAGATION_REQUIRED</prop>                <prop key="update*">PROPAGATION_REQUIRED</prop>                <prop key="remove*">PROPAGATION_REQUIRED</prop>                <prop key="delete*">PROPAGATION_REQUIRED</prop>                <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>                <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>                <prop key="change*">PROPAGATION_REQUIRED</prop>                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>        </props>    </property></bean><!-- 定义BeanNameAutoProxyCreator --><bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">    <!-- 指定满足哪些bean自动生成业务代理 -->    <property name="beanNames">    <!-- 需要自动创建事务代理的bean -->        <list>            <value>userService</value>        </list>        <!-- 其它需要自动创建事务代理的bean -->    </property>    <property name="interceptorNames">        <list>            <value>transactionInterceptor</value>            <!-- 可增加其它的interceptor -->        </list>    </property></bean></beans>

读书人网 >软件架构设计

热点推荐