博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSH(Struts2+Spring+Hibernate)框架搭建流程
阅读量:5093 次
发布时间:2019-06-13

本文共 11108 字,大约阅读时间需要 37 分钟。

添加支持


 

我先介绍的是MyEclipse9的自带框架支持搭建过程:(完全的步骤  傻瓜式的学习。。~)

首先我们来搭建一个Web项目:

 

一、Hibernate(数据层)的搭建:

相关描述

Ⅰ.服务器与数据库之间的交互

Ⅱ. Hibernate封装了一系列的JDBC代码,提供相应的方法我们使用,使我们的开发变得简单快捷,效率大大提高

实现流程

二、Struts2(MVC)的搭建:

相关描述

Ⅰ.本质上相当于一个Servlet

Ⅱ.不需要手动获取传递参数 (只需要定义声明属性名和设置get、set的方法)、也不需要手动跳转(只需要struts.xml配置相关的路径)

Ⅲ.对项目的分包(例如:dao、service、entity等等),实现MVC模式的开发

Ⅳ.MVC: Action属于Model,而JSP是View页面的展示,其中过滤器起到了Controller的作用

实现流程

 

这里注意一点问题:

  Struts2与Hibernate在一起搭建,antlr包,有冲突。MyEclipse9中有这样问题。朋友的MyEclipse10中没有这个问题。

 

  我选择把Struts中antlr包去掉。

 

三、Spring(注入实例)的使用:

相关描述

Ⅰ.每一层的代码之间的耦合改为模块(分离/解耦),代码之间互不影响

Ⅱ.不再关注具体的实现类的实例

Ⅲ.更换不同的技术(模块),不需要改动代码,只需要修改applicationContext.xml的相关配置信息

Ⅳ.主要功能IOC(控制反转)松耦合、AOP (面向切面)内聚性

实现流程

 

 

 


 

 编辑web.xml文件:

index.jsp
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*

 

DB Browser中反转实体类:

 

数据访问层dao接口

package com.dao;import com.entity.Users;/** * 用户接口 * @author asus * */public interface UsersDao {    /** 登陆验证 */    Users loginCheck(Users user);}

 

数据访问层dao.impl实现类

  1)继承HibernateDaoSupport类实现增删改查

