整合SSH(Spring+Struts+Hibernate)实例(一)

前言:

JDK:Java 1.7.0

IDE:Eclipse , Version=Kepler 4.3.0 ;

服务器:Tomcat7.0;

数据库:Mysql5.5

这是一个国家电力系统的案例,本来是要先描述系统设计的,但是这里注重开发实操过程,也就省略了。

这章需要实现的是:从jsp页面接收表单数据,再存到数据库里面(后面有源码下载)

一、java、eclipse、tomcat、mysql的下载安装搭建

网上都有教程,需要说明的是tomcat的安装,新手最好下载exe安装包,省心;junit插件自己解决

点此下载Tomcat7.0

Java1.7下载

(需要注册账号)

Eclipse 64位下载

(最新版的)

Mysql5.5精简版

二、新建一个动态网站项目

起了名字,然后点击完成就行了(有兴趣可以设置一下WebContent)

三、数据库的设计

建议使用cmd指令建库,多熟悉mysql操作;如果图方便也可以下载数据库图视化工具操作(比如navicat)

1、打开cmd,输入mysql -u*(此处*为你的用户名) -p*(此处*为数据库密码)

登陆成功后

创建数据库

CREATE DATABASE elec CHARACTER SET utf8 COLLATE utf8_general_ci;

改用elec数据库

use elec;

创建表

CREATE TABLE Elec_Text(

textID varchar(50) not null,

textName varchar(50),

textDate datetime,

textRemark varchar(500),

primary key(textID)

);

如图:

可以使用desc elec_text;查看表结构


四、引入hibernate

1、导入用到的hibernate 核心Jar包(这里把mysql的连接包也加进去了)

点此下载hibernate5.5.5核心jar包

2、在src文件夹根目录下新建hibernate.cfg.xml文件,该文件在src根目录下会被自动加载

其中<mapping resource=""/>是映射后面写到的xml文件


五、新建一个包,并新建PO持久层对象,用于映射数据表elec_text,ElecText.Java(类名词开头都大写)

package cn.itcast.elec.domain;

import java.util.Date;

/**

* PO持久层对象,对应数据库表Elec_Text

*

*/

@SuppressWarnings("serial")

public class ElecText implements java.io.Serializable {

private String textID;

private String textName;

private Date textDate;

private String textRemark;

public String getTextID() {

return textID;

}

public void setTextID(String textID) {

this.textID = textID;

}

public String getTextName() {

return textName;

}

public void setTextName(String textName) {

this.textName = textName;

}

public Date getTextDate() {

return textDate;

}

public void setTextDate(Date textDate) {

this.textDate = textDate;

}

public String getTextRemark() {

return textRemark;

}

public void setTextRemark(String textRemark) {

this.textRemark = textRemark;

}

}

六、新建上面PO类的hibernate映射配置文件,ElecText.hbm.xml


七、编写junit测试类,测试映射、连接等等是否有误

1、新建一个junit包,新建TestHibernate.java文件

public class TestHibernate {

@Test

public void testElecText(){

Configuration config = new Configuration();

config.configure();

//创建sessionFactory对象

SessionFactory sf = config.buildSessionFactory();

//打开session,操作数据库

Session session = sf.openSession();

//开启事务

Transaction tr = session.beginTransaction();

//实例化ElecText对象,添加数据,执行保存操作

ElecText elecText = new ElecText();

elecText.setTextName("测试Hibernate名称");

elecText.setTextDate(new Date());

elecText.setTextRemark("测试Hibernate备注");

//保存

session.save(elecText);

//提交事务

tr.commit();

session.close();

}

}

2、右键--》debug看是否有问题(有问题的话自己解决吧。。)

八、引入spring

1、spring核心jar包的下载

点击下载spring4.3.6

2、在src根目录下新建beans.xml(之所以在根目录下是因为加载的时候直接写文件名就行,方便)


其中3是为hibernate注入sessionFactory工厂,第四步是创建事务管理器,有这个管理器,spring会自动提交、回滚等等事务

