OA项目2:环境搭建之ssh框架整合

首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明。谢谢。

今天做Spring+Hibernate+Struts2整合。

一 Struts2与Spring的整合。

  1.整合之前Struts2例子:

  在src下建立一个包,包名为:cn.clear.oa.test,在包下面建立一个类TestAction.java,内容如下:

 1 package cn.clear.oa.test;

 2 

 3 import com.opensymphony.xwork2.ActionSupport;

 4 

 5 public class TestAction extends ActionSupport{

 6 

 7     /**

 8      * 

 9      */

10     private static final long serialVersionUID = 3452727162433082820L;

11     

12 

13     public String execute() throws Exception {

14         System.out.println("---> TestAction.execute()");

15         return "success";

16     }

17 

18 }
TestAction.java

  然后在WebRoot目录下建立一个test.jsp,页面内容如下:

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 2 

 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

 4 <html>

 5   <head>

 6    

 7     <title>测试页面</title>

 8   </head>

 9   

10   <body>

11     Struts2添加成功!

12   </body>

13 </html>
test.jsp

  修改struts.xml的内容,修改后内容如下:

 1 <?xml version="1.0" encoding="UTF-8" ?>

 2 <!DOCTYPE struts PUBLIC

 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

 4     "http://struts.apache.org/dtds/struts-2.3.dtd">

 5 

 6 <struts>

 7     

 8     <!-- 设置为开发者模式 -->

 9     <constant name="struts.devMode" value="true" />

10     <!-- 把扩展名设置为.action,如name里的内容记不住,请在core包里的default.properties里面找 -->

11     <constant name="struts.action.extension" value="action" />

12     <!-- 把主题设置为simple,如name里的内容记不住,请在core包里的default.properties里面找 -->

13     <constant name="struts.ui.theme" value="simple" />

14 

15     <package name="default" namespace="/" extends="struts-default">

16     

17         <!-- 测试用的Action(未与Spring整合,class写类的全名) -->

18         <action name="test" class="cn.clear.oa.test.TestAction">

19             <result name="success">/test.jsp</result>

20         </action>

21     </package>

22 

23 </struts>
struts.xml

  然后启动tomcat服务器,访问这个页面:http://localhost:8080/OA/test.action,如果跳转到如下图的页面,则说明Struts2环境添加成功。

  同时,在myeclipse的console下面也会打印:---> TestAction.execute()

OA项目2:环境搭建之ssh框架整合

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  2.测试Spring环境:

  在包cn.clear.oa.test下面建立一个测试类SpringTest.java,其内容如下:

 1 package cn.clear.oa.test;

 2 

 3 import org.junit.Test;

 4 import org.springframework.context.ApplicationContext;

 5 import org.springframework.context.support.ClassPathXmlApplicationContext;

 6 

 7 public class SpringTest {

 8 

 9     private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

10     

11     @Test

12     public void testBean() throws Exception {

13         TestAction testAction = (TestAction) ac.getBean("testAction");

14         System.out.println(testAction);

15     }

16 }
SpringTest.java

  然后在TestAction.java里面类名上面添加如下注解,在类SpringTest.java的testBean方法中开启单点测试,如果结果条显示绿色,

  控制台打印出:cn.clear.oa.test.TestAction@4929b0e1,则说明测试通过,Spring环境添加成功。

1 @Controller

2 @Scope("prototype")

3 public class TestAction extends ActionSupport{

4          ……………………………………………………………………  

5 }
增加注解

  3.Struts2与Spring整合:

  首先在web.xml中配置Spring的监听器。如下:

1   <!-- 配置Spring用于初始化容器的监听器 -->

2   <listener>

3            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

4   </listener>

5   <context-param>

6    <param-name>contextConfigLocation</param-name>

7            <param-value>classpath:applicationContext*.xml</param-value>

8   </context-param>
spring监听器

  其次添加整合所需的jar包。jar包在struts2.3.15.1的lib下面加,名字为:struts2-spring-plugin-2.3.15.1.jar 

  进入struts.xml中,将action的class属性直接填写bean的名字testAction,重启服务器,访问:http://localhost:8080/OA/test.action

  如果成功进入页面,说明Struts2与Spring整合成功。

二 Hibernate与Spring的整合。

  为什么要整合?答:1.管理SessionFactory(只需要一个);2.声明式事务管理。

  整合步骤:

  1)修改hibernate.cfg.xml中的内容,因为我们将使用到c3p0连接池管理数据库连接,所以数据库连接信息注释掉,如下图所示:

  OA项目2:环境搭建之ssh框架整合

 

 

 

 

 

 

 

 

 

 

 

  2)在applicationContext.xml中添加内容,最终如下所示:

 1 <?xml version="1.0" encoding="UTF-8"?>

 2 <!--

 3   - Middle tier application context definition for the image database.

 4   -->

 5 <beans xmlns="http://www.springframework.org/schema/beans"

 6         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 7         xmlns:context="http://www.springframework.org/schema/context"

 8         xmlns:tx="http://www.springframework.org/schema/tx"

 9         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

10                 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

11                 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

12 

13     <!-- 自动扫描与装配bean -->

14     <context:component-scan base-package="cn.clear.oa"></context:component-scan>

15     <!-- 导入外部的properties文件 -->

16     <context:property-placeholder location="classpath:jdbc.properties"/>

17     <!-- 配置SessionFactory -->

18     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

19         <!-- 指定hibernate配置文件的位置 -->

20         <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>

21         <!-- 配置c3p0数据库连接池 -->

22         <property name="dataSource">

23             <bean class="com.mchange.v2.c3p0.ComboPooledDataSource">

