




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于SpringBoot的笔记平台设计摘要基于springboot的笔记平台设计和实现旨在通过web相关技术来实现云化记笔记、写日记、查看待办。实现手机和电脑等终端互联,摆脱单终端丢失导致内容丢失的痛点,提高笔记、日记等信息的留存率。另通过图表的形式统计笔记日记等情况,给用户提供直观的自身数据参考价值。平台设计采纳Javaweb为干流的开发框架,将springboot开发后端运用,vuejs前端框架开发前端应用,运用主流ui框架AntDesign,提高页面的开发效率,与此同时并有效的提高了界面的友好度;其中增加了rabbitMQ消息队列和redis缓存数据库相关技术这样做就是来保证数据安全的统一,运用了redis缓存高速读取的特点,提高响应的时间,增强用户体验感。在设计中,平台实现了记笔记、写日记、个人待办、天气概览、个人设置、个性签名等功能,另外在笔记功能中,提供了标签功能,可为笔记贴上笔记标签,系统可自动在最热的100个标签随机推荐三个标签以供选择。笔记平台的设计实现除为用户提供笔记功能外,还在笔记、日记和待办等数据内容的不断增加,为后续创建数据仓库和大数据的分析提供了有力的支持,在大数据时代,可以在用户的使用数据中分析出对用户更加有价值的参考数据,例如:用户在记录学习笔记时,还可以为用户推荐更有力的学习方向。关键词:前后端分离;Java;vue.js目录1.引言1.1课题研究的背景和意义 11.2课题设计主要内容 12.相关技术与开发2.1相关开发技术简介 22.2.1前端相关技术简介 22.2.2后端相关技术简介 32.2开发过程使用开发的工具简介 43.系统可行性需求分析3.1系统可行性以及优缺点 53.2需求分析 54.系统设计4.1MYSQL数据库设计 64.2REDIS缓存的引用 114.3系统设计 114.3.1系统设计结构图 114.3.2系统详细设计解析 115.系统实现5.1登录拦截器实现 125.2拦截不安全的请求方式 145.3NGINX代理的实现 155.4获取当前最热标签 165.5健康指数 175.6应用部署到云服务器上 206.系统功能测试6.1账户登录测试 216.2个人资料修改测试 226.3各项功能测试 237.结束语 29附录一:参考文献 30附录二:参考程序 31引言1.1课题研究背景和意义在这个经济快速发展的年代网络科学技术日益提高,在每日高强度的三点一线工作制度中,身体上压力越来越大的同时心理与大脑的压力也在逐步提高面对每天的工作的工作量而产生的压力,在处理中总是显得心有余而力不足。在课堂学习中几乎都都需要将笔和纸随时带在身边并将重点需要记录的东西记录下来甚至有的时候,笔记本和日记本总是容易被遗忘在不起眼的角落。在数据高速交互的信息时代,是否可以通过另一种形式来取代传统纸质的笔记本和日记本,这正是我此次课题研究的目的,相对于纸质笔记本的缺点不仅浪费了过多的树木还不环保而且容量还是有限的从而设计一款应用型网站日记本就有实际意义,其具备以下优点:安全性。若单纯为了保存和记录的话,在这个信息化时代已经有很多app是可以做到的,就像朋友圈可以记录生活,微博可以分享新鲜事。但是现在我个人认为保密和安全性才是最重要的。这个平台首先操作不是很复杂,界面作风简约。写东西的时候心情和灵感很重要,用手机和电脑来代替笔记本节省时间的同时也提高了工作效率。而且操作起来简单上手,给予用户直观体验,还设置了平台密码,既提供了方便又保证了安全性。永久保存。记载的内容能够永恒保留,不必担心丢失,并且日记列表是时间轴样式的,方便浏览和查阅。近几年已步入信息时代,我们已经逐渐把线下的活动转到线上可是即便这样,随时随地的不管是用手机还是用电脑都可以查找到我们之前所记录的东西。分类。分为待办,日记和学习笔记。各记所需,可以把不同的想记录的事情做到分类其次也方便了每次记录点不同。另外还设有天气预报这一栏记录当天心情如何的时候也可以同时查看天气,还提供了标签功能,可为笔记贴上笔记标签,系统可自动在最热的100个标签随机推荐三个标签以供选择。1.2课题设计主要内容本次课题设计的主要内容分为五个部分分别为控制台,待办事件,日记,学习中心,个人设置。控制台基本功能:控制台即为工作台,工作台中有你的账户名称个性职位及个性签名,工作台可以展示的内容为登陆的天数笔记的数目和日记的数目分别采用柱形图清晰地展现在眼前,在下方还有近几天的天气概况。待办事件基本功能:增加待办和删除都可以展示在控制台,但是待办唯一的缺点就是需要手动开始和结束,并且增加一次都需要刷新一下页面才可以展现出来。日记基本功能:每日记录日记以后均可在控制台看到柱状图的改变,日记中心也设有个性签名,而且一开始看到的就是标题和主题点击查看内容就可以看到日记的主要内容学习中心基本功能:学习中心可以记录学习笔记,学习笔记设有标签功能可为笔记贴上笔记标签,系统可自动在最热的100个标签随机推荐三个提供选择。个人设置基本功能:用户可以通过手机号注册来创建账号登录平台,基本设置里可以更改昵称身份和个性签名完善个人信息,安全设置可以更改密码。相关技术与开发工具2.1相关开发技术简介2.1.1前端相关技术简介HTML和CSS:可以创建WEB的最主要的技术就是HTML和CSS。HTML为各种设施提供页面的构造,为CSS提供(视觉和听觉的)规划。将图形和脚本一同,HTML和CSS是构建网页和
Web应用程序的根基。HTML是网页的本质,网页的本质是文本文件,它可以告诉浏览器应该怎样去现实文本的内容,并且它包含了一系列标签。HTML的编写唯一能够判断代码错误的位置和原因就是通过页面展示出来的效果和期望中的差距。通过CSS对页面排版和样式的控制,可以展现出更精美和炫彩的页面。是Web网站建设不可或缺的一部分。vue+axios:vue.js是一个用于创建用户界面的一种渐进式框架。这个框架与其他框架大有不同。旨在更好地组织与简化Web开发,Vue设计的最初理念是从最低端向上增量开发。它核心库里只需关注视图层,会与其它库亦或者和其他已有项目整合。Vue.js的目的就是将最简单化的API实现响应的数据绑定和组合的视图组件。这是vue和JavaScript的组别,vue可以当作是一个JavaScript库来使用,在vue中可以更快速简单的开发页面。并且在编译完成后会自动生成html+JavaScript内容。AntDesign前端ui框架:AntDesignforvue是当下比较流行的一款ui框架,由阿里巴巴团队维护。使用AntDesign框架可以快速开发出友好的界面,大大提高开发的效率,另外它丰富的ui组件有很好的交互效果,例如图表的展示和按钮的点击以及对话框的弹出和淡入。2.1.2后端相关技术简介Java-计算机编程语言:Java是对于对象的编程语言,吸取很多c++的优点,抛弃了c++中不容易吸收的一些概念,去之糟泊系之精华,比如多继承、指针的概念。因此强大的功能和容易操作就是Java独有的特征。同时,Java也是如今用于最广泛的开发语言,Java程序不但能够在Linux中运作起来,而且可以在window系统中运行。Java程序可以在Java的虚拟机中运行就是其可以横跨系统的因素。所以只要安置好Java运行所需要的环境就可以将写好的程序运行起来。Springboot开发框架:如今最主流的Javaweb开发框架就是SpringBoot了,运用SpringBoot框架能够不需要安装tomact(中间件),在它内部的tomcat以及servlet容器是可以单独完成运行。其中在使用springboot时遵循默认大于配置。可以独立创建Spring的应用程序还可以快速的搭建开发环境,是快速开发的首选框架。Springboot框架中其实还有两个很重要的策略一是开箱即用和约定优于配置。另一个就是约定优于配置。Redis缓存数据库:数据库在一般情况下是将数据储存在硬盘当中,内存的运行速度远大于读取。所以在高度运行的情况下,传统数据库往往就会显得非常脆弱,卡顿与此同时就会导致系统崩盘。能解决这个问题的根本就是——用c语言编写的,可以支持网络的Redis。Redis单线程形式的缓存数据库。Redis将数据存储在内存中,性能超高。将redis用作存放高热点查询的数据,很明显的将MySQL地压力得以降低。以便于提升访问效率。Nginx负载均衡:在一般单体结构中存在许多缺点。举个例子:没有负载均衡,就没有没有nginx假如有一个人你要做100件事,你1秒只能做完10件事,这样你就要10秒才能做完,有nginx他就可以把这100件事分成10份给10个你去做1秒就做完,相当于节省时间只是增加人力成本。传统的系统就有弊端例如:系统承载量肯定是一个固定的数值,没办法承载过多的访问量,当用户并发数量达到极限,将没有办法正常的提供服务导致了系统崩溃[10]。因此,需要多个服务器主机可以来共同提供服务。2.2开发过程使用开发的工具简介IntelliJIDEA:IntelliJIDEA简称IDEA,在行业内一度任其为是最好的java开发工具之一,之所以有着最强的称号是因为它具有智能代码助手、代码自动提示、重构、javaEE支持、Ant、JUnit、CVS整合、代码审查、创新的GUI设计等优点。通过这个编辑器能够以最快的速度来开发代码并且代码在提示功能这一块是比较优于其他工具的。在编写代码的过程中,无需将所有的代码下下来,每次只需要将化简后的拼写甚至单单一个开头字母,系统就会提供出完整的代码。Xshell:Xshell是在开发过程中,不用近程到主机就可以连接Linux,可以通过Xshell登录到远程开发机,将代码解压到开发机上,从而达到目的,连接成功后,putty提供了Linux主机的终端界面,可以在终端中控制Linux主机。同时,安装redis以及jdk、MySQL和nginx都需要通过Xshell来控制终端完成。Nginx:Nginx是一款超级轻量级的Web服务器/反向代理服务器及,在BSD-like协议下发行。有着占用空间小,并发能力好的优点。事实上nginx的并发能力在同类型的网页服务器中表现较好。在前后端分离的项目中,Nginx起着极其重要的作用,Nginx可以让前端项目单独部署,并且更加简单易用。同时它也可以作为代理转发、负载均衡等等的中间件。Linux:Linux是一个操作系统版本,他可以用来部署我们的web应用,将做好的web程序部署到阿里云服务器中。即可通过ip或者域名来正常访问应用,在本次课题中,主要用的时CentOS7版本的Linux系统。Linux内核由LinusTorvalds创建,不需要收费提供给全球使用。在使用量提高之际这个操作系统迅猛发展,快速的得到了程序员们的大力支持。它能运行主要的Unix工具软件,应用程序和网络协议。他支持32位和64位硬件。Linux继承了Unix是以网络为核心的设计理念,是一个性能稳定的多用户网络操作系统。Xftp:Xftp有着可以同步文件和文件夹的同步功能,提供文件阅读的窗口,提供ftp和sftp的连接方式,用户能够放心的在unix和linux之间传输文件。在本次课题中,需要用它来向服务器发送web程序jar包和一些软件的安装包。Naavicat:Navicat是一个强大的MySQL数据库管理和开发工具,可以查看数据库中的数据。以及创建表、数据库、数据库等。使用数据库管理工具相比在终端控制数据库的优势非常明显,呈下降趋势的成本展现在人们眼前,可以使数据库环境准确并快速的搭建成功。系统可行性和需求分析3.1系统可行性以及优缺点为了让用户有更好的体验感,并且避免了现有记事类软件存在问题,现在此软件主要具备这几项功能功能:待办事件的添加、删除功能;日记的查看、修改功能;学习笔记可以按照标签分类功能;每一项任务以柱状图展示功能。所以该软件极大的提高了工作效率,有效的降低了突如其来的想法在繁杂的工作过程中流失的几率,使得体验者可以快速的在第一时间记录脑海中闪过得有效想法,将想法从头脑中转移到设备上,借由托付给设备使头脑得到解放。但是也存在有缺点,例如:功能不够完善;单一设备访问;增加笔记,待办需要刷新后才可以在该页面看到记录。3.2需求分析用户体验需求:用户的体验需求主要从三个角度分析,分别为:交互效果、响应时长、便捷程度。交互效果:一套赏心悦目的交互效果能让用户眼前一亮,交互界面是和用户直接沟通的窗口,是提高用户对应用认知的最直接手段,可以说用户界面就是系统的门面,本平台的设计采用了antdesign的组件库,按钮的点击效果、界面的布局包括各个表单元素都在当下比较流行,因此通过这些组件库的引入,能让本平台应用在交互效果上有不错的体验。响应时长:响应时长是系统性能的体现,如果响应时间过长不仅会让用户失去耐心,并且在后续的使用中,失去好感。因此,在平台的设计中,应该从性能的角度进行编码。便捷程度:如果应用只能在单一的设备上访问,这大大降低了应用的便捷性,可能会失去大量用户,除了在浏览器访问之外,后续可以与公众号进行结合,通过微信公众号带来的便利,提高平台应用的便捷程度。业务需求:业务需求根据简化操作的要求,软件的功能应实现如下细节:功能模块功能要点功能点控制台待办事件日记学习笔记输入框能够提示输入输入刷新后可以查看增加成功后可以查看详细内容也设有修改和删除功能学习笔记标签能够根据关键字查询笔记待办快速查看能够绕过主界面直接进入看到代办完成和未完成数量天气概况能够主界面就可以查看到性能需求:Web网络信息安全在保护用户隐私中扮演重要的角色,所有用户在本应用中创建的内容,均为用户的隐私。因此,开发中需要从安全的角度开发,并且做到不泄露、安全、快速和高效的特点。而在web安全中最容易引起的安全问题即是sql注入漏洞和跨站脚本攻击,在开发过程应着重主要这两类安全问题,才能确保用户信息的安全。Sql注入漏洞的预防需要在查询数据库的时候使用预编译的方式,而跨站脚本攻击(XSS)需要注意的地方就多了,开发时需要在每处回显的位置进行判断回显的内容的安全性。如果回显时碰见脚本相关的符号,如:<script></script>等等,则应采取应对措施,不可直接回显,否则脚本将被执行。系统的易操作性主要是使用者在操作方面轻松易懂,既做到操作界面不会随意跳转,在操作做发生错误会出现提示,搜索所需要的日记,学习笔记搜索关键字即可。还有系统的安全保密性,只有被授权注册过的用户,通过账号和密码才可以登录进入,非公共场所的网络电脑才可以设置自动登录。系统设计4.1MySQL数据库设计图4-1E-R图用户表:是记录所有用户的登录信息,同时包括个人信息,其中id为用户表主键,username为用户用作登录的登录名,并且唯一不可以重复themConfig为用户的个性签名,在首页中展示。表4-1-1用户表属性名数据类型长度注释idint11主键,用户idusernamevarchar30用户名,不可重复passwordvarchar30密码namevarchar50昵称telephonevarchar50电话号码lastLoginTimevarchar50最后登录时间roleIdvarchar300地址langVarchar200职业themeConfigvarchar300首页个性签名deletedvarchar300账号状态:10A正常,10X删除用户配置:该表可以当作是配置和用户个人有关的偏好设置的总表。当前配置了用户笔记的抬头签名,另外可作为其他爱好配置。该表的结构设计灵活,并不作为某一配置的结构。表4-1-2用户配置表属性名数据类型长度注释idint11主键cfgTypevarchar30用户配置类型useridint30用户idvaluevarchar50配置的值remarkvarchar50备注statevarchar50状态标签表:标签表代表着标签库,所有用到的标签都将在这个地方取,同时通过linkCount字段的值判断,可以取出当下热门的标签,提供给用户参考。若是用户新增加的标签,也会被存储到标签库里。表4-1-3标签表属性名数据类型长度注释tabIdint11主键tabNamevarchar30标签名字linkCountvarchar30标签被引用的次数角色表:角色表定义了用户的所有角色,每个用户都有一个角色。通过角色可以定义不同用户之间的权限。便实现了对一些管理员才触及的功能界面不被普通用户所操作。表4-1-4角色表属性名数据类型长度注释idint11主键,角色idnamevarchar30角色的名称describevarchar30角色描述statusvarchar50角色状态creatorIdvarchar50角色的创建人createTimevarchar50角色的创建时间deletedvarchar300角色是否删除权限表:权限表中定义了各类权限,包括菜单权限,特殊操作权限等等。表4-1-5权限表属性名数据类型长度注释permissionIdint11主键,权限idpermissionNamevarchar30权限的名称actionsvarchar30权限描述actionListvarchar50拥有的功能权限集合,数据格式为json字符串,可选配置,可与数据权限配合使用dataAccessvarchar50拥有的数据权限集合,数据格式为json字符串,可选配置,可与功能权限配合使用角色权限表:角色权限表中存放了角色喝权限对应关系的表。在该表中可以给角色配置多个不同的权限,同时每个用户都对应一个角色,以此便达到了控制用户权限的功能。表4-1-6角色权限表属性名数据类型长度注释idint11主键permissionIdvarchar30权限idroleIdvarchar30角色id笔记表:笔记表的内容主要是实现了用户写笔记的功能,所有笔记都记录到该表中,笔记中状态的字段用作逻辑删除,用户删除笔记的时候,不真正删除笔记,修改笔记的状态来达到删除的目的,方便在用户后悔的情况下找回笔记。表4-1-7笔记表属性名数据类型长度注释noteIdint11主键,笔记idnoteTitlevarchar30笔记的标题noteContentvarchar30笔记的内容,存储富文本内容noteTextvarchar50笔记的纯文本内容userIdvarchar50用户idtabIdvarchar50标签idstatevarchar300状态:10A正常,10X已删除createDateVarchar200创建时间updateDatevarchar300更新时间otherLinkvarchar300外部链接日记表:日记表存储用户的日记信息,同样也有状态的字段用来做逻辑删除,以防用户误删操作。同时,isImportant字段可以提供用户增加重要笔记的功能。表4-1-8日记表属性名数据类型长度注释diaryIdint11主键,日记iddiaryTitlevarchar30日记的标题diaryContentvarchar30日记的内容,存储富文本内容diaryTextvarchar50日记的纯文本内容diaryDatevarchar50日记的日期userIdvarchar50用户的idtabIdvarchar300标签的idstateVarchar200状态:10A正常,10X已删除createDatevarchar300创建时间updateDatevarchar300更新时间remarkvarchar300备注otherLinkvarchar300外部链接isImportantint2是否重要笔记:1:是,2:否待办表:待办功能给用户提供类似便签的功能,另外,待办的状态主要分为三种(未开始,正在执行,已完成),不同的状态会影响到用户待办完成的效率和数量的统计和展示,另外会将超时任务进行记录。表4-1-9待办表属性名数据类型长度注释eventIdint11主键,待办ideventTitlevarchar30待办标题eventContentvarchar30待办内容beginTimevarchar50计划开始时间endTimevarchar50计划结束时间,作用与计划完成时间相同planTimevarchar50计划完成时间statevarchar300状态:10A未开始,10B正在执行,10C已完成,10X已删除createTimeVarchar200待办创建时间completeTimevarchar300待办完成时间userIdint用户id历史登录记录表:该表只用作记录用户每天的登录次数,没有其他使用价值,用作统计用户访问系统的次数变化。以此提供给用户使用本系统频率的参考价值。表4-1-10历史登记记录表属性名数据类型长度注释userIdint11用户idloginDayvarchar30登录的日期countvarchar30登录的次数4.2Redis缓存的引用Redis用于存储最近登陆的用户,key为curLoginUser。数据类型为List,该数据内容每周清空一次,每当有用户登录,都在最近登录用户中添加一条记录,并且每次在头部添加,这样数据的顺序既是根据登录时间排序。4.3系统设计4.3.1系统设计结构图图4-3-1系统设计结构图4.3.2系统详细设计解析个人页分为用户信息设置和账户密码修改。用户信息设置:用户想要完成首次登录,需要设置用户名,账户昵称,以及密码,并且要输入正确的手机号,即可完成注册,注册成功后即可登陆,登录后可以修改自己的个人信息个性签名可以展示在控制台上,控制台可以查看登陆人的个人昵称个性签名及各类功能的柱状统计图和天气概况。账户密码修改:在个人页中的个人设置可以进行密码修改,当前密码的安全程度均有显示,修改密码时要知道当先密码,修改后的密码要保证两次输入完全相同,才可修改密码,修改成功后可以设置为自动登录状态控制台即为工作台,工作台中有使用人账户的个人昵称,职称,个性签名和头像设置这些均可在个人中心里面进行修改。登录数笔记数和日记数的柱状图记录的均为近十天内的数据以及标记有今日登陆,笔记日记数量还设有未完成代办及总数待办。天气概况记录的是最近六天的天气以及天气情况提醒例如“感冒低发期,天气舒适,多吃蔬菜多喝水”。健康指数通过线行统计图表述了本月和上月与访问量待办超时数和日记数之间的关系,本月和上月分别采用不同颜色的线来区分。待办事件为事件中心,表示出剩余待办,本月处理待办平均时间,本月超时数和本月完成任务数。点击添加即可增加待办可设置标题,起始和终止日期和内容点击ok增加待办,刷新一下即可在页面看到待办,唯一的缺点就是每一个待办需要手动开始以及手动结束,待办数也可展示在工作台页面。日记中心属于我的日记,可以查看到个性签名以及每个日记的主题,点击查看内容即可查看日记内容,点击修改内容才可以修改内容,删除即可删除日记。新建日记是跟待办一样可以设置日记标题,记录日期及内容。学习中心设有学习笔记,可以根据标题来快速查找笔记,同样增加学习笔记的时候可以设置标题,但是学习笔记可以增添标签,系统自动在最热的100个标签随机推荐三个提供选择,但是也可以手动添加自己喜欢的标签,每个笔记下方也设有查看内容,编辑和删除。系统实现登陆拦截器实现登录拦截系统的作用是拦截器可以拦截未登录的用户进入系统,所有请求在经过后端时,都会先进入拦截器,在拦截器中判断登录状态。拦截页面:个人页面、笔记页面、日记页面、待办页面、首页。publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{HttpSessionsession=request.getSession();UserVouserBean=(UserVo)session.getAttribute(Contants.Attribute_User_KEY);RetMsgresult=newRetMsg();if(userBean==null||userBean.getUsername().equals("")){//session中没有登陆信息,从token中取Stringtoken=request.getHeader("Access-Token")==null?"":request.getHeader("Access-Token");UserVouserVo=null;try{userVo=JSON.parseObject(JasyptUtil.decrypt(token,salt),UserVo.class);}catch(Exceptione){}if(userVo!=null){Calendarcalendar=Calendar.getInstance();calendar.setTime(userVo.getLastLoginTime());calendar.add(Calendar.DATE,7);//token有效期为七天CalendarcalendarNow=Calendar.getInstance();calendarNow.setTime(newDate());if(calendar.after(calendarNow)){session.setAttribute(Contants.Attribute_User_KEY,userVo);LoginHistoryhistory=loginHistoryService.getOne(newQueryWrapper<LoginHistory>().eq("userId",userVo.getId()).eq("loginDay",LocalDate.now()));if(history!=null){history.setCount(history.getCount()+1);loginHistoryService.update(history,newUpdateWrapper<LoginHistory>().eq("userId",userVo.getId()).eq("loginDay",LocalDate.now()));}else{history=newLoginHistory();history.setUserId(userVo.getId());history.setLoginDay(newDate());history.setCount(1);loginHistoryService.save(history);}returntrue;}}5.2拦截不安全的请求方式拦截不安全请求方式的作用:在http请求中,有许多请求的方式,被web应用划分为不安全的请求式;可能给应用带来安全漏洞。因此只需要开启需要用到的请求方式即可。拦截的请求方式:HEAD、PUT、DELETE、OPTIONS、TRACE、COPY、SEARCH、PROPFIND。放行的请求:GET、POST请求方式是web应用中最常用的请求方式,几乎所有的请求都可通过这两种方式实现。/*springboot2.0拦截不安全请求*/@BeanpublicConfigurableServletWebServerFactoryconfigurableServletWebServerFactory(){TomcatServletWebServerFactoryfactory=newTomcatServletWebServerFactory();factory.addContextCustomizers(context->{SecurityConstraintsecurityConstraint=newSecurityConstraint();securityConstraint.setUserConstraint("CONFIDENTIAL");SecurityCollectioncollection=newSecurityCollection();collection.addPattern("/*");collection.addMethod("HEAD");collection.addMethod("PUT");collection.addMethod("DELETE");collection.addMethod("OPTIONS");//collection.addMethod("POST");//collection.addMethod("GET");collection.addMethod("TRACE");collection.addMethod("COPY");collection.addMethod("SEARCH");collection.addMethod("PROPFIND");securityConstraint.addCollection(collection);context.addConstraint(securityConstraint);});returnfactory;}}5.3Nginx代理的实现作用:利用Nginx部署前端项目,在前端中的后端请求通过Nginx代理转发至后端应用的地址,其中,所有请求路径中包含”/api/”的请求均转发到后端应用的地址中。图5-3Nginx配置信息5.4获取当前最热标签作用:从引用次数最多的100个标签里随机抽取出三个,作为推荐标签推给用户在编辑笔记时选用,每个笔记都可以加上标签。@GetMapping("hotTabs")publicRetDataMsghotTabs(@RequestParamStringcount){count=count.trim();RetDataMsgresult=newRetDataMsg();QueryWrapper<MTab>wrapper=newQueryWrapper<MTab>().orderByDesc("linkCount").eq("1","1limit100");List<MTab>tempList=tabMapper.selectList(wrapper);intallCount=tabMapper.selectCount(wrapper);///查询标签总数List<MTab>returntList=newArrayList<>();List<Integer>ids=newArrayList<>();for(inti=0;i<Integer.parseInt(count);i++){if(i>allCount)break;Doubletemp;while(true){if(allCount>100){temp=Math.random()*(101);}else{temp=Math.random()*(allCount);}if(!ids.contains(Value())){ids.add(Value());break;}}returntList.add(tempList.get(Value()));}result.setResult(returntList);result.setCode(200);returnresult;}5.5健康指数作用:对本月和上月各类指数进行统计和计算。统计包括日记数量、笔记数量、待办超时率和访问次数。@GetMapping("healthIndex")publicRetDataMsghealthIndex(HttpSessionsession){RetDataMsgresult=newRetDataMsg();UserVouserBean=(UserVo)session.getAttribute(Contants.Attribute_User_KEY);LocalDatenow=LocalDate.now();now=now.withDayOfMonth(1);longtoday=now.atStartOfDay().toInstant(ZoneOffset.of("+8")).toEpochMilli();longlastMonth=now.minusMonths(1).atStartOfDay().toInstant(ZoneOffset.of("+8")).toEpochMilli();JSONObjectmonthObject=userService.calculateEvent(userBean,today,0);JSONObjectlastMonthObject=userService.calculateEvent(userBean,lastMonth,today);inteventCount=eventService.count(newQueryWrapper<MEvent>().eq("userId",userBean.getId()).ne("state","10X").gt("beginTime",today));intlastEventCount=eventService.count(newQueryWrapper<MEvent>().eq("userId",userBean.getId()).ne("state","10X").between("beginTime",lastMonth,today));intlonginCount=loginHistoryService.list(newQueryWrapper<LoginHistory>().eq("userId",userBean.getId()).gt("loginDay",now)).stream().mapToInt(item->item.getCount()).sum();intlasthLonginCount=loginHistoryService.list(newQueryWrapper<LoginHistory>().eq("userId",userBean.getId()).between("loginDay",now.minusMonths(1),now)).stream().mapToInt(item->item.getCount()).sum();intdiaryCount=diaryService.count(newQueryWrapper<MDiary>().eq("userId",userBean.getId()).ne("state","10X").gt("createDate",today));intlastdiaryCount=diaryService.count(newQueryWrapper<MDiary>().eq("userId",userBean.getId()).ne("state","10X").between("createDate",lastMonth,today));intnoteCount=noteService.count(newQueryWrapper<MNote>().eq("userId",userBean.getId()).ne("state","10X").gt("createDate",LocalDate.now()));intlastNoteCount=noteService.count(newQueryWrapper<MNote>().eq("userId",userBean.getId()).ne("state","10X").between("createDate",lastMonth,today));JSONArrayresultArray=newJSONArray();JSONObjectobject1=newJSONObject();object1.put("item","待办超时数");object1.put("上月",lastMonthObject.get("countTimeout").toString().equals("0")?0:Double.parseDouble(lastMonthObject.get("countTimeout").toString())/lastEventCount*100);object1.put("本月",monthObject.get("countTimeout").toString().equals("0")?0:Double.parseDouble(monthObject.get("countTimeout").toString())/eventCount*100);JSONObjectobject3=newJSONObject();object3.put("item","日记");object3.put("上月",lastdiaryCount);object3.put("本月",diaryCount);JSONObjectobject4=newJSONObject();object4.put("item","笔记");object4.put("上月",lastNoteCount);object4.put("本月",noteCount);JSONObjectobject5=newJSONObject();object5.put("item","访问量");object5.put("上月",lasthLonginCount);object5.put("本月",longinCount);resultArray.add(object1);resultArray.add(object3);resultArray.add(object4);resultArray.add(object5);result.setResult(resultArray);result.setCode(200);returnresult;}}5.6应用部署到云服务器上部署方式:通过容器的方式部署,前端使用Nginx为基础镜像,后端使用Java作为基础镜像。容器部署是当下非常流行的部署方式,并且相较于传统的虚拟机有着很大的飞跃。使用容器的方式原比虚拟机的方式强大许多,在虚拟机中,需要占用大量系统资源,虚拟机安装的系统也需要占用大量的内存和磁盘。而容器的出现,就解决了虚拟机的痛点,使得隔离部署的方式非常轻松,通过容器的方式有以下几个优点:跨平台可移植性:按统一标准打包(镜像的方式),传播性极强。面向应用:优化部署应用(设计哲学)→API,接口及文档(体现)。版本控制:追踪、查询、记录版本信息(应用程序更改史)和回滚版本等组件复用:可在基础镜像的条件下使用其他镜像。共享性:公共的注册服务器(可拉取公共的镜像服务)#基础镜像FROMjava:8VOLUME/tmp#把可执行jar包复制到基础镜像的目录下COPYinfocoord-0.0.1-SNAPSHOT.jarinfocoord.jarRUNln-sf/usr/share/zoneinfo/Asia/Shanghai/etc/localtimeRUNecho'Asia/Shanghai'>/etc/timezoneRUNbash-c"touch/infocoord.jar"#镜像要暴露的端口,如要使用端口,在执行dockerrun命令时使用-p生效EXPOSE8081#在镜像运行为容器后执行的命令ENTRYPOINT["java","-jar","infocoord.jar","--files.active=prod","--server.port=8081",">/log/app.log"]图5-6-1前端项目容器部署配置系统功能测试6.1账户登录测试步骤:1.前后端运行,运行后得到域名http://localhost:8000/(不可用IE浏览器) 2.输入账户名和密码,密码可以设置成可见或者不可见 3.输入成功后按确定即可登录,登陆密码或者账户名输入有误时,系统会弹窗提示,输入框为空也给予提示。图6-1-1登陆操作图示6.2个人资料修改测试步骤:首页点击个人页当前页点击修改个人资料,或者修改首页签名,修改基本信息和个性签名后点击提交安全设置可以看到密码的安全性也可以修改密码最右边修改,修改后点击提交测试结果:可用修改过的密码登录,登陆成功则功能正常图6-2-1检测如图所示6.3各项功能测试添加待办测试步骤:1.点击事件中心2.点击添加3.增加待办后点击确定4.待办增加成功后手动点击开始测试结果:增加功能正常图6-3-1检测如图所示日记中心测试步骤:1.点击日记中心2.点击新增日记 3.日记添加完成后刷新就可以在页面上看到刚添加过得日记测试结果:日记功能正常图6-3-2检测如图所示学习中心测试步骤:点击学习笔记点击添加笔记笔记添加完成后按f5刷新检测是否添加成功测试结果:学习笔记功能正常图6-3-3检测如图所示
结束语虽然这次毕设没有经历很漫长的过程,但是我已经在这方,面学到了很多东西,已经为今后的工作中奠定了有效的基础。作为一名计算机工作者,最首要的任务就是清楚的知道每位用户的需求,才可以根据需求来确定软件开发的功能要点;其次就需要设计者来亲身体会,学会换位思考,我们本身就是体验者,我们学要什么样的软件,只有这样,才能为开发工作明确了方向,并使所开发的软件能够真正让用户所面临的问题得到改善。经过几个月的设计与开发,这个应用型网站日记本的功能基本符合设想的要求:能够实现从登录到添加等各项,实现对之前笔记日记的查看、编辑、删除,还可以根据关键字对笔记进行搜索等。由于设计时间有限,自身技能和所掌握的知识和能力有限,系统存在的一些弱点,像修增加了待办日记学习笔记需要刷新一次页面才能出来这个问题,还是没有能够想到解决的办法。之后经过我的知识面逐渐扩展,还会有更多的问题被发现。这次的毕业设计使我收获颇多,不但学到了新的知识,积累了处理问题的方法,也提高了自己的眼界,当今社会人类已经入了信息时代,社会瞬息万变只有不断提高自己才能不会被社会淘汰总之借用这次毕业设计我接触了许多没学过的以及很多的课外知识,更新了自己原有的知识层面,挖掘出来新的开发思路,相信之后会更深入的学习这方面的知识
附录一:参考文献[1]ShiXiang-dong,QianSheng-bang,LiLin-jia,ZhaoEr-gang.CSSJ213934.3-050020:ANewDouble-modeHigh-amplitudeScuti-typePulsatingStar[J].PublicationsoftheAstronomicalSocietyofthePacific,2021,133(1023).[2]BatalasNikolaos,KhanVassilis-Javed,MarkopoulosPanos.ExecutableHTML[J].SoftwareX,2021,14.[3]AlexScaria,RajkumarTDhiliphan.2SpiderBirdSwarmAlgorithmwithDeepBeliefNetworkforMaliciousJavaScriptDetection[J].Computers&Security,2021(prepublish).[4]马小陆,王磊,方英歌.一种基于嵌入式Linux信息处理的开放性教学平台设计[J].湖北理工学院学报,2021,37(02):23-26.[5]赵凯.新形态教材建设研究——以Linux网络服务构建与管理课程为例[J].中国现代教育装备,2021(07):137-139.[6]朱佑滔,何志琴,施文烨.多种群蚁群算法在机械手臂路径规划中的设计与应用[J].机械传动,2021,45(04):160-165.[7]赵慧周.面向文科生的程序调试方法线上教学实践与思考——以JavaScript程序设计为例[J].计算机教育,2021(04):7-10+23.[8]ZeroualiAhmed,MensTom,DeRooverCoen.OntheUsageofJavaScript,PythonandRubyPackagesinDocker
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024国际物流师技术优化考题分享试题及答案
- 安全工程师必知的国际标准试题及答案
- 2025年铁基记忆合金材料合作协议书
- 工程建设安全规程试题及答案分享
- 提升学习效率CPMM试题及答案
- 厦门广告牌制作施工方案
- 2025年蓄热式高温预热烧嘴项目合作计划书
- 2025天津市建筑工程职工大学辅导员考试题库
- 2025四川职业技术学院辅导员考试题库
- 2025青岛求实职业技术学院辅导员考试题库
- 2024-2030年啤酒花衍生物行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2024 汽车行业报告:智能驾驶系列报告(一)华为智能驾驶方案简剖
- 2024年江西省高考物理+化学+生物试卷(真题+答案)
- 7 健康看电视 教学设计-2023-2024学年道德与法治四年级下册统编版
- 餐饮业绩效考核表(店长、前厅领班、吧台、厨师长、后厨、服务员、收银员、库管、后勤)3
- DL∕T 622-2012 立式水轮发电机弹性金属塑料推力轴瓦技术条件
- GB/T 44193-2024全国一体化政务服务平台一网通办基本要求
- 2023年湖南省普通高等学校对口招生考试机电类专业综合知识试题附答题卡
- DL-T-298-2011发电机定子绕组端部电晕检测与评定导则
- 《王亚平》的故事解读课件
- 气管切开非机械通气患者气道护理
评论
0/150
提交评论