基于Jsp和MySQL的数据统计系统

基于Jsp和MySQL的数据统计系统 1, 概述 1,1 开发背景 参照 Java 大作业的要求,需要实现一个面向自贸试验区领导机关的统计系统,实现以下功能:采集片区的数据信息(重点为企业注册登记信息)

本文包含相关资料包-----> 点击直达获取<-------

基于Jsp和MySQL的数据统计系统

1. 概述

1.1 开发背景

参照 Java 大作业的要求,需要实现一个面向自贸试验区领导机关的统计系统,实现以下功能:采集片区的数据信息(重点为企业注册登记信息),实现信息化报送;根据领导、上级机关等工作需求,对统计数据进行分析,自动生成相关统计报表和数据分析报告。

1.2 开发目标

根据上述的基本情况及大作业附件所附的“沿海某省数据统计表.xls”开发一个系统,使得该系统能满足数据统计分析的基本功能。

1.3 架构设计概要

本系统采用 B/S 架构实现。前端的页面通过后端模板生成,界面采用了 Bootstrap 框架与 JQuery 来设计。后端主要运用了 Java 语言,使用了Servlet、JSP 技术,数据库使用的是 MySQL,通过 Tomcat 实现Servlet 的部署与运行,后端引入了 JDBC 类库实现 Java 与 MySQL 服务器的通信,引入BCrypt 类库用作用户密码的 hash 与验证功能。

2. 需求分析

2.1 需求描述

根据项目成员的实际情况,本系统选择实现如下功能:账户登录、权限划分、数据录入、查询、打印功能,且项目主要使用 Java语言作为开发平台。本项目建设主要服务于沿海某省自贸办、自贸区管委会以及相关职能部门,主要服务对象及期望如下:

  • 沿海某省自贸办工作人员 :以管理员的身份进行系统管理,报表模板录入及生成分析报告

  • 三大自贸试验区片区管委会 :以二级管理员身份使用系统,为系统提供基础数据录入

  • 可以让 50个职能单位 提供数据或查看生成的报表文档

  • 系统运维人员 :保障系统稳定运行及安全

2.2 操作用例

2.3 功能的分析与划分

2.3.1 系统登录

  • 实现用户账号密码登录,由于账号是通过后台管理员添加和管理的,所以不需要有注册和密码重置功能

  • 用户通过账号所属的邮箱来作为用户名登录,登录后显示用户的名称,代表用户所属的部门

  • 登录过程中出错时应有对应的提示

2.3.2 用户管理

  • 需要实现的功能有:新建、删除用户、修改用户信息、输出站点的用户列表

  • 对于二级管理员需要保存其所在的片区信息,便于权限的划分

  • 只有管理员与运维人员的账户才有权限查看用户列表、操作用户相关的功能

2.3.3 基础数据录入和管理

  • 需要实现的功能:根据作业题附带 Excel 表格的内容,实现录入各片区各项指标当月的实际值、去年同期值、同比三项数据

  • 每个片区的二级管理员只能录入、修改、删除自己片区的数据,无权限修改其它片区的数据,职能单位无权操作数据,而管理员与运维人员则不受限制

  • 为了用户体验,同比可通过前两项数据自动生成

2.3.4 报表模板的录入

  • 需要实现的功能:指标数据的增删改查

  • 指标之间有层级关系,需要体现出来

  • 由于指标众多且灵活,所以需要有报表的指标的录入和管理功能

  • 只有管理员与运维人员才能增加、修改、删除指标数据

2.3.5 生成、查看、打印分析报告

  • 需要实现的功能:支持生成当月的统计表格供查看,并可以生成美观的可以通过浏 览器的打印功能直接打印出纸质版本报表的表格网页

  • 对于分类的指标,加入强调格式

  • 登录用户才能查看报告

3. 总体设计

3.1 模块分工

程序的基本功能和模块如下:

3.2 架构设计

系统采用 B/S 架构,系统与用户的交互通过HTML5/CSS/JavaScript在浏览器中实现,业务逻辑通过 Tomcat 服务器运行 Servlet 来实现,在实际部署中,可在多台服务器中启动 Tomcat,通过 Nginx 作为前端的反向代理服务器实现负载均衡,应对较大的访问量,在开发环境中,我们直接使用 Tomcat 来部署。

3.3 开发环境

  • 操作系统 :Windows 10、Ubuntu 16.04 LTS

  • IDE :IntelliJ IDEA2017.3.2 (Ultimate Edition)

  • JDK 版本 :1.8.0_144

  • 软件 :ApacheTomcat 9.0.2、MySQL5.7.20

3.4 接口设计

  • 前端与后端的通过 HTTP 协议通信

  • Servlet 程序通过 JDBC 类库与 MySQL 数据库交互

3.5 数据库设计

3.5.1 数据库实体关系图

3.5.2 数据表字段设计

