首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-10-24 
Struts2+Hibernate+Spring框架搭建(三)三:搭建Spring1.添加Spring的Jar包2.添加Struts2,Spring插件的Jar包

Struts2+Hibernate+Spring框架搭建(三)
三:搭建Spring
1.添加Spring的Jar包



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



3.添加Oracle10g 数据库的Jar包



4.使用Spring来管理struts2的Action,DAO层,Service层
1)在原来web.xml基础之上添加Spring的监听器
 

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>  <filter>     <filter-name>struts2</filter-name>     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  </filter>    <filter-mapping>     <filter-name>struts2</filter-name>     <url-pattern>/*</url-pattern>  </filter-mapping>    <listener>      <!--监听器在default情况下读取的是:/WEB-INF/applicationContext.xml -->      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>    <context-param>      <param-name>contextConfigLocation</param-name>        <!-- <param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value> --><!-- 监听器启动后会读取classpath目录下面的beans.xml文件 -->      <param-value>classpath:beans.xml</param-value>  </context-param>    </web-app>


2)修改loginAction的内容
package com.wl.struts.action;import com.opensymphony.xwork2.ActionSupport;import com.wl.po.Student;import com.wl.service.studentService;@SuppressWarnings("serial")public class loginAction extends ActionSupport {private studentService stuService;public studentService getStuService() {return stuService;}public void setStuService(studentService stuService) {this.stuService = stuService;}@Overridepublic String execute() throws Exception {Student stu=new Student();stu.setId("10");stu.setStuName("Zhangsan");stu.setStuAge(29);stu.setStuGrade("A");stu.setStuNo("201017");stu.setStuSex("male");stuService.saveStudent(stu);return SUCCESS;}}

3)在Src目录下新建bean.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"       xmlns:contentx="http://www.springframework.org/schema/content"       xsi:schemaLocation="http://www.springframework.org/schema/beans            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd           http://www.springframework.org/schema/content           http://www.springframework.org/schema/content/spring-content-2.5.xsd">  <!-- configure the sessionFactory -->  <bean id="sessionFactory" ref="sessionFactory"></property>  </bean>    <!-- manager the dao -->  <bean id="studentDao" ref="sessionFactory"></property>  </bean>    <!-- manager the service  -->  <bean id="studentService" ref="studentDao"></property>  </bean>    <!-- manager the action in struts2 -->  <bean id="loginAction" scope="prototype">     <property name="stuService">        <ref bean="studentService"/>     </property>  </bean>  </beans>

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


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


说明未将studentService注入到loginAction中。

A:这个问题的原因是:loginAction没有真正的纳入Spring的管理当中
Spring的bean.xml配置文件的确对loginAction做了配置
  <!-- manager the action in struts2 -->  <bean id="loginAction" scope="prototype">     <property name="stuService">        <ref bean="studentService"/>     </property>  </bean> 

但是Struts.xml配置文件中
<package name="login" namespace="/" extends="struts-default">       <action name="login" name="code"><package name="login" namespace="/" extends="struts-default">       <action name="login" 替换为,因为这些类没有状态,用singleton只需维护一个实例,显然性能高一些。

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


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

现在重新启动Tomcat后,点击“test Action”连接后,就会将数据持久化到数据库中。Caused by: Action class [loginAction] not found - action - file:/D:/apache-tomcat-6.0.28/webapps/ssh/WEB-INF/classes/struts.xml:7:49at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyAction(XmlConfigurationProvider.java:409)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addAction(XmlConfigurationProvider.java:354)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:468)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:264)at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:111)at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:193)at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)... 31 more
2 楼 seachen 2011-06-24   OK了,我忘记加struts2-spring-plugin-2.1.8.1.jar了 3 楼 seachen 2011-06-24   OK了,我忘记加struts2-spring-plugin-2.1.8.1.jar了