前排提示:
RFID标签和读卡器如上图
/*-------------------------------------【开始】进度管理-----------------------------------------------*/
由于预期进度比较快(其实也没那么难),所以JAVA GUI这块没有去学习和实践。
下面是开发日志:
09.23 软件需求说明书完成。数据库设计、数据流图、UML、开题PPT。
09.24 演示静态网站完成。介绍软件开发工具。
开题报告
10.04 初步编写核心类。java本地程序核心功能--借、换、续借、查完成,采用文件系统存储数据。
10.05 SQL导入MySQL。进行SQL语句的初步应用。
10.07 Java初步连接MySQL。java本地程序与DBMS-MySQL进行数据交互,此时采用数据库进行数据存储。
10.11 数据库交互完成。借阅表、核心类参数修改、等待RFID参数传入。
10.20 JSP初步连接MySQL。JSP JDBC连接DBMS,可初步进行数据查询。
10.20 JSP按钮加入。与java核心类相关的按钮未实现。传统方式重载整个网页,未使用ajax。
10.21 远程连接云数据库。mysql workbench8.0CE 连接 阿里云ECS云DBMS-MySQL5.7。
10.22 Java/JSP JDBC连接数据库。本地程序,web项目 分别与 云数据库进行数据交互。
10.22 JSP打包发布至云服务器,通过域名可访问项目。不同jsp之间使用a标签跳转。只能查询借阅。
10.23 RFID模块win下可读写标签,java环境下无法读写。读写RFID标签的 TID码。
RFID中间件如何与系统高层-进行交互?需要在例程基础上进行二次开发。java io/网络
10.23 Java核心类加入JSP,本地程序上云,等待RFID模块完成。
10.23 系统前端界面开始编辑。
10.24 读写器java api开始适配本地环境。RXTX开源串口jar
10.25 RFID模块java环境下可读标签。基于Java 的RFID中间件开始设计。
10.25 Java中间件成功读出TID码。从api找相应函数--串口连接--设置波特率--while循环读整个TID--读取功能代码段从java
demo中找。
10.26 Java--TCP通信测试成功,可传字符串。
10.26 本地JAVA系统完成。刷标签识别userID以及bookID,之后四个功能运行无误,使用云数据库。
11.10 JSP核心类编写。JAVA核心类可以在JSP的SRC中直接进行编辑与调试。实际上可以直接开始写JSP。
11.11 JSP修改完成,等待与RFID中间件进行TCP通信。
11.11 基于Java的RFID中间件完成。集成读卡、信息识别、Tcp通信功能。
11.11 C/S图书借阅管理系统完成。TcpServer类加入服务器端JSP。
11.11 B/S图书借阅管理系统完成。点击按钮后不会出现提示信息。
中期报告
11.16 隐式URL配置域名主机--用来介绍项目。
12.12 中间件发布为 exe可执行程序,可随便移植(在装有串口驱动的计算机上),后期会加入端口匹配。
12.13 中间件实现自动匹配COM口。
12.15 中间件实现半自动。每次操作需要重新运行中间件,省略了手动输入环节。
12.25 文档完善、结题报告完成 。
结题报告
/*-------------------------------------【结束】进度管理-----------------------------------------------*/
/*-------------------------------------【开始】个人介绍-----------------------------------------------*/
【前言】
写这篇文章的主要目的在于总结,开发项目时犄角旮旯的问题,只要是我遇到的,我都会写。一是方便自己,二来可以给大学低年级的同学开发项目作为参考。
本人大三物联网专业,大三上有一门专业课----RFID,所以需要开发一个JavaWeb项目。
首先我来描述一下这个项目。它是一个 基于云服务器B/S模式的Java Web RFID图书借阅管理系统。
怎么样,是不是挺长的。江湖上传言,如果你要考研,那么只需炮制一个 图书管理系统,是的,我要考研。
来说一下我的情况吧。
大三物联网(大一在社科学习)转专业后课多的一批。至今不知道电路怎么焊接,对于硬件的课程知识混混学分。
我们专业学的很杂,电路,单片机嵌入式,通信,信号处理等等。
至于软件方面,大学听过一句话,“自学永远比不过科班”,这句话对大多数人都有效,是的,我也承认。
其实对于软件我一直是在自学的,贴图为证!
大二的时候考了一个软件设计师,这个学期想直接考架构师,但是由于知识的局限,没有项目经验,论文是写不出的,所以这学期考了 网络工程师。
以此证明我虽然比不上同年级软件科班,但是至少还是有一点基础的,所谓的一份辛劳一份才,比起没学过编程的,我自认为还是强一点。
但是要做这个——基于云服务器B/S模式的Java Web RFID借阅管理系统,我觉得我有巨量的知识等待去学习、应用和总结。
那么从今天起,到2018.12.31,我将把自己学习的经验附上,供大家来参考。
欢迎读者朋友对文中的问题进行指正,在下将感激不尽。
/*-------------------------------------【结束】个人介绍-----------------------------------------------*/
/*-------------------------------------【开始】项目名称-----------------------------------------------*/
【关于 项目名称】
基于云服务器B/S模式的Java Web RFID图书借阅管理系统
我来简单解释一下,RFID图书借阅管理系统,可能大多数学校都有,你刷卡、放书、借书的那个机器,对!就是那个!
Java Web,我用JSP来写这个项目,那显然是B/S模式,毕竟javaGUI我也不会,而且巨丑。
基于云服务器,本人在阿里云有一台ECS,可以作为服务器,那么我做的系统自然是一个分布式的系统。
那么这个项目涉及到了什么?
JAVA JSP MySQL 前端那一堆 RFID这些仅仅是技术层面。
我们还需要对系统进行分析,系统的架构是什么?功能是什么?开发的过程需要注意些什么?用什么开发工具?作为初学者该先学什么?数据库如何设计才能高效?系统的数据流?如何对系统进行建模?等等等等。
当然我从开发的过程中是自创了一些小技巧的。
我将逐一按照我自己的学习与开发的顺序,来复现遇到的问题,以及给出解决方案。
【关于 JAVA】
因为是基于JSP的项目,所以需要比较好的Java基础。
java面向过程、面向对象、继承、多态、抽象、网络、数据库、异常。
面向对象最为核心的部分,其实我在2017.11月,2018.5月的软考初级、中级考试的最后一道选做题中已有涉猎。
只不过当时,只是想着去做题,并没有用想着去用代码实现。而且我当时考试其实都是用C++来写的,毕竟C++和Java还是有一些不同,但好在,面向对象的思想我了解到了,这也为后来的java学习打下了一些基础。最起码,我了解到了public 和 private。
我在学习java的时候,说起来很是惭愧。并没有看什么所谓的《java从入门到精通》之类的书籍,而是......大二上学期的某一天看到促销网在卖java编程的书,不到40块钱2本书上下册,当时也没想多少,想着多学一些总是好的,拆掉快递包装后,它们就被我放在书柜里吃灰了,知道大二短学期结束以后,我才翻开它们,开始了解java。
刚开始学习java,总不可能用诸如vs code之类的编辑器来打代码,所以理所当然的接触到了号称宇宙第一IDE之一之称的eclipse。开源、免费、CSDN有大量教学,这些对于一个初学者来说,足够了。
接触过一些IDE,VS,eclipse,keil uv,quartus等等,终于发现要开始编程,总要去按照 项目--文件 的思想来进行下去。对应到eclipse的话,就是 新建项目-新建包-新建类。当然这只是针对于一个最简单的java程序来说。
【关于 云服务器】
至少我认为对于学生来说,一台云服务器还是要比一块STM32开发板实惠得多的。
云服务器,选择了阿里云的ECS,1M带宽、40G硬盘,足够用来学习了。
我还是认为云服务器最简单粗暴的做法就是去挂一个网页,所以:
其实就是教你怎么去发布一个静态网站。拿到这个证书,我学会了利用基于centos7系统的apache发布一个静态的网页。
当然,这门课还教如何在阿里云取得域名以及如何去备案。
最后的结果就是,我可以利用自己的域名去访问自己的网页了。
【关于B/S模式】
B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器(Browser英 ['braʊzə]美 ['braʊzɚ]),如Netscape Navigator或Internet Explorer,服务器安装SQL Server、Oracle、MYSQL等数据库。浏览器通过Web Server 同数据库进行数据交互。
以上这段,节选自百度百科,大家了解以下就好。
采用B/S模式,那么云服务器的方便性就可以体现出来,远程网络管理,而由于借阅图书需要刷卡,所以,我们需要RFID中间件。关于RFID中间件会在以后提到。
【关于RFID】
RFID这门课程,是我们学校物联网工程专业大三的专业必修课。
关于RFID是什么?下面有请百度百科:https://baike.baidu.com/item/%E5%B0%84%E9%A2%91%E8%AF%86%E5%88%AB%E6%8A%80%E6%9C%AF/9524139?fr=aladdin
百度上所说的虽然没有书籍上讲的完整,但是对于一个没有接触过RFID的人来说,足够去了解RFID的一些基本知识了。
【关于RFID读写器/标签】
读写器和标签是 恺乐的。读写器淘宝价格299,标签就要便宜两个数量级,大概1块。当然299的读写器是课程需要,学校统一购买,用完后需要归还,标签可以自己留作纪念。
好的,文章到此处呢,就把题目讲完了
题目是 --- 基于云服务器 B/S模式 JavaWeb RFID图书借阅管理系统
/*-------------------------------------【结束】项目名称-----------------------------------------------*/
/*-------------------------------------【开始】概要设计-----------------------------------------------*/
【数据流图】
【数据库设计】
use library;
drop table if exists book;
/*==============================================================*/
/* Table: BOOK */
/*==============================================================*/
create table book
(
bookID varchar(255),
bookNumber varchar(255),
bookName varchar(255),
borrowDate int,
returnDate int,
bookState varchar(255),
userID varchar(255),
primary key (bookID)
);
INSERT INTO book VALUES("10001", "索书号", "《MySQL必知必会》", 88888888, 88888888, "未借出","8888888888888");
use library;
drop table if exists user;
/*==============================================================*/
/* Table: USER */
/*==============================================================*/
create table user
(
userID varchar(255),
userName varchar(255),
totalBorrowNumber int,
nowBorrowNumber int,
primary key (userID)
);
insert into user VALUES('2016210904018','李道瑞',10,0);
【UML】
【系统架构】
/*-------------------------------------【结束】概要设计-----------------------------------------------*/
/*-------------------------------------【开始】问题归纳-----------------------------------------------*/
问题1:Eclipse的安装与配置
去下载java的JRE与JDK,之后安装Eclipse。现在安装Eclipse不必去像某些书一样专门配置环境变量。
问题2:MySQL的安装与配置
直接官网下载。附带默认DBMS-MySQL workbenchCE。
打开MySQL workbench--新建本地/网络连接--worbench里新建数据库--数据库中新建db表文件
问题3:java项目连接MySQL
项目右击-build path--add user library--添加MySQL java连接器 connector J(去programX86去找)--导入 mysql-connector-java-8.0.12.jar(诸如此样式)。
导入连接器jar包后,即可在java文件中进行操作。
问题4:tomcat安装
官网下载(我用的是tomcat8.5)后,傻瓜式安装。注意不要选错版本,win64或win32,这里的版本最好要和你的mysql、eclipse、jre、jdk版本位数都一致,要64位都选64位,以后项目相关的软件也一样,避免出现不必要的时间与精力浪费。
问题5:Eclipse配置tomcat
build path---config---add library---sever runtime---选择对应的tomcat版本。
问题6:新版Eclipse配置web
新版 eclipse安装 tomcat(web支持)
Spring Boot 很火--所以新版eclipse不支持tomcat,按照下面博客进行操作。
http://www.cnblogs.com/herd/p/9548592.html
问题7:云服务器配置
首先,学习阿里云静态网站建设(阿里云大学)--之后进行操作--你将:拥有一台阿里云ECS云服务器,拥有公网域名并进行备案、学会使用阿里云域名解析、学会利用appache发布静态网页、学会利用putty连接云服务器、学会使用filezilla上传文件至云服务器。(课程大概50块,学生认证30块)。
但是本项目所要搭建的是动态网页,所以更换云服务器镜像为:java运行环境(jdk8 tmcat8 mysql5.4)。具体更换镜像的方法请百度或在阿里云网站内查询解决方案。
问题8:数据库上云
云服务器 命令行配置 修改密码 并使得mysql可以被远程连接
阿里云ECS控制台 安全组 开放 出入3306端口
以上两步详见:https://market.aliyun.com/products/53400005/cmjj014493.html
之后使用 mysql-workbenchCE进行远程连接(输入IP、端口、数据库、mysql用户/密码)
问题9:本地java项目连接云数据库
linux下(云服务器下),mysql连接器放置到 tomcat 的 lib 目录下。
使用mysql-workbenchCE连接云数据库,并进行相关操作-创建数据库、导入表等等。
之后在本地java项目进行数据库的连接。(IP变服务器公网IP、端口号为之前在安全组规则设置的端口3306)
问题10:Eclipse新建jsp项目
new - --project----dynamic web project
之后src存放java文件,webcontent存放 网页设计相关文件(jsp、html、css、jpg、等等)
问题11:解决8080端口冲突
1.回到桌面,快捷键win+R。弹出"运行"窗口,输入cmd
2.然后在命令行中输入 “netstat -ano”回车
3.找到占用 8080 端口号对应的PID
4.打开任务管理器,在PID列中找到占用 8080的接口程序结束任务---强行终止 已知PID 的进程
问题12:jsp项目部署云端
jsp进行云端适配后打包为 war,filezilla与云服务器进行sftp连接,将war上传到 tomcat的webapp。
重启tomcat,war包将自动解压,之后可以通过 域名/项目名 访问项目,如果war包的名称为ROOT,
则输入域名可以直接访问ROOT项目。
问题14:RFID读卡
详细阅读java例程,提取关键代码。
读卡流程:开计算机和设备波特率---连接---读卡----读卡处理(需要多读几次才可以读取正确的TID码)。
问题15:RFID中间件解决方案
中间件对下使用API接口调用串口驱动与RFID读卡器进行串口通信。
中间件自身对读取到的TID码进行信息识别--比如根据读取到的TID码判别读取的标签是学生卡还是书籍卡。
信息识别,可以使用数据库系统,也可以使用文件系统。
中间件对上与RFID系统高层(云服务器)进行 tcp通信。
问题16:RFID中间件 发布为 exe可执行文件
参考:https://blog.csdn.net/qq_37400312/article/details/82014708
需要软件 exe4j 支持。
/*-------------------------------------【结束】问题归纳-----------------------------------------------*/
/*-------------------------------------【开始】软件改进-----------------------------------------------*/
改进1:交互性
就本系统实现与图书馆一样的交互,基于本系统的开发模式,需要应用java多线程/并发技术。
需要在tcp通信的基础上,用tcp来模拟更高层的“TCP”通信,来进行软件交互优化。
由于时间有限,首要任务是功能的实现,所以复用了测试好的代码,其交互性与预期有出入。
改进2:并发性
B/S架构的并发需要 进行深入的 软件功能设计。
C/S架构的并发需要 进行数据库的规范与深入设计。
改进3:开发规范
云端开发。
开发软件版本控制。
团队合作
改进4:设计模式/开发架构
java设计模式---理论的应用与实践。
开发架构---先进技术带来的效率提升,更加规范。对于不同规模的软件系统,选择合适的开发架构
改进5:抽象
图书属于物品的一种。
本系统-图书借阅管理系统(基于RFID),可以抽象为:物品借阅管理系统(基于RFID)
改进6:开放
使用github作为代码仓库,需要熟悉git相关操作,以及拥有一定的英语能力,不能依靠插件翻译。
/*-------------------------------------【结束】软件改进-----------------------------------------------*/
/*-------------------------------------【开始】项目总结-----------------------------------------------*/
1、java基本语法、类的相关特性的学习。
2、利用阿里云 ECS 发布动态网站
3、简单 java TCP通信
4、简单的数据库建模、系统分析与设计
5、RFID相关知识学习,理论学习与 api 中的一些算法
/*-------------------------------------【结束】项目总结-----------------------------------------------*/