package com.dao.impl;import java.util.List;import org.springframework.orm.hibernate3.HibernateTemplate;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.dao.UsersDao;import com.entity.Users;/** * 用户接口实现类 * @author asus *HibernateTemplate、HibernateDaoSupport两种方法实现增删改查 *一种方法:        Dao实现类继承HibernateDaoSupport类,该类是抽象类,        该类中有一个HibernateTemplate的属性,通过this.getHibernateTemplate()可获得一个HibernateTemplate类的模板对象。 */public class UsersDaoImpl extends HibernateDaoSupport implements UsersDao {        @Override    public Users loginCheck(Users user) {        //得到此类提供的模板实现增删改查        HibernateTemplate ht = this.getHibernateTemplate();                //得到一个集合        List
list = ht.find("from Users where name=? and password=? ",user.getName(),user.getPassword()); //使用三元运算符,防止list.get(0)时报空指针。 return (Users) (list.size()>0?list.get(0):null); }}  
 2)定义HibernateTemplate模板对象属性
package com.dao.impl;import java.util.List;import org.springframework.orm.hibernate3.HibernateTemplate;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.dao.UsersDao;import com.entity.Users;/** * 用户接口实现类 * @author asus *HibernateTemplate、HibernateDaoSupport两种方法实现增删改查 *第二种方法:    在dao类中定义一个HibernateTemplate类的对象,用该对象调用HibernateTemplate模板封装好的方法,如下: */public class UsersDaoImpl implements UsersDao {        //定义一个模板对象    HibernateTemplate hibernateTemplate;            @Override    public Users loginCheck(Users user) {                //得到一个集合        List
list = hibernateTemplate.find("from Users where name=? and password=? ",user.getName(),user.getPassword()); //使用三元运算符,防止list.get(0)时报空指针。 return (Users) (list.size()>0?list.get(0):null); } //生成Get'Set方法 public HibernateTemplate getHibernateTemplate() { return hibernateTemplate; } public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; }}

业务逻辑层接口service

package com.service;import com.entity.Users;/** * 用户业务逻辑层 * @author asus * */public interface UsersService {    /** 登陆验证 */    Users loginCheck(Users user);}

业务逻辑层接口实现类service.impl

package com.service.impl;import com.dao.UsersDao;import com.entity.Users;import com.service.UsersService;/** * 用户业务逻辑层实现类 * @author asus * */public class UsersServiceImpl implements UsersService {    //这里以前是new的,现在不需要了,交给Spring来实例    private UsersDao udd;    @Override    public Users loginCheck(Users user) {                return udd.loginCheck(user);    }    //生成Get'Set    public UsersDao getUdd() {        return udd;    }    public void setUdd(UsersDao udd) {        this.udd = udd;    }    }

控制器类Action

package com.action;import com.entity.Users;import com.opensymphony.xwork2.ActionSupport;import com.service.UsersService;/** * 用户控制器类 * @author asus * */public class UsersAction extends ActionSupport {    //接收页面的值    private Users user;    //一样交给Spring实例    private UsersService uss;    public String execute(){                return SUCCESS;    }    /** 判断用户输入的账号密码 */    public String login(){        if(user!=null){            Users checkResult = uss.loginCheck(user);            if(checkResult!=null){                return SUCCESS;            }        }                return LOGIN;    }    //生成Get'Set    public Users getUser() {        return user;    }    public void setUser(Users user) {        this.user = user;    }    public UsersService getUss() {        return uss;    }    public void setUss(UsersService uss) {        this.uss = uss;    }}

登陆页面

        
用户名:
密码:

成功页面

        登录成功!  

 配置applicationContext.xml

配置Struts.xml

/success.jsp
/login.jsp

end:基本的登陆现在已经做好,现在我们开始做添加事务。

添加事务


 

 数据访问层dao接口

package com.dao;import com.entity.District;/** * 区域接口 * @author asus * */public interface DistrictDao {    /** 添加区域  */    int addReg (District district);}

 数据访问层dao.impl实现类

   定义HibernateTemplate模板对象属性

package com.dao.impl;import org.springframework.dao.DataAccessException;import org.springframework.orm.hibernate3.HibernateTemplate;import com.dao.DistrictDao;import com.entity.District;/** * 区域接口实现类 * @author asus *HibernateTemplate、HibernateDaoSupport两种方法实现增删改查 *第二种方法:    在dao类中定义一个HibernateTemplate类的对象,用该对象调用HibernateTemplate模板封装好的方法,如下: */public class DistrictDaoImpl implements DistrictDao {    //定义一个模板对象    private HibernateTemplate hibernateTemplate;        @Override    public int addReg(District district) {        try {            hibernateTemplate.save(district);            return 1;        } catch (DataAccessException e) {            e.printStackTrace();        }        return 0;    }    //生成Get'Set方法    public HibernateTemplate getHibernateTemplate() {        return hibernateTemplate;    }    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {        this.hibernateTemplate = hibernateTemplate;    }}

 

 业务逻辑层接口service

package com.service;import com.entity.District;/** * 地区业务逻辑类接口 * @author asus * */public interface DistrictService {    /**     *  配置事务的话注意方法的命名规范以什么开头。     * @param district     */    int addReg(District district);}

 

业务逻辑层接口实现类service.impl

 

package com.service.impl;import com.dao.DistrictDao;import com.entity.District;import com.service.DistrictService;/** * 区域业务逻辑层接口实现类 *  * @author asus * */public class DistrictServiceImpl implements DistrictService {    //声明接口由Spring来实例    private DistrictDao ddd;        @Override    public int addReg(District district) {                return ddd.addReg(district);    }    //声明Get'Set方法    public DistrictDao getDdd() {        return ddd;    }    public void setDdd(DistrictDao ddd) {        this.ddd = ddd;    }    }

 

控制器类Action

package com.action;import com.entity.District;import com.opensymphony.xwork2.ActionSupport;import com.service.DistrictService;/** * 控制器类 * 作用:添加区域 * @author asus * */public class DistrictAction extends ActionSupport {    //属性    private District district;    private DistrictService dss;    //处理添加请求    public String add(){                int addReg = dss.addReg(district);                if(addReg>0){            return SUCCESS;        }        return "index";    }        //生成Get'Set方法    public DistrictService getDss() {        return dss;    }    public void setDss(DistrictService dss) {        this.dss = dss;    }    public District getDistrict() {        return district;    }    public void setDistrict(District district) {        this.district = district;    }    }

 

 添加页面

        

 

成功页面

        登录成功!  

 

配置applicationContext.xml(这里还是比较重要的,其中夹杂前面Users的Bean)

 

优化SessionFacatory,使用Spring创建最原始的JDBC数据源

优化JDBC为C3P0数据源连接池


 

(注:代码确与上面有重复,我走的是步骤路线虽然代码重复太多,只为更容易理解)

配置applicationContext.xml

 

org.hibernate.dialect.Oracle9Dialect
true
true
com/entity/District.hbm.xml
com/entity/House.hbm.xml
com/entity/Street.hbm.xml
com/entity/Type2.hbm.xml
com/entity/Users.hbm.xml

 

 

 

附Spring创建JDBC数据源图:

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/wkrbky/p/5912810.html

你可能感兴趣的文章
C++:指针
查看>>
C++字符串使用sizeof时注意
查看>>
【转载】WebService到底是什么?
查看>>
windows下安装nodejs
查看>>
[LeetCode] Trapping Rain Water II 题解
查看>>
对排名前3000位博主进行数据分析
查看>>
Python设计模式之单例模式
查看>>
eclipse中server location为灰色,不能修改
查看>>
shift and算法
查看>>
MongoDB数据库导出导入迁移
查看>>
观察者模式
查看>>
201521123097《Java程序设计》第五周学习总结
查看>>
云瓣影音网站&&微信端(已开源)
查看>>
C++入门篇十二
查看>>
冲刺周期二--站立会议03
查看>>
UITableViewCell高度自适应变化
查看>>
python 类变量与实例变量,可变对象与不可变对象的实践
查看>>
下载devc++和codeblocks记录
查看>>
C++ 修改 Windows Service【转】
查看>>
串口接线
查看>>