• 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()

      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连接池管理数据库连接,所以数据库连接信息注释掉,如下图所示:

      

      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

         

      

  • 相关阅读:
    SQL2008安装重启失败
    UML学习笔记
    强大的wget
    记录几款不错的chrome主题
    关于nginx配置的不完全总结
    关于Mac下的SSH客户端iterm2等配置
    安装配置sock5代理
    配置DNS
    复习一些编译原理
    了解CentOS及周边
  • 原文地址:https://www.cnblogs.com/clear5/p/4031586.html
Copyright © 2020-2023  润新知