24                 <property name="driverClass" value="${driverClass}"></property>

25                 <property name="jdbcUrl" value="${jdbcUrl}"></property>

26                 <property name="user" value="${username}"></property>

27                 <property name="password" value="${password}"></property>

28                 

29                 <!-- 其他配置 -->

30                 <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->

31                 <property name="initialPoolSize" value="3"></property>

32                 <!--连接池中保留的最小连接数。Default: 3 -->

33                 <property name="minPoolSize" value="3"></property>

34                 <!--连接池中保留的最大连接数。Default: 15 -->

35                 <property name="maxPoolSize" value="5"></property>

36                 <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->

37                 <property name="acquireIncrement" value="3"></property>

38                 <!-- 控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->

39                 <property name="maxStatements" value="8"></property>

40                 <!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->

41                 <property name="maxStatementsPerConnection" value="5"></property>

42                 <!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->

43                 <property name="maxIdleTime" value="1800"></property>        

44             </bean>

45         </property>    

46     </bean>

47     <!-- 配置声明式事务管理(使用注解的方式) -->

48     <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

49         <property name="sessionFactory" ref="sessionFactory"></property>

50     </bean>

51     <tx:annotation-driven transaction-manager="txManager"/>

52 </beans>
applicationContext.xml

  3)在src目录下建立一个数据库配置文件,名字为jdbc.properties,内容如下(注意每行最后不要留空格,否则会报错):

1 jdbcUrl     = jdbc:mysql:///oa

2 driverClass = com.mysql.jdbc.Driver

3 username    = root

4 password    =root
jdbc.properties

  4)在SpringTest.java类里写一个方法测试SessionFactory,内容如下,如果执行单点测试成功,说明成功:

1 //测试sessionFactory

2     @Test

3     public void testSessionFactory() throws Exception {

4          SessionFactory sessionFactory = (SessionFactory) ac.getBean("sessionFactory");

5          System.out.println(sessionFactory);

6     }
测试SessionFactory

  5)测试事务:

    首先创建一个包:cn.clear.oa.domain,在包下建一个测试用的用户类(User.java),具体代码如下: 

 1 package cn.clear.oa.domain;

 2 

 3 public class User {

 4     private Long id;

 5     private String name;

 6     public Long getId() {

 7         return id;

 8     }

 9     public void setId(Long id) {

10         this.id = id;

11     }

12     public String getName() {

13         return name;

14     }

15     public void setName(String name) {

16         this.name = name;

17     }

18     

19     

20 }
User.java

    将之前拷贝的XX.hbm.xml剪切到domain包下,将名字改为User.hbm.xml,内容如下:

 1 <?xml version="1.0"?>

 2 <!DOCTYPE hibernate-mapping PUBLIC 

 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

 5 

 6 <hibernate-mapping package="cn.clear.oa.domain">

 7     <class name="User" table="oa_user">

 8         <id name="id"><generator class="native"/></id>

 9         <property name="name"/>

10     </class>

11 </hibernate-mapping>
User.hbm.xml

    然后将这个mapper配置到hibernate.cfg.xml里面,具体内容如下所示:

1 <!-- 导入映射文件 -->

2 <mapping resource="cn/clear/oa/domain/User.hbm.xml" />
添加mapper

    在test包下创建一个测试用的业务类,名字叫TestService.java,内容如下:  

 1 package cn.clear.oa.test;

 2 

 3 import javax.annotation.Resource;

 4 

 5 import org.hibernate.Session;

 6 import org.hibernate.SessionFactory;

 7 import org.springframework.stereotype.Service;

 8 import org.springframework.transaction.annotation.Transactional;

 9 

10 import cn.clear.oa.domain.User;

11 @Service

12 public class TestService {

13 

14     @Resource

15     private SessionFactory sessionFactory;

16     

17     @Transactional

18     public void saveTestUser(){

19         Session session = sessionFactory.getCurrentSession();

20         session.save(new User());

21         //测试事务的回滚功能

22         //int a = 1/0;

23         session.save(new User());

24     }

25 }
TestService.java

    在SpringTest.java下创建方法测试事务,内容如下:

1         //测试事务

2     @Test

3     public void testTransaction() throws Exception {

4         TestService testService = (TestService)           ac.getBean("testService");

5         testService.saveTestUser();

6     }    
测试事务

    启动单点测试测试事务,分别注释掉TestService.java里的int a = 1/0;代码和不注释各测试一次,如果成功就说明hibernate和spring整合成功。

三 ssh整合后测试:

  在TsetAction.java里引入TestService.java类,测试是否能够创建user对象,然后启动服务器,在浏览器中访问:http://localhost:8080/OA/test.action,

  如果成功进入页面并且数据库增加了相应的表记录,证明ssh整合成功。修改后的TestAction.java内容如下:

 1 package cn.clear.oa.test;

 2 

 3 import javax.annotation.Resource;

 4 

 5 import org.springframework.context.annotation.Scope;

 6 import org.springframework.stereotype.Controller;

 7 

 8 import com.opensymphony.xwork2.ActionSupport;

 9 

10 @Controller

11 @Scope("prototype")

12 public class TestAction extends ActionSupport{

13 

14     /**

15      * 

16      */

17     private static final long serialVersionUID = 3452727162433082820L;

18     

19     @Resource

20     private TestService testService;

21 

22     public String execute() throws Exception {

23         System.out.println("---> TestAction.execute()");

24         testService.saveTestUser();

25         return "success";

26     }

27 

28 }
TestAction.java

 

     

  

你可能感兴趣的:(环境搭建)