ssh框架的组成:
一、Java Resources -----src目录下
1、 java四个包:
ssh.action : IndexAction (mvc/控制层。)
ssh.dao : IndexDao;IndexDaoImpl (数据库访问包,接口)
ssh.entity: BookCard,BookCard.hbm.xml (实体类,映射实体类)
ssh.service: IndexService, IndexServiceImpl (业务逻辑处理层,接口)
(ssh.untity:数据库连接包,已经被applicationContext 配置信息代替)
二、 xml 文件:src目录的xml文件5个:
2.1 applicationContext.xml:
引入外部属性(插入jdbc.properties,方便数据库信息变动的时候做出修改。),
不需要new对象,防止紧密耦合,直接由spring管理类, 注入数据库连接池,检查连接信息。
2.2 jdbc.properties:
数据库连接信息的文本内容,包含驱动(哪种数据库,url地址,数据库名,用户名和密码)
2.3 s001,s002,s003.xml:多人开发的时候,配置信息说明。
2.4 Struts.xml:管理s001,s002,s003.xml文件
三、WEB-INF 目录下:
3.1 jsp文件夹:index.jsp 显示数据库表信息,
error.jsp 和 s_tag.jsp :有错误信息的时候跳转 “温馨提示” :页面出错了,也许是xx原因。
要有错误信息的页面跳转,不然服务器停止了,客服打不开网页,出现一堆乱码,一些粗口的问候就来了。
/*
这里做补充:为什么jsp页面不放到WebContent的根目录,那样岂不是更好?
1、更好的分层,大型项目可不是只有2,3个网页啊!
2、加密,隐藏主页,在s001.xml配置信息文件中,/WEB-INF/jsp/index.jsp
index主页是隐藏起来的。你无法直接运行(报404错),只有运行default.jsp 重定向跳转 主页,才能打开。
细心的网友可以看看,百度,淘宝一些大型网页是没有后缀(.html, .jsp这些的都是被隐藏了起来。)
*/
3.2 lib文件夹:ssh框架和数据库驱动包存放(struts,spring,hibernate 的所有驱动包,这里挑选用的上的。)
3.3 web.xml : 配置struts 和spring 信息文件
3.4 WEB-INF:目录外,default.jsp: 用于加密,重定向跳转index.jsp 主页面。
四、struts ,spring,hibernate 驱动包的挑选:
1、系统分4层:表示层,业务逻辑层,数据持久层,域模块层。
2、struts:作为系统的整体基础架构,负责MVC的分离,控制业务跳转。
自动获取参数,自动进行类型转换,不需要写重定向跳转代码(sendRedirect)
2、spring:管理struts,hibernate;分析需求,实现DAO接口。
3、Hibernate:实现java类和数据库之间的转换和访问,
百度云盘地址:链接:http://pan.baidu.com/s/1cuY2MM 密码:3sub
版本:
4.1 struts-2.3.30 (77.7M):只需要解压
ssh包\struts-2.3.30-all.zip\struts-2.3.30\apps\ 下的 struts2-blank即可。
往eclipse导入 struts的lib包(struts2-blank项目中的lib包)
4.2 spring -framework-4.2.2 (63.8M)
libs目录下:
spring-aop-4.2.2RELLASE
一直到 spring-web-4.2.2.RELEASE-sources
后面webmvc暂时不要,中间排除:javadoc,sources后缀的jar包
不排除:RELLASE都要
SSH框架\struts2.3.30-showcase\WEB-INF\lib
这个目录找2个jar包:commons-logging-1.1.3 :这样就有4个commons包了
struts2-spring-plugin-2.3.30 :这个是struts连接spring的包。
4.3 hibernate -release -5.2.2 (71.6M)
打包:lib\required 所有包(15个)
这里还有一个xml文件可以抓取出来用:
project\hibernate-core\src\test\resources下的 连接配置信息包:
1、连接的配置信息 hibernate.cfg.xml (cfg-->>config)
2、映射信息:(实体类) XXXX.hbm.xml
3、
E:\SSH框架\hibernate-release-5.2.2.Final\project\hibernate-ehcache\src\test\resources\hibernate-config
这个文件:hibernate.cfg.xml,在原来的基础上修改一下。后面具体讲。
三个版本都有最新版,但是不稳定,现在小编我只用稳定的旧版(每个版本的使用方法都不太一样。)
其他包:dbcp2个包(数据库连接池):这个用myeclipse应该自带,ssh框架没有,不过我网盘也上传了。
commons-pool,commons-dbcp
五、代码显示:以下写一个《图书馆信息管理系统》
5.1 数据库代码
数据库:Mysql ;数据库名:Library ;表名:Stack;
(温馨提示:mysql中,数据库名和表名这些都默认小写,例如:create Library; 但是创建的还是小写:library)
mysql 一些数据类型和写法 与sql 不同,初学者要先分清楚。
--创建数据库
create database library;
--创建表
use library;
create table Stack(
cid int auto_increment,
title varchar(50), --书名
writer varchar(30),--作者
bookdate datetime,--出版日期
price decimal(10,2),--价格
primary key(cid) --设置主键和 cid的自动增长,从1001开始
)AUTO_INCREMENT=1001;
--多行插入数据
insert into Stack(cid,title,writer,bookdate,price) values
('1001','《临界爵迹》','郭敬明','2011-1-1',19),
('1002','《斗罗大陆3》','唐家三少','2016-1-18',18),
('1003','《小说绘》','湖北知音传媒','2009-9-1',10);
5.2
-------- ssh.action : IndexAction (mvc控制层)
public class IndexAction extends ActionSupport {
//声明service,但不给它创建具体的实现类的实例,
private IndexService is = null;
public void setIs(IndexService is) {
this.is = is;
}
public String execute1() {
List myBookCardList = is.getAllBookCard();
System.out.println("结果集:"+myBookCardList.size());
ActionContext ac = ActionContext.getContext();
ac.put("myBookCardList", myBookCardList);
return "success";
}
public String formatDouble(double s){
DecimalFormat fmat=new DecimalFormat("\u00A4##.0"); // 是个给导出的《图书表》价格这列,前面增加 $符号
return fmat.format(s);
}
}
5.3
---------dao包:访问数据库 IndexDao
import java.util.List;
import ssh.entity.BookCard;
public interface IndexDao {
public List getAllBookCard();
}
------------IndexDaoImple 接口
public class IndexDaoImpl implements IndexDao {
//在SSH的设计理念:要使用某个实例,那么就定义声明一个对象,然后
//给它添加set方法(用于spring注入进来),实现不要关注这个实例
//来自于那里,以及怎么创建,或者它是谁
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sf) {
this.sessionFactory = sf;
}
@Override
public List getAllBookCard() {
//sessionFactory这个实例可以自己按常规的hibernate传统写法创建
//也可以交给spring去托管
//sessionFactory = new Configuration().configurebuildSessionFactory();
Session session = sessionFactory.openSession();
System.out.println("sessionFactory:"+sessionFactory);
System.out.println("session:"+session);
//后面当使用JPA的时候,EntityManager 类似于 SessionQuery query = session.createQuery("from BookCard");
//System.out.println("query:"+query);
//这2行代码,会交给spring的AOP帮忙处理
List list = query.getResultList();
return list;
}
}
5.4
-----------------entity实体类:
public class BookCard {
private int cid ;
private String name;
private String sex ;
private Date cardDate;
private Double deposit;
------------------------------- BookCard.hbm.xml映射实体类数据
IndexService;
public interface IndexService {
public List getAllBookCard();
public void setId(IndexDao id);
}
-----------IndexServiceImpl 业务逻辑处理层接口
public class IndexServiceImpl implements IndexService {
//dao实例使用注入方式
//??为什么要让Dao为空的?
//答:new 实现类的代码不见了,这样本类就不用关注具体的实现类是谁
private IndexDao id;
//用于注入使用
public void setId(IndexDao id) {
System.out.println("有人给我注入了一个dao实例:"+id);
this.id = id;
}
@Override
public List getAllBookCard() {
//本类应该编写业务逻辑的代码,
//但本例没有业务逻辑,就不用写。
//访问数据库的代码,不会出现在service这一层
//交给dao来操作数据库
List myBookCardList = id.getAllBookCard();
//进行其它的业务逻辑操作,比如增加多一个选项,是否过期
//本例不需要
//....
return myBookCardList;
}
}
5.6
-------------------applicationContext.xml
引入外部属性(插入jdbc.properties,方便数据库信息变动的时候做出修改。),
不需要new对象,防止紧密耦合,直接由spring管理类, 注入数据库连接池,检查连接信息。
org.hibernate.dialect.MySQL5Dialect
true
true
false
update
ssh/entity/BookCard.hbm.xml
5.7
jdbc.properties
(数据库连接信息的文本,和applicationContext分开是方便数据库变动后的修改)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/carddb
jdbc.user=root
jdbc.password=
s001.xml;
/WEB-INF/jsp/index2.jsp
/WEB-INF/jsp/s_tag.jsp
----------------s002.xml ; s003.xml
------------struts.xml 管理s001,002,003.xml信息
5.9
jSP: index.jsp 主页,建表显示数据库表信息
头文件:
<%@ taglib uri="/struts-tags" prefix="s" %>
全选
序号
卡号
姓名
性别
办卡日期
押金
没有查找到数据
-----------error.jsp 错误页面
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
我是错误页面
------------web.xml 这里默认default.jsp 为主页,其实default 不是主页,只是重定向跳转 主页。(重定向在一些杀毒软件中会有警告提示。)
ssh_001
default.jsp
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
---------default.jsp (用于重定向跳转主页,隐藏主页。)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%><%
response.sendRedirect("Index.action");
%>