用户表

基础数据表

数据表部分字段引用了指标模板表的字段,主要目的是防止因为后续可能指标的变化导致历史数据丢失指标的问题。

指标模板表

3.6 前后端程序设计

3.6.1 基本结构

经过多次开发与尝试以及不断地抽象,我们最终抽象出了一种类似 MVC 但又不完全是 MVC 的架构模式:

  • 通过 JSP 渲染网页模板以及一些内容展示的业务逻辑

  • 通过单独的 Servlet 来处理登录、写入等请求

  • 对于数据的实体抽象出了单独的类,命名为 model(后来得知这是JavaBeans)

  • 对于数据库操作,我们将其抽象出了一个“Proxy”代理层,将对每个数据表的访 问统一到了一个个类中实现(后来发现这在 Java 叫做DatabaseAccess Object)

3.6.2 文件目录结构

├── src │ └── report │ ├── database │ │ ├── DatabaseConnection.java │ │ └── DBHelperUtil.java │ ├── exception │ │ └──TipException.java │ ├── filter │ │ ├── RequireAdminFilter.java │ │ └── RequireLoginFilter.java │ ├── models │ │ ├── Data.java │ │ ├──Template.java │ │ └── User.java │ ├── proxy │ │ ├── BaseProxy.java │ │ ├── DataProxy.java │ │ ├──TemplateProxy.java │ │ └── UserProxy.java │ ├── servlets │ │ ├── DataAddServlet.java │ │ ├── LoginServlet.java │ │ ├── LogoutServlet.java │ │ ├──TemplateAddServlet.java │ │ └── UserAddServlet.java │ └── util │ ├──TableRow.java └── web └── Util.java ├── data_edit.jsp ├── data.jsp ├── data_new.jsp ├── data_print.jsp ├── data_report.jsp ├── error.jsp ├── index.jsp ├── login.jsp ├── template_add.jsp ├── template_edit.jsp ├── template.jsp ├── user_add.jsp ├── user_edit.jsp └── user.jsp

3.6.3 数据库操作的实现

在本项目中,数据库连接通过 report.database.DatabaseConnection 类来维护,这个类应用了单例模式,其中维护了数据库连接的所有信息,维护了一个静态变量 connection,和一个 getConnection 方法,当外部类调用它要获取数据库链接时,若 connection 已经创建,则会直接返回同一个数据连接对象,否则将会调用 JDBC 新建一个数据库连接,再将 connection返回。数据库操作通过 report.database.DBHelperUtil 实现, 在这个类中调用了 DatabaseConnection 来连接数据库,并封装了两个方法:执行 SQL 读取查询语句 executeQuery 和写入查询语句 executeUpdate,内部使用了SQL 语句预处理机制,有效防止 SQL注入问题。

3.6.4 数据操作对象(DAO)的实现

所有的数据操作对象均位于 report.proxy 包中,其中 BaseProxy 为基础类,其中定义 了 getDBInstance方法,调用此方法可以返回 DBHelperUtil 对象的实例。 report.proxy 包中的其它类均为基于BaseProxy 为数据表派生出的子类,在子类中可以通过调用 getDBInstance 方法得到数据库的操作对象,子类中为不同的操作定义了公有方法,在方法中可通过 executeQuery 和 executeUpdate 方法执行 SQL语句与数据库进行交互,并将结果以 List 或 Boolean的形式返回给业务逻辑层。

3.6.5 业务逻辑的处理

本项目的业务通过 Servlet 和在 JSP 直接查询来实现,所有读取的内容均写在了 JSP 中,写入相关的内容则通过位于 report.servlet 包中单独的 Servlet 类接收请求来处理,得益于数据查询层,需要查询的内容,直接引入相应数据表的 Proxy 类,执行操作就能得到结果。其中每个需要登录的页面都设置了 Tomcat 的 Filter 过滤器拦截为登录请求,登录时,程序会向请求的 session 设置 uid, role, area 等字段,通过 request 的 session 对象,判断 session中保存的用户 id 是否存在来确定是否登录。在有特殊权限需求的页面或Servlet 中, 通过role 的判断来确定用户是否有权限操作本页面的数据。其中在提交基础数据的逻辑中,设置了area 的判断,确保二级管理员只能操作本片区的数据。由于这次作业的业务较为简单,所以权限判断部分暂未抽象为一个权限过滤层,一定程度上造成了一部分冗余的代码。

3.6.6 安全性

从用户密码存储方面,项目中用户的密码采用了 BCrypt 哈希算法,它具有难以被离线破解的特点,可以很好地抵挡黑客试图通过暴力枚举的手段来实现密码破解。登录未加入验证码,有可能被脚本批量发请求攻击。并且系统的表单提交等操作未实现 csrf 保护,有被 csrf 攻击的风险。因此,未来项目还需要在这方面加强安全性。

