前言:
JDK:Java 1.7.0
IDE:Eclipse , Version=Kepler 4.3.0 ;
服务器:Tomcat7.0;
数据库:Mysql5.5
这是一个国家电力系统的案例,本来是要先描述系统设计的,但是这里注重开发实操过程,也就省略了。
这章需要实现的是:从jsp页面接收表单数据,再存到数据库里面(后面有源码下载)
一、java、eclipse、tomcat、mysql的下载安装搭建
网上都有教程,需要说明的是tomcat的安装,新手最好下载exe安装包,省心;junit插件自己解决
(需要注册账号)
(最新版的)
二、新建一个动态网站项目
起了名字,然后点击完成就行了(有兴趣可以设置一下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的连接包也加进去了)
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包的下载
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包引入
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:转载分享请标明出处,谢谢