燃气表运行监管系统之计费管理的设计与实现开题报告
全文总字数:10635字
1. 研究目的与意义(文献综述)
当前时代仍处于信息高速发展的时代,只是和信息时代起初不同的是,信息高速发展带给人们的不仅只有生活上的便利,更是通过互联网等信息技术,让科技走进了每一个人的日常生活,让每一个老百姓都能体会到科技为人们带来生活水平的提升。越来越多的生活服务与各种各样的企业业务可以通过互联网进行高效便捷的办理,这一方面提升了这些业务的办理速度和便捷度,使人们足不出户便可以办理各种生活所需的业务,另一方面也加速了这些互联网应用的开发技术更新迭代向着开发人员快捷高效、使用用户简单方便的目标不断升级优化。那么在技术日趋成熟和优质的时代,如何将技术的积累变成能够实实在在为人民大众生活做出贡献的实际产物就成为了学习开发的人员一个极具挑战性的问题。而本次毕业设计,就是一个将技术变为现实的一个过程。
在此过程中,通过阅读种种web应用开发技术的最新版本的参考手册与开发指南,不难发现如今web应用开发技术的发展现状。首先是java语言,自1996年由sun公司发布第一个开发工具包到2019年发布的javase12,每一次语言的更新都带来颠覆性的改变,由于其良好的面向对象语言风格并提供了大量的外部接口使得java语言已经发展成为一个高效的开发平台。其次是开发工具intellij idea,作为一个在代码自动提示、代码分析等方面的具有很好的功能的编译器,在最近的2019年的更新中,整体上提供重大的性能和可用性改进,细节上,增强了vcs工作流以及增加了对微服务框架,mongodb等的支持。对于数据库管理系统mysql在最新版本8.0中,改变了之前版本字典数据存储在元数据文件和非事务表中的做法,合并了一个事务性数据字典,用于存储有关数据对象的信息。同时atomic ddl(原子数据定义语句)将数据字典更新,存储引擎操作和与ddl操作相关联的二进制日志写入操作组合到单个原子事务中。整体java平台下web应用开发涉及前端与后端,前端技术日新月异都在以高效便捷通用为总体目标,后端spring框架仍是java最主流框架之一,在最新的第五代版本中,spring框架在新有的注释驱动的编程模型旁引入了一个新的功能性web框架-arjen poutsma。这个新框架以handlerfunction为起点,实质是一个function<request,response>,其中request和response是新定义的不可变接口,他们为基础的http消息提供jdk-8友好的dsl。
基于java平台下的web开发技术更新迭代愈加高效便捷,为了生活便捷性需求,以技术为基石,仰望生活,便需要开发完善本次毕业设计《燃气表运行监管系统之计费管理的设计与实现》。
2. 研究的基本内容与方案
(1)主题框架采用spring作为开发框架。spring web 框架是一个设计良好的 web mvc 框架,遵循着最初设计spring的意愿—简单,给开发者带来了相当程度的效率提升,其最显著的特点之一ioc就是便捷性提高的一大功臣。同时,aop思想也使得代码耦合度降低,极大地减少了代码冗余。因此选用spring作为主体框架。
(2)后台数据库采用mysql进行数据管理,并且使用mybaits作为持久层的框架。一方面使用mysql基于它非常优秀的存储引擎innodb,是的存储结构化数据非常便捷并且数据操作十分高效,另一方面,在最新的mysql更新中支持了mongodb这一非关系型数据库,可以为web应用提供高扩展的高性能数据解决方案。此外,mybatis作为ssm框架中重要的一环,其配置-映射这一过程使得数据操作不再那么冗杂,为持久层的稳定性提供了可靠的保障。
(3)前端则采用应用广泛的html css javascript json jquery ligerui的组合完成。javascript作为优秀的前端页面脚本语言可以是开发人员很完美地完成前端页面的各种操作,甚至采用ajax实现前端与后台的异步刷新,同时选择jquery作为js框架,使开发过程简洁化,并对外提供良好清晰的多功能接口。而json(js对象简谱)是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来储存数据。其本质就是一个用来表示js对象信息的字符串,正是这样的简单清晰的层次结构,让人易于阅读理解,也让机器易于解析和生成,提高网络传输效率。
3. 研究计划与安排
进度安排:整体时间规划按照毕业设计完成任务时间节点来进行安排
需求分析(5天):根据毕业设计题目要求,设计计费管理系统的功能模块,并将这些模块细分成小的模块,由功能确定部分相关界面。
可行性分析(1天):根据现有技术积累,对所列出的功能进行可行性分析,本次可行性分析由于不涉及商用,所以仅考虑时间成本,剔除不可行的功能。
4. 参考文献(12篇以上)
[1] SpringFramework. Spring Framework开发参考手册[EB/OL]. http://shouce.jb51.net/spring/,2016-01-02
--spring的web框架作为一个良好设计的MVC框架,以其独有六个模块—core提供以依赖注入为主要例子的IoC(控制反转)特性,通过工厂模式降低程序性单例模式的需要,做到从程序逻辑中分离出依赖关系与配置,而新版本中context构建于core包的基础上,提供给开发人员用框架风格访问对象的方式,其中ApplicationContext完全由BeanFactory拓展而来,功能进一步增强,使得元数据初始化与配置首选可用ApplicationContext接口;DAO提供JDBC抽象层,简化了冗长的JDBC代码,并对所有POJOs(plain old Java objects)都适用,良好完成了MVC架构下model的实现;ORM(对象/关系映射)可以混合使用所有的spring提供的特性进行“对象/关系”映射并整合spring功能;AOP提供面向切面的编码实现,减弱代码的功能耦合,并可以利用source-level的元数据功能,将各种信息合并到代码中;web模块提供面向web的基本功能和面向web的应用上下文,拥有针对web开发的集成特性;MVC封装包则提供了MVC框架的实现,并在传统基础上提供一种清晰的分离模型;以极其优秀的编程性能称为目前较为主流的基于Java语言的框架。
[2] 罗时飞. 精通Spring—深入Java EE开发核心技术[M]. 海淀区万寿路288号华信大厦:电子工业出版社, 2008.15-92.
--spring是一个有机的整体,借助于三个方面使得构建轻量级的J2EE架构成为可能。Spring IoC,借助于依赖注入设计模式,可以让开发人员不去分神于对象自身的生命周期及其关系,一方面是应用中对象关系更加清晰,另一方面也使得对象可控。Spring AOP,借助于Spring实现的拦截器,通过它,开发人员能够以声明方式、基于元数据访问使用诸如安全性事务、事务服务等企业级服务,并且合理的补充了Spring IoC容器。Spring抽象服务,借助于各种J2EE API抽象,使得开发人员对J2EE技术的使用趋于一致,而不用去关心具体使用的API,从而使应用代码大大减少,贯彻“更少代码、更少bug”的原则。
[3] SpringFramework. Spring Security Guides[EB/OL].http://docs.spring.io/spring-security/site/docs/current/guides/html5/,2016-01-02.
--由于JavaEE的Servlet规范或EJB规范中的安全功能缺乏典型企业应用场景所需的深度,同时这些规范在war或ear级别无法移植,此时就需要Spring Security解决此类问题。Spring Security在两个方面实现,一个是认证,即建立一个声明的主体的过程,于此,Spring Security提供多种认证模式——由第三方提供和自己本身的一组认证功能;另一个是授权功能,集中于三个方面,授权web请求、授权方法是否可以被调用和授权访问单个域对象的实例。在项目中,Spring Security被分割成单独的jar,以此来更清楚地分隔不用功能区域和第三方依赖,其中包括:核心模块 - spring-security-core.jar、远程调用 - spring-security-remoting.jar、网页 -spring-security-web.jar、配置 - spring-security-config.jar、LDAP - spring-security-ldap.jar、ACL访问控制表 - spring-security-acl.jar、CAS -spring-security-cas.jar、OpenID -spring-security-openid.jar、Test -spring-security-test.jar
[4] mybatis. mybatis - Mybatis 3 | 简介[EB/OL]. http://mybatis.org/mybatis-3/zh/index.html,2016-01-02.
-- MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。其工作流程:(1)读取MyBatis的配置文件。mybatis-config.xml为MyBatis的全局配置文件,用于配置数据库连接信息。(2)加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在MyBatis配置文件mybatis-config.xml中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。(3)构造会话工厂。通过MyBatis的环境配置信息构建会话工厂SqlSessionFactory。(4)创建会话对象。由会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。(5)Executor执行器。MyBatis底层定义了一个Executor接口来操作数据库,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。(6)MappedStatement对象。在Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。(7)输入参数映射。输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输入参数映射过程类似于JDBC对preparedStatement对象设置参数的过程。(8)输出结果映射。输出结果类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输出结果映射过程类似于JDBC对结果集的解析过程。
[5]Oracle.Jersey2.22.1User Guide[EB/OL].https://jersey.java.net/documentation/latest/index.html, 2016-01-02.
Jersey是一个开源的RESTful框架,实现了JAX-RS规范,并将其拓展,提供更多的特性和工具。在满足REST(Representational State Transfer)这种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML或JSON格式定义的约束条件和原则下,不仅实现了RESTful的5种特点:每个资源都使用 URI (Universal Resource Identifier) 得到一个唯一的地址;使用的是标准的 HTTP 方法,比如 GET、PUT、POST 和 DELETE;通过操作资源的表现形式来操作资源;资源的表现形式是XML或者HTML;客户端和服务器之间的交互在请求之间是无状态的,从客户端到服务器的每个请求都必须包含理解请求所必需的信息。更在此基础上进行简洁化处理,例如对于GET,DELETE的请求式服务,只需给出一个URI即可完成操作。
[6] W3CSchool. JSON 教程[EB/OL]. http://www.w3school.com.cn/json/index.asp, 2016-01-02.
--JSON(JavaScript Object Notation)是一种类似于XML的存储和交换文本信息的语法,相较于XML,更小更快更易解析,并且它具有自我描述性,更易理解。同时JSON文本格式在语法上与创建 JavaScript 对象的代码相同。由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。JSON语法是JavaScript对象表示语法的子集,其文件类型是“.json”,其文本的MINE类型是“application/json”。JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。
[7]W3CSchool. HTML教程[EB/OL].http://www.w3school.com.cn/html/, 2016-01-02.
--HTML(Hyper Text Markup Language超文本标记语言)是一种使用一套标记标签来描述网页的标记语言,并不是传统意义上的编程语言。用HTML语言撰写的文档就是web浏览器可以读取的HTML文档,浏览器会用网页的形式显示文档中的各种HTML标签和纯文本,这个读取过程类似于根据标签来解释所打开的文档。因为各个标签在浏览器读取解释时并不会将标签显示出来,而是根据标签名称与其属性显示各个标签下的文本及超文本的内容。HTML提供了种类繁多、功能强大的标签(标签都是成组出现),诸如
[8]W3CSchool. AJAX 教程[EB/OL].http://www.w3school.com.cn/ajax/, 2016-01-02.
--AJAX(Asynchronous JavaScript and XML异步的JavaScript和XML)不是一种新的编程语言,而实在现有使用标准下的新方法。这种方法可以在不重新加载整个页面的情况下与服务器交换数据并更新部分网页,可用于创建快速动态网页。AJAX基础在于对XMLHttpRequest对象的使用,此对象用于后台与服务器交换数据。核心过程为:1、创建XMLHttpRequest对象:variable =new XMLHttpRequest();2、AJAX向服务器发送请求,使用XHR对象的open()和send()方法,发送的请求可以是GET和POST:xmlhttp.open(”POST”,”demo_post.asp”,”true”);xmlhttp.send();3、服务器响应,使用XHR对象的responseText或responseXML属性,一个返回字符串形式的相应,responseXML则返回XML响应:document.getElementById(“myDiv”).innerHTML=xmlhttp.resronseText;大致以次三个步骤来在不重新加载整个页面的情况下完成网页的部分刷新。不仅如此,随着技术迭代,AJAX甚至可以通过JavaScript代码实现与XML文件的交互式通信。
[9]MySQL.MySQL::MySQL5.7ReferenceManual[EB/OL].http://dev.mysql.com/doc/refman/5.7/en/,2016-01-02.
--MySQL是由Oracle公司开发、分发和支持的目前市面最流行的开源SQL数据库管理系统,他作为一个关系型数据库使用SQL(结构化查询语言)来在数据库系统中获取所需数据,并且根据不同的编程环境可以采取不同的查询方法:一是直接使用SQL语句,二是将SQL语句嵌入到另一种语言编写的代码中。以此来实现对数据库的各种增insert删delete改update查select操作。MySQL特点包括:使用独立模块的多层服务器设计;设计为使用内核线程完全多线程;提供事务性(InnoDB MySQL默认存储引擎)和非事务性存储引擎(MyISAM,使用其索引压缩非常快的B树磁盘表);使用非常快速的基于线程的内存分配系统;使用优化的嵌套环联接执行非常快速的联接;实现内存中的哈希表。用作临时表;使用高度优化的类库来实现SQL函数,以至于查询初始化后根本没有内存分配等等优点。
[10]姜承尧. MySQL技术内幕-InnoDB存储引擎[M]. 北京市西城区百万庄大街22号:机械工业出版社, 2013. 1-61.
InnoDB存储引擎是MySQL数据库系统默认的能够提供事务支持的存储引擎。总的来讲,InnoDB基于磁盘的存储引擎,将记录按照页的方式管理,并通过内存来弥补磁盘速度较慢对数据库性能的影响。同时,对于数据库中页的修改操作,首先会修改在缓冲池中的页,然后以一定频率刷新到磁盘(innodb_buffer_pool_size 设置缓冲池大小;innodb_buffer_pool_instance 设置缓冲池实例数量)。InnoDB主要包括InnoDb存储引擎文件(重做日志文件、表空间文件)、InnoDB表(索引组织表IOT、InnoDB逻辑存储结构、约束、分区)、InnoDB事务(redo log、undolog、隔离级别)、InnoDB索引与算法(哈希索引、B 树索引、全文索引、全文检索)、InnoDB锁(行政锁、表级别锁、一致性非锁定杜、自增长锁,其算法主要有record lock记录锁、gap lock 间隙锁、next-key lock)。
[11]霍多罗夫, (美), 迪洛尔夫. MongoDB权威指南[M]. 北京市丰台区成寿寺路11号:人民邮电出版社, 2011.1-119.
--MongoDB是一个基于分布式文件存储的数据库,可以为web应用提供可扩展的高性能数据存储解决方案。它是一个介于关系数据库和非关系数据库之间的产品,可以存储复杂数据类型的同时也支持强大的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能并支持建立索引。MongoDB采用面向集合存储,易储存类型的数据,而所谓的面向集合(Collection-Oriented),即为数据被分组存储在数据集种,成为一个集合。每个集合在数据库中有唯一的标识名,并包含无限数目的文档(MongDB中数据的单位)。这个概念类似于RDBMS(一种关系型数据库)中的表,不同的是它不需要定义任何模式。MongoDB另一大特点就是模式自由,这意味着存储在MongoDB数据库中的文件,我们不需要知道他的任何结构定义,这使得他完全可以把不同结构的文件存储在同一数据库中。
[12]易百网. Redis快速入门[EB/OL].http://www.yiibai.com/redis/redis_quick_guide.html, 2016-01-02.
--Redis(Remote Dictionary Server 远程字典服务)是一个开源的支持网络、可基于内存也可持久化的日志型、Key-Value数据库,并提供多种语言的API。首先,redis使用两种文件格式:全量数据(把内存中数据写入磁盘,便于下次读取文件进行加载)和增量请求(把内存中的数据序列化为操作请求,用于读取文件得到数据)。Redia存储则分为内存存储、磁盘存储和log文件三部分。其可存储的数据结构包括string(一个key对应一个value)、hash、list(双向链表结构,可以获取一个范围的所有值)、set(一个集合,key为集合名字)及zset(排序集合,在set基础上增加了顺序属性),并可以在这些数据类型上定义原子操作。Redis还是一个多实用工具,可以用于多种用例(缓存和消息队列),应用程序中的任何短期数据(web应用程序中的绘画,网页命中次数)。
[13]Apache, Mina. User Guide — Apache MINA[EB/OL].https://mina.apache.org/mina-project/userguide/user-guide-toc.html, 2016-01-02.
--ApacheMina是一个能够帮助开发人员开发高性能和高伸缩性网络应用程序的框架,通过Java NIO(不同于BIO依赖于阻塞模式下使用的普通套接字,NIO是非阻止IO)技术基于TCP/IP和UDP/IP协议提供了抽象的、事件驱动的、异步的API。Mina虽然简单但仍提供了全功能的网络应用框架,其中包括:为不同传输类型提供统一的API(通过Java NIO提供TCP/IP和UDP/IP支持、通过RXTX提供串口通信RS232、In-VM管道通信、用户自行定义API),过滤器作为一个扩展特性,低级(使用字节缓存ByteBuffers)和高级(使用用户定义的消息对象和编码)的API,高度定制化线程模型(单线程、线程池和一个以上的线程池SEDA)、开箱即用的SSL TLS 使用Java5 SSLEngine支持StartTLS、过载屏蔽和流量控制、使用模拟对象的单元可测试性、JMX可管理性、与知名容器(Spring等)集成等功能。
[14]易百网. Maven教程[EB/OL].http://www.yiibai.com/maven/, 2016-01-02.
--Apache Maven是一个项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建、报告和文件,让开发人员工作更加轻松,同时创建报表,检查,构建和测试自动化设置。Maven通过本地资源库存储所有项目的依赖关系(插件jar和其他文件),默认为.m2目录文件夹。默认情况下,maven在依赖机制帮助下会自动从中央仓库下载所有项目所需的依赖关系。这种依赖机制也让依赖管理成为maven的核心特征。通常情况下,当一个库说A就依赖于其他库说B的情况下,另一个项目想用A,则该项目需要使用库中B。那么在maven帮助下以避免这样的要求来发现所有需要的库。Maven通过读取依赖项项目文件(pom.xml),找出他们的依赖。同时,我们只需要在每个项目POM中定义直接依赖关系,Maven就会自动处理其余部分。
[15]Apache, Tomcat. Apache Tomcat 8 (8.0.30) - Introduction[EB/OL].http://tomcat.apache.org/tomcat-8.0-doc/introduction.html, 2016-01-02.
--Tomcat创建web应用程序通用过程:1、一次性设置Ant(与web应用程序交互的特殊任务)和Tomcat进行开发,需要配置Ant定制任务并定义Tomcat用户;2、创建项目源代码目录(项目源目录在创建后于CSV存储库中定义),并自定义将要使用的build.xml和bulid.properties文件;3、编辑源代码和页面,要创建一个新文件,需要先转到相应目录创建文件,然后在CSV中注册它,测试成功后,将新文件提交到存储库;4、构建web应用程序,Ant工具将执行文件中默认的“编译”目标bulid.xml,该目标将编译成任何新的或更新的Java代码;5、测试web程序时需要将应用程序安装在Tomcat下,然后ant compile命令编译->ant install命令安装->测试程序(如需修改重复执行即可)->完成后删除应用程序;4、创建发布,测试完毕后即可在生产服务器上部署web应用程序的可发布版本,命令为ant all一最后一次重构所有内容->cvs tag创建此发行版的所有源文件创建标识符->ant dist创建WAR与JAR文件->dist使用tar或zip将目标打包。
课题毕业论文、开题报告、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。