九、新建cn.itcast.elec.dao包,再新建一个公共DAO接口ICommonDao.java,规范数据访问类

package cn.itcast.elec.dao;

public interface ICommonDao{

public void save(T entity);

}

十、新建一个impl包,实现上面的接口CommonDaoImpl.java


该类继承了HibernateDaoSuppport类,里面提供了增删改查的方法,@Resource(name="sessionFactory")的意思是将bean.xml配置中id为sessionFactory的bean(里面内部已经生存了sessionFactory类)注入给setSessionFactoryDi方法

十一、在原来的dao包下,新建一个elecTextDao.java,用于规范elecText的访问

package cn.itcast.elec.dao;

import cn.itcast.elec.domain.ElecText;

public interface IElecTextDao extends ICommonDao{

public final static String SERVICE_NAME = "cn.itcast.elec.dao.impl.ElecTextDaoImpl";

}

十二、在原来的impl包下,新建一个ElecTextDaoImpl,用来实现elecTextDao接口

package cn.itcast.elec.dao.impl;

import org.springframework.stereotype.Repository;

import cn.itcast.elec.dao.IElecTextDao;import cn.itcast.elec.domain.ElecText;

@Repository(IElecTextDao.SERVICE_NAME)

public class ElecTextDaoImpl extends CommonDaoImplimplements IElecTextDao {

}

其中@Repository(IElecTextDao.SERVICE_NAME)是将名为IElecTextDao.SERVICE_NAME的类注入到spring容器当中

十三、新建一个service接口包,并在其下面新建一个service接口,规范业务


十四、新建一个service实现包,并新建一个实现类

十五、struts的引用

1、struts2 jar包引入

点此下载struts2 jar包

2、写一个所有Action都要继承的类,这个类主要是为了获取到HttpServletRequest和HttpServletResponse对象,而这两个对象用于客服端和服务端的信息传递。


其实,如果不继承ServletRequest和ServletResponse也可以,不过要通过ServletActionContext或者ActionContext来获取,更重要的是,这两种不是IOC模式,需要自己注入,多了一些步骤

3、接下来就是要继承这个BaseAction类了,但是在此之前还需要写一个从Spring IOC容器加载Bean的类,因为这个加载是公共代码,而且也很费时间,所以把这部分代码抽出来,作为一个服务类,加载一次就好。

首先,建一个ApplicationContext的JavaBean


再利用加载了bean配置的类,进行bean的加载


之所以把把加载配置文件和加载bean分开两个类是因为还可以利用配置文件干一些其他的事情

4、这个时候回想一下我们所要实现的业务,没错就是要将jsp的表单数据存到数据库里面,这里就需要一个载体承担jsp页面和action之间的信息传递。回想一下上面的PO类,负责完成java和数据库的映射。其实我们也可以用那个PO类完成这里的信息传递,但是这样做不好。因为数据库的数据不完全会是页面所反馈或者用到的,造成资源浪费等。所以好的做法是再写一个Model类,用于担当起表现的作用


5、再在action包下,写一个存储从jsp页面传过来的action


其中实现ModelDriven的好处,大家自行百度

6、在web.xml(WebContent/WEB-INF目录下)配置struts相关拦截器


7、配置完拦截器后,改拦截器会自动加载src根目录下的命名为struts.xml的文件


最后的jsp,就是一个表单的提交,大家可以自己写,也可以看代码

点击下载源代码(提取码为oimt)

可能需要将WebContent改为WebRoot,如果运行提示resources 不可用,那么可以对着项目右键-->Properties-->Project Facets。取消再勾选Dynamic Web Module,点击”Apply“应用,然后下面会出现一个“Further Configuration Avaliable...",再点进去,修改WebContent为WebRoot


终于写完了,感觉要吐血了。。(有什么错误的地方,还希望大家指出并指正)

PS:转载分享请标明出处,谢谢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容