写在前面

因为在不同的MyEclipse版本中,其自动的SSH框架的jar版本是不一样,在一个版本中一步一步配置好的SSH可以成功,换一个环境在配一遍未必会成功,出现各种奇葩的问题。为了解决这个问题,本文在MyEclipse2016环境下,详细讲解整合SSH的每个步骤,并最后脱离MyEclipse环境,把jar本地化,方便在不同MyEclipse环境之间无缝对接。

1创建数据库

1.1创建用户webapp1并授权(如果需要,本文直接使用scott用户来演示)

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

1.2 在oracle中创建Banji表和Student表(用于测试SSH成功与否)

Create Table Banji(

   id number(10) primary key,

   name varchar2(50) not null

)

Create Table Student(

id number(10) primary key,

stuno varchar(50) not null,

stuname varchar(50) not null,

sex char(2),

age number(3),

phone char(11)

)

 

2.创建数据库连接

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

此处注意把oracle驱动jar包加进来,还有就是打勾save password

3.创建WEB Project

输入项目名字,其他默认,finish

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

 

4.添加Struts2.1

4.1选择如下图所示命令

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

 

4.2 第一步:添加struts界面保持默认

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

 

4.3 第二步:选择/*

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

4.4 第三步:选择core

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

 

5. 测试struts是否正确安装

5.1 编写struts.xml如下:

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

5.2 在WebRoot下新建一个test.jsp, 编写一些信息即可

5.3 在地址栏中输入http://localhost:8080/WebApp/test,如果正常则测试通过!

6.  添加spring支持

6.1 命令位置

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

6.2 第一步:选择4.1,其他默认

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

6.2 第二步:默认

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

  1.  

6.3 第三步:默认

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

 

Finish

7. 添加Hibernate支持

7.1 命令位置

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

 

第一步:选择4.1

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

 

第二步:不要打钩Create / specify hibernate.cfg.xml file和create SessionFactory class

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

 

第三步:选择数据库连接(本文第二步所做)

 

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

 

第五步:默认

finish

 

添加完成之后,修改下spring的配置,如下所示

<?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:p="http://www.springframework.org/schema/p"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" xmlns:tx="http://www.springframework.org/schema/tx">

 

 

    <bean id="dataSource"

        class="org.apache.commons.dbcp.BasicDataSource">

        <property name="url"

            value="jdbc:oracle:thin:@127.0.0.1:1521:orcl">

        </property>

        <property name="username" value="scott"></property>

        <property name="password" value="123"></property>

        <property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>

    </bean>

    <bean id="sessionFactory"

        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

        <property name="dataSource">

            <ref bean="dataSource" />

        </property>

        <property name="hibernateProperties">

            <props>

                <prop key="hibernate.dialect">

                    org.hibernate.dialect.Oracle9Dialect

                </prop>

                <prop key="hibernate.show_sql">true</prop>

                <prop key="hibernate.hbm2ddl.auto">update</prop>

            </props>

        </property>

    </bean>

    <bean id="transactionManager"

        class="org.springframework.orm.hibernate4.HibernateTransactionManager">

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

    </bean>

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

    </bean></beans>

8.反向生成实体类和DAO类

切换到Database Explorer界面,打开数据库连接,并找到自己的表格

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

右键表格,选择“hibernate reverse engineering”

在弹出的界面中,点击java src folder右边的browse,选择本文的web项目

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

确定,显示如下界面,做如下配置

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

下一步,Id Generator选择native

超级详细:Struts2.1+Spring4.1+Hibernate4.1整合

然后直接finish

9. 让spring接管struts

9.1 在Struts中添加如下配置:

<constant name="struts-objectFaction" value="spring"></constant>

10 测试SSH框架

10.1 在webroot下新建一个banji文件,并在文件夹下新建一个JSP文件:addui.jsp

<body>

    <s:form action="banji-add">

        班级名字:<s:textfield name="banji.name"></s:textfield>

        <s:submit value="提交"></s:submit>

    </s:form>   

    <hr />

    <s:iterator value="banjis" var="banji">

        <s:property value="#banji.id"/>:

        <s:property value="#banji.name"/><br />

    </s:iterator>   

  </body>

 

 

10.2 新建一个Action包,取名com.webapp.action,在该包下新建一个Action:BanjiAction

package com.webapp.action;

 

import java.util.List;

 

import com.opensymphony.xwork2.ActionSupport;

import com.webapp.domain.Banji;

import com.webapp.domain.BanjiDAO;

 

public class BanjiAction extends ActionSupport {

         private Banji banji;

         private BanjiDAO banjiDAO;

         private List<Banji> banjis;

        

         public List<Banji> getBanjis() {

                  return banjis;

         }

 

         public void setBanjis(List<Banji> banjis) {

                  this.banjis = banjis;

         }

 

         public void setBanjiDAO(BanjiDAO banjiDAO) {

                  this.banjiDAO = banjiDAO;

         }

 

         public Banji getBanji() {

                  return banji;

         }

 

         public void setBanji(Banji banji) {

                  this.banji = banji;

         }

 

         public String add()

         {                

                  banjiDAO.save(banji);

                  return "addsucc";

         }

        

         public String addui()

         {

                  banjis = banjiDAO.findAll();

                  return "addui";

         }

}

 

 

10.3 在spring中配置Action

<bean id="BanjiAction" class="com.webapp.action.BanjiAction">

        <property name="banjiDAO">

            <ref bean="BanjiDAO"/>

        </property>

    </bean>

 

10.4 在Struts中配置Action

 

<action name="banji-*" method="{1}" class="BanjiAction">

            <result name="addui">/banji/addui.jsp</result>

            <result name="addsucc" type="chain">

                <param name="namespace">/</param>

                <param name="actionName">banji-addui</param>

            </result>

        </action>

测试:http://localhost:8080/WebApp/banji-addui

11 修改spring中Action的配置

<bean id="BanjiAction" class="com.webapp.action.BanjiAction"

            scope="prototype"

    >

        <property name="banjiDAO">

            <ref bean="BanjiDAO"/>

        </property>

    </bean>

12 增加业务层

目前,事务管理是放在DAO类上,但我们经常会碰到一个业务需要多少步骤,所以我们应该把事务管理下放到业务中

12.1 新建业务包:com.webapp.service

12.2 在业务包添加对应的接口,如BanjiService

package com.webapp.service;

import java.util.List;

import com.webapp.domain.Banji;

public interface BanjiService {

    public boolean add(Banji banji) throws Exception;

    public List<Banji> getAll();

}

12.3 新建业务实现包:com.webapp.service.impl

12.4 在实现包中实现BanjiService接口

package com.webapp.service.impl;

import java.util.List;

import org.springframework.transaction.annotation.Transactional;

import com.webapp.domain.Banji;

import com.webapp.domain.BanjiDAO;

import com.webapp.service.BanjiService;

 

@Transactional

public class BanjiServiceImpl implements BanjiService {

    //为了spring注入DAO

private BanjiDAO banjiDAO;

 

    public void setBanjiDAO(BanjiDAO banjiDAO) {

        this.banjiDAO = banjiDAO;

    }

 

    @Override

    public boolean add(Banji banji) throws Exception{

        try {

            banjiDAO.save(banji);

        } catch (Exception e) {         

            throw e;

        }

        return false;

    }

 

    @Override

    public List<Banji> getAll() {

        return this.banjiDAO.findAll();

    }

 

}

 

12.5 注意删除BanjiDAO类上@Transactional注解

12.6 修改BanjiAction,让BanjiAction调用BanjiService的方法

package com.webapp.action;

 

import java.util.List;

 

import com.opensymphony.xwork2.ActionSupport;

import com.webapp.domain.Banji;

import com.webapp.domain.BanjiDAO;

import com.webapp.service.BanjiService;

 

public class BanjiAction extends ActionSupport {

         private Banji banji;

         private BanjiService banjiService;

         private List<Banji> banjis;

        

         public List<Banji> getBanjis() {

                  return banjis;

         }

 

         public void setBanjis(List<Banji> banjis) {

                  this.banjis = banjis;

         }

         public void setBanjiService(BanjiService banjiService) {

                  this.banjiService = banjiService;

         }

 

         public Banji getBanji() {

                  return banji;

         }

 

         public void setBanji(Banji banji) {

                  this.banji = banji;

         }

 

         public String add() throws Exception

         {                

                  banjiService.add(banji);

                  return "addsucc";

         }

        

         public String addui()

         {

                  banji = null;

                  banjis = banjiService.getAll();

                  return "addui";

         }

}

 

 

12.7 重新配置spring

    <bean id="BanjiService" class="com.webapp.service.impl.BanjiServiceImpl">

        <property name="banjiDAO">

            <ref bean="BanjiDAO"/>

        </property>

    </bean>

   

    <bean id="BanjiAction" class="com.webapp.action.BanjiAction"

            scope="prototype"

    >

        <property name="banjiService">

            <ref bean="BanjiService"/>

        </property>

    </bean>

</beans>

12.8 所有其他DAO类也如此处理 

   

13 解决懒加载问题

在web.xml加入懒加载过滤器:OpenInViewFilter

<filter>

         <filter-name>osivFilter</filter-name>       

<filter-class>

org.springframework.orm.hibernate4.support.OpenSessionInViewFilter

</filter-class>

    </filter>

    <filter-mapping>

        <filter-name>osivFilter</filter-name>

        <url-pattern>/*</url-pattern>

</filter-mapping>

注意:该过滤器配置需要配置在Struts2核心过滤器之前

14. Jar本地化

        到目前为止,项目的SSH所需jar包在项目部署时,由MyEclipse自动地把jar拷贝到tomcat中网站所在的目录下,而源码中是不存在jar包。为了在不同版本的MyEclipse之间使用以上生成的SSH模板,需要把SSHjar包保存在项目目录下,然后跟随项目一并到另一台机器上继续开发,此时可以不用管对方的MyEclipse版本是否提供项目所需jar了,因为jar就保存在项目中了。

        具体做法就是,首先把项目发布到tomcat,拷贝项目网站目录下的lib文件下的所有jar到另一个文件夹暂存,然后仔细核对是否有相同jar的不同版本,如果有就删除低版本,保留高版本。接着在MyEclipse环境中,把项目中的SSHremove掉。在把暂存中文件夹拷贝到源码目录中lib目录下。完成

 

15. 源码放送

https://download.csdn.net/download/luoshao2000/10669406

相关文章: