第三篇 整合struts+spring+hibernate

本文介绍如何通过修改applicationContext.xml文件实现Struts、Spring与Hibernate的整合,并解决了常见的Action找不到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Struts+Spring+Hibernate的完美融合之整合struts+spring+hibernate

第三篇 整合struts+spring+hibernate

我们在上两篇的基础只要再对applicationContext.xml文件进行修改,就可以达到我们整合的目地。

第一步 完善applicationContext.xml内容

1、添加事务处理。内容如下:

  <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
     <ref local="sessionFactory" />
    </property>
   </bean>
   <bean id="customerDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
     <ref bean="transactionManager" />
    </property>
    <property name="target">
     <ref local="customerDAO" />
    </property>
    <property name="transactionAttributes">
     <props>
      <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
     </props>
    </property>
   </bean>

2、CustomerAction Bean注入事务处理。内容如下:

  <bean name="/customer" class="com.ssh.struts.action.CustomerAction" >
      <property name="customerDAO"><ref bean="customerDAOProxy"/></property>
  </bean>

 3、最终applicationContext.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans
 xmlns="http://www.springframework.org/schema/beans"
 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">
 
 <bean id="dataSource"
  class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName"
   value="com.mysql.jdbc.Driver">
  </property>
  <property name="url"
   value="jdbc:mysql://localhost:3306/pullhand">
  </property>
  <property name="username" value="root"></property>
  <property name="password" value="815241"></property>
 </bean>
 
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource">
   <ref bean="dataSource" />
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.MySQLDialect
    </prop>
   </props>
  </property>
  <property name="mappingResources">
   <list>
    <value>com/ssh/beans/po/Customer.hbm.xml</value></list>
  </property>
  </bean>
  
  <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
     <ref local="sessionFactory" />
    </property>
   </bean>
   <bean id="customerDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
     <ref bean="transactionManager" />
    </property>
    <property name="target">
     <ref local="customerDAO" />
    </property>
    <property name="transactionAttributes">
     <props>
      <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
     </props>
    </property>
   </bean>
  
  <bean id="customerDAO" class="com.ssh.beans.dao.CustomerDAO">
   <property name="sessionFactory">
    <ref bean="sessionFactory" />
   </property>
  </bean>
  
  <bean name="/customer" class="com.ssh.struts.action.CustomerAction" >
      <property name="customerDAO"><ref bean="customerDAOProxy"/></property>
  </bean> 
   
 </beans>

第二步,修改CustomerAction

最后内容如下:


package com.ssh.struts.action;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.ssh.beans.dao.ICustomerDAO;
import com.ssh.beans.po.Customer;


public class CustomerAction extends Action {
 ICustomerDAO customerDAO=null;
 public void setCustomerDAO(ICustomerDAO customerDAO){
  this.customerDAO=customerDAO;
 }
 
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  List list=new ArrayList();
  Customer customer=null;
  if(customerDAO!=null){
   list=customerDAO.getALLCustomer();
   for(int i=0;i<list.size();i++){
    customer=(Customer)list.get(i);
    System.out.println("OK:"+customer.getCustName());
   }
  }else{
   System.out.println("ERROR or NULL");
  }
  return mapping.findForward("success");
 }
}

第三步 解决找不到Action问题

初学者会经常遇到下面这个问题:

HTTP Status 404 - Servlet action is not available


type Status report

message Servlet action is not available

description The requested resource (Servlet action is not available) is not available.


Apache Tomcat/5.0.28

就是找不到我们的action。

当你努力去解决这个问题时,会发现去掉applicationContext.xml下面这个<property>标签,一切正常:

  <property name="mappingResources">
   <list>
    <value>
     com/ssh/beans/po/Customer.hbm.xml
    </value>
   </list>
  </property>

那是什么原因呢?我想大家都会首先想到下面两个问题:

1、路径是否正确:即com/ssh/beans/po/Customer.hbm.xml的路径正确么?

2、文件是否正确:即Customer.hbm.xml的文件内容对么?

当你费了一身力气发现一切OK,到底什么原因???

问题在于构件路径(lib)内的包重叠(提示:前提是你要保证这个问题出现之前都正常),所以你要确定构建路径里的包不能重复!

建议:大家在导入包时,按照默认导入,不要把所有的包都导进工程,在操作中在把需要的jar包导进去(最好不要把整个liberaries导进去),这样即可以减小工程的大小,又能确保struts/spring/hibernate之间的包不会重叠或者被替换。

 

好了,我的任务完成了,大家删包去吧!祝你好运!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值