热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

SSH框架的搭建本文章采用Eclipse软件搭建ssh框架,《图书信息管理系统》的后台,适合初学者。如图:ssh015_dbcp_c3p0

SSH框架的搭建


本文章采用Eclipse 软件搭建ssh框架,《图书信息管理系统》的后台,适合初学者。

如图:ssh015_dbcp_c3p0 第15次改良,

实现:dbcp(较快,但是不稳定,不时会报错)和

          c3p0(稳定,但是速度较慢)两个数据库连接池互换

使用的软件:Eclipse,

编程:jsp , java , javaweb , xml , ssh ,




     

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;}@Overridepublic 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;}@Overridepublic 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_001default.jsp


struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2/*

contextConfigLocation

classpath:applicationContext.xmlorg.springframework.web.context.ContextLoaderListener

5.11 

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

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


页面 信息显示:



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





推荐阅读
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
author-avatar
手机用户2602904645
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有