SSH框架集成步骤
1.集成Struts和spring
1.1 在struts-config.xml中添加以下配置
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<!-- 1,指定配置文件的类路径-->
<set-property property="contextConfigLocation"
value="classpath:applicationContext.xml" />
</plug-in>
1.2 配置spring框架对struts中Action的控制,在struts-config.xml中增加以下配置项
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor">
</controller>
2.集成spring和hibernate
2.1在spring的applicationContext.xml文件中配置dataSource 和sessionFactory节点:
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.microsoft.sqlserver.jdbc.SQLServerDriver">
</property>
<property name="url"
value="jdbc:sqlserver://localhost:1433;databaseName=kehu">
</property>
<property name="username" value="sa"></property>
<property name="password" value="sa"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
</bean>
2.2 修改项目中的dao类,所有dao都继承自HibernateDaoSupport类
代码示例:
public class BaseHibernateDAO extends HibernateDaoSupport{
protected void add(Object item) {
super.getHibernateTemplate().save(item);
}
//…省略部分代码
}
2.3 在spring的applicationContext.xml文件中配置事务管理器
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!-- 指定对应的数据源 -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
2.4在spring的applicationContext.xml文件中配置事务通知
1)需要先修改配置文件的头部信息:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
">
2)配置事务通知节点:
<!-- 利用spring2.0方式配置事务通知器 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 配置事务规则 -->
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>
3)配置事务aop
<!-- 配置事务aop -->
<aop:config>
<!-- 定义一个事务切面 -->
<aop:pointcut id="bizMethods"
expression="execution(* com.aptech.jb.epet.biz.*.*(..) )" />
<!-- 组合事务通知和切面 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods" />
</aop:config>
注意:事务切面节点中的expression属性的表达式介绍
execution(modifiers-pattern?
ret-type-pattern
declaring-type-pattern?
name-pattern(param-pattern)
throws-pattern?)
括号中各个pattern分别表示
修饰符匹配(modifier-pattern?)、
返回值匹配(ret-type-pattern)、
类路径匹配(declaring-type-pattern?)、
方法名匹配(name-pattern)、
参数匹配((param-pattern))、
异常类型匹配(throws-pattern?),
其中后面跟着“?”的是可选项。
在各个pattern中可以使用“*”来表示匹配所有。在(param-pattern)中,
可以指定具体的参数类型,多个参数间用“,”隔开,
各个也可以用“*”来表示匹配任意类型的参数,
如(String)表示匹配一个String参数的方法;(*,String)表示匹配有两
个参数的方法,
第一个参数可以是任意类型,而第二个参数是String类型;
可以用(..)表示零个或多个任意参数。
现在来看看几个例子:
1)execution(* *(..))
表示匹配所有方法
2)execution(public * com. savage.service.UserService.*(..))
表示匹配com.savage.server.UserService中所有的公有方法
3)execution(* com.savage.server..*.*(..))
表示匹配com.savage.server包及其子包下的所有方法
3.在spring配置文件中配置dao的bean
<!-- 配置项目中的dao类 -->
<bean id="petInfoDao"
class=" com.aptech.jb.epet.dao.hibimpl.PetInfoDAOHibImpl ">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
注意:一定要记得注入sessionFactory属性
4.配置对应的biz和action即可
<!-- 配置项目中的Biz -->
<bean id="petInfoBiz"
class="com.aptech.jb.epet.biz.impl.PetInfoBizImpl">
<property name="petInfoDAO" ref="petInfoDao"></property>
</bean>
<!—配置项目中的Action,注意没有id属性à
<bean name="/pet" class="com.aptech.jb.epet.web.action.PetAction">
<property name="petDiaryBiz" ref="petDiaryBiz"></property>
<property name="petInfoBiz" ref="petInfoBiz"></property>
</bean>