`
namezhou
  • 浏览: 155493 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ssh整合的三种方式

阅读更多

第一种方式:

 

整合方式:
Spring与Struts的整合
Action 继承Spring提供的Action ,该Action父类为Struts的Action,添加了方法getWebApplicationContext()
可以通过此方法获取ApplicationContext对象,从而获取到Bean
Spring与Hibernate的整合
通过动态代理整合HibernateTemplate

实现流程:
1.实现Spring与Hibernate的集成:

public class UserDaoImpl implements UserDao {
 private HibernateTemplate ht;
 /**
  * 添加用户
  */
 public boolean addUser(User user) {
  try{
   ht.save(user);
   return true;
  }catch(Exception e){
   e.printStackTrace();
  }
  return false;
 }
 
 /**
  * 删除用户
  */
 public boolean deleteUser(User user) {
  try{
   ht.delete(user);
   return true;
  }catch(Exception e){
   e.printStackTrace();
  }
  return false;
 }
}

 

 <!-- 配置数据源的bean -->
<bean id="datasrc" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
 <property name="url" value="jdbc:mysql://localhost:3306/spring"></property>
 <property name="username" value="root"></property>
 <property name="password" value=""></property>
</bean>
<!-- 配置SessionFactory的Bean -->
<bean id="sessionfactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
 <property name="dataSource" ref="datasrc"></property>
 <!-- 配置映射文件 -->
 <property name="mappingResources">
  <list>
   <value>com/dowebber/entity/user.hbm.xml</value>
  </list>
 </property>
 <property name="hibernateProperties">
  <props>
   <prop key="hibernate.show_sql">true</prop>
   <prop key="hibernate.format_sql">true</prop>
   <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
  </props>
 </property>
</bean>
<!-- 配置HibernateTemplate的Bean-->
<bean id="hibernatetemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
 <property name="sessionFactory" ref="sessionfactory"></property>
</bean>
<!-- 配置接口的实现类的Bean-->
<bean id="userdao" class="com.dowebber.dao.impl.UserDaoImpl">
 <property name="ht" ref="hibernatetemplate"></property>
</bean>
<!-- 配置userdaoimpl的bean -->
<bean id="userdaoimpl" class="com.dowebber.service.dao.impl.UserServiceDaoImpl">
 <property name="dao" ref="userdao"></property>
</bean>
<!-- 配置事务的bean 使用hibernate的事务类,spring提供 -->
<bean id="transactionmanager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
 <property name="sessionFactory" ref="sessionfactory"></property>
</bean>
<!-- 配置代理的bean -->
<bean id="userdaoproxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
 <property name="target" ref="userdaoimpl"></property>
 <property name="transactionAttributes">
  <props>
   <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
  </props>
</property>

 2.整合Spring与Struts
2.1 写Action,继承Spring提供的ActionSupport

import org.springframework.web.struts.MappingDispatchActionSupport;

import com.dowebber.entity.User;
import com.dowebber.service.dao.UserServiceDao;

public class UserAction extends MappingDispatchActionSupport {
 
 public ActionForward login(ActionMapping mapping, ActionForm arg1,
   HttpServletRequest request, HttpServletResponse response) throws Exception {
  UserServiceDao dao = (UserServiceDao) this.getWebApplicationContext().getBean("userdaoproxy");
 }
}

 
2.2 在web.xml中配置Spring
 

 <context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>
  /WEB-INF/spring.xml
 </param-value>
   </context-param>
     <listener> 
 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>

 Struts的配置不变

应用流程: 请求-->ActionServlet-->构造Action的父类,即Spring提供ActionSupport,构造ApplicationContext->构造bean->执行Action->执行Bean

 

整合方式二:

集成方式
1.Action中把需要的bean设置成成员属性
2.把Action配置成Bean
3.struts的action的type指向Spring的代理类
4.配置struts的loader插件

请求过程 请求-->ActionServlet->Spring代理类-->加载spring配置文件,获取Action的Bean并注入其中的属性-->执行Action中的方法

整合的实现:
Action中添加需要的bean的私有属性并提供setter和getter

public class UserAction extends MappingDispatchAction {
 
 private UserServiceDao dao;
 
 public UserServiceDao getDao() {
  return dao;
 }

 public void setDao(UserServiceDao dao) {
  this.dao = dao;
 }

 public ActionForward login(ActionMapping mapping, ActionForm arg1,
   HttpServletRequest request, HttpServletResponse response) throws Exception {
  }
}

 
配置Action的Bean

<!-- Action的bean -->
<bean name="/user/login" class="com.dowebber.action.UserAction">
 <property name="dao" ref="userdaoimpl"></property>
</bean>

 配置struts的action指向spring的代理类
 

<action-mappings >
   <action 
   path="/user/login"
   type="org.springframework.web.struts.DelegatingActionProxy"
   parameter="login"
   >
   <forward name="success" path="/success.jsp"></forward>
   <forward name="fail" path="/fail.jsp"></forward>
  </action>

 配置struts的插件,插件中加载spring的配置文件

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
 <set-property property="contextConfigLocation" value="/WEB-INF/spring.xml" />
</plug-in>

 整合方式三:

配置流程:
1.Action中添加需要的bean的私有属性并提供setter和getter
2.spring中配置Action的Bean bean的name属性应该与Action的Path属性一致,不需要提供id
3.在struts配置中,配置controller和plugin,Action的type无需设置代理

实现过程:

1.Action中添加需要的bean的私有属性并提供setter和getter

public class UserAction extends MappingDispatchAction {
 
 private UserServiceDao dao;
 
 public UserServiceDao getDao() {
  return dao;
 }

 public void setDao(UserServiceDao dao) {
  this.dao = dao;
 }

 public ActionForward login(ActionMapping mapping, ActionForm arg1,
   HttpServletRequest request, HttpServletResponse response) throws Exception {
 }
}

 
2.spring中配置Action的Bean bean的name属性应该与Action的Path属性一致,不需要提供id

<!-- Action的bean -->
<bean name="/user/login" class="com.dowebber.action.UserAction">
 <property name="dao" ref="userdaoimpl"></property>
</bean>

 

3.在struts配置中,配置controller和plugin,Action的type无需设置代理

 <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"></controller>

 <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
  <set-property property="contextConfigLocation" value="/WEB-INF/spring.xml" />
 </plug-in>

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics