Struts2+Hibernate+Spring框架搭建(三)

本文详细介绍了如何使用Struts2、Hibernate和Spring框架进行项目整合搭建,包括添加所需Jar包、配置Spring监听器、实现事务管理及注入bean等关键步骤。通过示例代码展示了如何在Spring中管理Struts2的Action、DAO层和Service层,并解决了Action注入问题和事务持久化问题。

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

三:搭建Spring 
1.添加Spring的Jar包 

 

2.添加Struts2,Spring插件的Jar包 

 

3.添加Oracle10g 数据库的Jar包 

 

4.使用Spring来管理struts2的Action,DAO层,Service层 
1)在原来web.xml基础之上添加Spring的监听器 
 
Java代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.   <welcome-file-list>  
  8.     <welcome-file>index.jsp</welcome-file>  
  9.   </welcome-file-list>  
  10.   <filter>  
  11.      <filter-name>struts2</filter-name>  
  12.      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  13.   </filter>  
  14.     
  15.   <filter-mapping>  
  16.      <filter-name>struts2</filter-name>  
  17.      <url-pattern>/*</url-pattern>  
  18.   </filter-mapping>  
  19.     
  20.   <listener>  
  21.       <!--监听器在default情况下读取的是:/WEB-INF/applicationContext.xml -->  
  22.       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  23.   </listener>  
  24.     
  25.   <context-param>  
  26.       <param-name>contextConfigLocation</param-name>  
  27.         <!--   
  28.         <param-value>  
  29.             /WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml  
  30.         </param-value>  
  31.          -->  
  32.         <!-- 监听器启动后会读取classpath目录下面的beans.xml文件 -->  
  33.       <param-value>classpath:beans.xml</param-value>  
  34.   </context-param>  
  35.     
  36.     
  37. </web-app>  


2)修改loginAction的内容 
Java代码   收藏代码
  1. package com.wl.struts.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4. import com.wl.po.Student;  
  5. import com.wl.service.studentService;  
  6.   
  7. @SuppressWarnings("serial")  
  8. public class loginAction extends ActionSupport {  
  9.   
  10.     private studentService stuService;  
  11.       
  12.     public studentService getStuService() {  
  13.         return stuService;  
  14.     }  
  15.   
  16.     public void setStuService(studentService stuService) {  
  17.         this.stuService = stuService;  
  18.     }  
  19.   
  20.     @Override  
  21.     public String execute() throws Exception {  
  22.   
  23.         Student stu=new Student();  
  24.         stu.setId("10");  
  25.         stu.setStuName("Zhangsan");  
  26.         stu.setStuAge(29);  
  27.         stu.setStuGrade("A");  
  28.         stu.setStuNo("201017");  
  29.         stu.setStuSex("male");  
  30.         stuService.saveStudent(stu);  
  31.         return SUCCESS;  
  32.     }  
  33.   
  34. }  

3)在Src目录下新建bean.xml文件 
Java代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xmlns:contentx="http://www.springframework.org/schema/content"  
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans   
  6.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
  7.            http://www.springframework.org/schema/content  
  8.            http://www.springframework.org/schema/content/spring-content-2.5.xsd">  
  9.   
  10.   <!-- configure the sessionFactory -->  
  11.   <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  12.     <property name="configLocation">  
  13.         <value>classpath:hibernate.cfg.xml</value>  
  14.     </property>  
  15.   </bean>  
  16.     
  17.   <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">  
  18.       <property name="sessionFactory" ref="sessionFactory"></property>  
  19.   </bean>  
  20.     
  21.   <!-- manager the dao -->  
  22.   <bean id="studentDao" class="com.wl.dao.impl.studentDaoImpl">  
  23.      <property name="sessionFactory" ref="sessionFactory"></property>  
  24.   </bean>  
  25.     
  26.   <!-- manager the service  -->  
  27.   <bean id="studentService" class="com.wl.service.impl.studentServiceImpl">  
  28.      <property name="stuDao" ref="studentDao"></property>  
  29.   </bean>  
  30.     
  31.   <!-- manager the action in struts2 -->  
  32.   <bean id="loginAction" class="com.wl.struts.action.loginAction" scope="prototype">  
  33.      <property name="stuService">  
  34.         <ref bean="studentService"/>  
  35.      </property>  
  36.   </bean>    
  37. </beans>  

4)这时部署项目到Tomcat,运行Tomcat,结果如下 

 
点击“test Action”操作,报500错 

 
说明未将studentService注入到loginAction中。 

A:这个问题的原因是: loginAction没有真正的纳入Spring的管理当中 
Spring的bean.xml配置文件的确对loginAction做了配置 
Java代码   收藏代码
  1. <!-- manager the action in struts2 -->  
  2. <bean id="loginAction" class="com.wl.struts.action.loginAction" scope="prototype">  
  3.    <property name="stuService">  
  4.       <ref bean="studentService"/>  
  5.    </property>  
  6. </bean>   

但是Struts.xml配置文件中 
Java代码   收藏代码
  1. <package name="login" namespace="/" extends="struts-default">  
  2.        <action name="login" class="com.wl.struts.action.loginAction">  
  3.            <result name="success">/success.jsp</result>  
  4.            <result name="error">/error.jsp</result>  
  5.        </action>  
  6.    </package>  

没有用到Spring管理的loginAction,而是用类名重新引用的。loginAction 
B:解决这个问题的方法: 
修改Struts.xml的配置信息: 
Java代码   收藏代码
  1. <package name="login" namespace="/" extends="struts-default">  
  2.        <action name="login" class="loginAction">  
  3.            <result name="success">/success.jsp</result>  
  4.            <result name="error">/error.jsp</result>  
  5.        </action>  
  6.    </package>  

将原来的class="com.wl.struts.action.loginAction" 替换为 class="loginAction",其中的loginAction就是Spring中定义的id为loginAction的bean。 
备注: 
Spring对Struts的Action管理配置中不能忘记  scope="prototype" 
默认情况下,Spring从bean工厂所取得的实例为Singleton(bean的singleton属性) Singleton: Spring容器只存在一个共享的bean实例,默认的配置。 Prototype: 每次对bean的请求都会创建一个新的bean实例;二者选择的原则:有状态的bean都使用Prototype作用域,而对无状态的bean则应该使用singleton作用域。 
在ssh2 项目中,struts2的action交由spring管理的时候,spring默认是singleton的,而struts2的action显然是有状态的,所以必须显示设置为scope="prototype",prototype为原型模式,每次action请求过来都会创建一个action但是对那些Dao的实现类推介scope="singleton" ,因为这些类没有状态,用singleton只需维护一个实例,显然性能高一些。 

5)重新部署项目,启动Tomcat后,点击“test Action”连接后控制条结果如下: 


但是从数据库中查找数据,数据没有添加成功。 
A: 问题原因: 缺少对事务的管理,数据未持久化到数据库中 
B:解决的方法:添加对事务的管理,在bean.xml文件中添加配置信息 
Java代码   收藏代码
  1. <!-- Transaction configuration Information -->  
  2.  <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  3.    <property name="sessionFactory" ref="sessionFactory"></property>  
  4. </bean>  
  5.   
  6. <tx:advice id="txAdvice" transaction-manager="transactionManager">  
  7.     <tx:attributes>  
  8.         <tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception" />  
  9.     </tx:attributes>  
  10. </tx:advice>  
  11.   <!-- 执行com.wl.service包及其子包下面的任何类的以Student结尾的任何方法 -->  
  12.   <aop:config>  
  13.     <aop:advisor pointcut="execution(* com.wl.service..*.*Student(..))" advice-ref="txAdvice" />  
  14. </aop:config>  

现在重新启动Tomcat后,点击“test Action”连接后,就会将数据持久化到数据库中。
  • Spring_Jar.rar (4.4 MB)
  • 描述: 用到的Spring的Jar包
  • 下载次数: 106
  • FirstSshProject_001.rar (16.2 KB)
  • 描述: Struts2+Hibernate+Spring框架搭建的整个工程(不包含Jar包)
  • 下载次数: 75
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值