3.6.7 数据报表的实现

本项目的目标是按照题目附带的 Excel 表格的格式输出报表,由于在数据库中,各个片区,各个指标的数据都是独立的,并不能直接将其整合起来。所以程序通过一个 HashMap,将所有需要显示的数据按照指标 ID 存入 HashMap 中,实现了对应数据行的分类,由于数据行中字段较为复杂,所以我们整合了一个负责表示行数据的类 report.util.TableRow。在 TableRow 中,数据表的前两列单位和合计部分,通过成员变量实现,具体到各个片区的数据,由于片区的个数可能是不定的,考虑到程序的扩展性,TableRow 类中具体片区的三个数据也整合到了一个 HashMap 中,这一个 HashMap 保存的是片区名字与具体片区 数据的对应关系。具体片区的三个数值这里也通过一个 HashMap 来存储,在数据存入的过程中还实现了对合计值的计算。最后通过遍历 HashMap 的方式输出了单元格的HTML。 至此,通过 HashMap 的嵌套以及数据类的运用,实现了报表的输出,并考虑到了未来片区的增减情况,效果如图:

为了满足打印的需要,所以程序另外提供了一个可打印版本 HTML 表格的生成功能, 这个 HTML 基本与显示的版本相同,不同的是这个HTML 去除了多余的元素和样式,并为 打印设置了纸张和排版的格式,效果如图。

3.6.8 前端的实现

项目前端页面由后端的 JSP模板执行生成,布局方面,主要通过 Bootstrap 框架实现, 本项目中主要用到了 Bootstrap 内置的导航条、下拉菜单组件,以及按钮样式,另外项目中加入了一些代码微调了表格的样式,使表格元素垂直居中,用户体验更为舒适,以下是一些展示截图:

网站首页

登录页面

数据列表页面

录入/编辑数据页

指标列表页

新增/编辑指标

用户列表

新建用户

无权限的情况

4. 部署方法

首先在 report.database.DatabaseConnection 中设置好 MySQL 账户和密码,导出项目的 war 包,配置好 Tomcat 服务器,运行打包好的 war 即可。 另外,需要初始化数据库表,新建一个名为 report 的数据库,导入程序的 initial.sql 文 件到数据库中即可。初始的邮箱为 admin@example.com 密码为 123456。

5. 参考文献

  • Java 教程 | 菜鸟教程 http://www.runoob.com/java/java-tutorial.html

  • JSP、servlet、SQL 三者之间的数据传递 http://java--hhf.iteye.com/blog/1973375

  • Ubuntu 16.04 Tomcat 8 安装指南 https://www.wolfcstech.com/2017/02/24/Install_Tomcat8_on_Ubuntu16.04/

  • Bootstrap 中文文档 http://v3.bootcss.com/

  • java 遍历 hashMap、hashSet、Hashtable http://www.cnblogs.com/nsw2018/p/5821361.html

  • Java bean 是个什么概念? - 知乎 https://www.zhihu.com/question/19773379

  • Java 设计模式之-值对象模式 - CSDN 博客 http://blog.csdn.net/x121850182/article/details/51489418

  • IntelliJ 2016.2 IDEA 中进行 Java Web 项目开发配置 https://segmentfault.com/a/1190000007088964

  • jeremyh/jBCrypt 密码哈希库 https://github.com/jeremyh/jBCrypt

参考文献

  • 基于B/S结构的新闻发布系统(吉林大学·郭蕊)
  • 基于J2EE的科技基础数据库系统的设计与实现(武汉理工大学·王茂林)
  • 基于J2EE的远程网络教育系统研究与实现(电子科技大学·陈南荪)
  • 人力资源管理系统设计(山东大学·郑重)
  • 基于MVC模式的物流信息管理系统设计与开发(电子科技大学·程泳)
  • 网络流量统计分析系统(吉林大学·石景龙)
  • 基于JSP的雄霸天下游戏网的后台操作系统的开发设计(电子科技大学·张璇)
  • 基于J2EE的远程网络教育系统研究与实现(电子科技大学·陈南荪)
  • 基于JSP的学生就业信息管理系统设计与实现(吉林大学·马骁)
  • 基于JSP的实验室项目管理系统的设计与实现(武汉理工大学·吕勇)
  • 思科亿网网上交易实现与安全研究(吉林大学·周威)
  • 基于JSP的测井资料网络查询系统的设计与实现(吉林大学·王东来)
  • 基于云计算模式的社会服务管理信息化平台项目设计与建设(吉林大学·杨刚)
  • 分布式统计信息基础数据库统计报表查询子系统的设计与实现(福州大学·曾瑾)
  • 物流货运平台的设计与实现(山东大学·任如坤)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码驿站 ,原文地址:https://bishedaima.com/yuanma/35395.html

相关推荐

发表回复

登录后才能评论