写在前面
因为在不同的MyEclipse版本中,其自动的SSH框架的jar版本是不一样,在一个版本中一步一步配置好的SSH可以成功,换一个环境在配一遍未必会成功,出现各种奇葩的问题。为了解决这个问题,本文在MyEclipse2016环境下,详细讲解整合SSH的每个步骤,并最后脱离MyEclipse环境,把jar本地化,方便在不同MyEclipse环境之间无缝对接。
1创建数据库
1.1创建用户webapp1并授权(如果需要,本文直接使用scott用户来演示)
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.创建数据库连接
此处注意把oracle驱动jar包加进来,还有就是打勾save password
3.创建WEB Project
输入项目名字,其他默认,finish
4.添加Struts2.1
4.1选择如下图所示命令
4.2 第一步:添加struts界面保持默认
4.3 第二步:选择/*
4.4 第三步:选择core
5. 测试struts是否正确安装
5.1 编写struts.xml如下:
5.2 在WebRoot下新建一个test.jsp, 编写一些信息即可
5.3 在地址栏中输入http://localhost:8080/WebApp/test,如果正常则测试通过!
6. 添加spring支持
6.1 命令位置
6.2 第一步:选择4.1,其他默认
6.2 第二步:默认
6.3 第三步:默认
Finish
7. 添加Hibernate支持
7.1 命令位置
第一步:选择4.1
第二步:不要打钩Create / specify hibernate.cfg.xml file和create SessionFactory class
第三步:选择数据库连接(本文第二步所做)
第五步:默认
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界面,打开数据库连接,并找到自己的表格
右键表格,选择“hibernate reverse engineering”
在弹出的界面中,点击java src folder右边的browse,选择本文的web项目
确定,显示如下界面,做如下配置
下一步,Id Generator选择native
然后直接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模板,需要把SSH的jar包保存在项目目录下,然后跟随项目一并到另一台机器上继续开发,此时可以不用管对方的MyEclipse版本是否提供项目所需jar了,因为jar就保存在项目中了。
具体做法就是,首先把项目发布到tomcat,拷贝项目网站目录下的lib文件下的所有jar到另一个文件夹暂存,然后仔细核对是否有相同jar的不同版本,如果有就删除低版本,保留高版本。接着在MyEclipse环境中,把项目中的SSH库remove掉。在把暂存中文件夹拷贝到源码目录中lib目录下。完成
15. 源码放送
https://download.csdn.net/download/luoshao2000/10669406