《图书信息管理系统》,初学者搭建后端--ssh框架。

SSH框架的搭建

本文章采用Eclipse 软件搭建ssh框架,《图书信息管理系统》的后台,适合初学者。
如图:ssh015_dbcp_c3p0 第15次改良,
实现:dbcp(较快,但是不稳定,不时会报错)和
          c3p0(稳定,但是速度较慢)两个数据库连接池互换
使用的软件:Eclipse,
编程:jsp , java , javaweb , xml , ssh ,

《图书信息管理系统》,初学者搭建后端--ssh框架。_第1张图片     《图书信息管理系统》,初学者搭建后端--ssh框架。_第2张图片

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

《图书信息管理系统》,初学者搭建后端--ssh框架。_第3张图片

版本:

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框架。_第4张图片

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=

5.8 
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" %>


我是错误页面

5.10 
------------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
  

5.11 
---------default.jsp (用于重定向跳转主页,隐藏主页。)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><%
    
    response.sendRedirect("Index.action"); 
 %>

页面 信息显示:

《图书信息管理系统》,初学者搭建后端--ssh框架。_第5张图片


由于小编我还是初学者,如果文章还有不完善的地方请多多指教;
增删改查后面也做了,但是没有上代码了。
若是不懂也可以留言指出。



你可能感兴趣的:(后端,ssh框架)