计算机科学与技术-基于SpringCloud的动漫论坛-BOKI_第1页
计算机科学与技术-基于SpringCloud的动漫论坛-BOKI_第2页
计算机科学与技术-基于SpringCloud的动漫论坛-BOKI_第3页
计算机科学与技术-基于SpringCloud的动漫论坛-BOKI_第4页
计算机科学与技术-基于SpringCloud的动漫论坛-BOKI_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGEII基于SpringCloud的动漫论坛《BOKI》摘要:鉴于现如今的互联网网站的存在形式,网站内部有可能内嵌论坛,因此,该项目中实现一个整体的、可移植性强的插件式论坛,论坛就有可能突破ACG主题的限制,实现论坛与主站的分离,只要提供前端,就能够正真实现论坛的插件式引入。在如今主流的web项目框架中,该项目中将使用Spring框架作为后端基础,使用mysql数据库。项目的运行环境包括但不限于windows7以上环境。mysql与redis将在CentOS环境中使用docker容器,以实现快速启动。由于数据的增删改查并非完全以PO形式,故在项目的dao层使用灵活度较高的mybatis框架。该论坛主要实现未登录的游客的帖子浏览,已登录用户的发帖回帖、个人信息管理,管理团队对普通用户和帖子的调控,实现论坛环境的正常运行和提升用户的发帖与浏览体验。针对核心的发帖模块,经过对后端接口的严格测试,已经能够正确地实现发帖、回贴,甚至是二级回复。其他接口同样地,均通过黑盒测试,能够稳定地提供数据交互。通过对系统各项功能的优化与测试,系统能够对用户不合理的操作进行提示,所设计的系统能够正常运行、业务处理逻辑比较合理,符合初期的目标和系统的实际要求。关键词:spring框架,论坛,mysql,动漫,VUE框架

ACGForum“BOKI”BasedonSpringCloudAbstract:InviewoftheexistingformofInternetwebsitesnowadays,itispossibletoembedforumsinsidethewebsites.Therefore,inthisproject,awholeplug-inforumwithstrongportabilitycanberealized,whichmaybreakthroughthelimitationofACGthemeandseparatetheforumfromthemainstation.Aslongasthefrontendisprovided,theplug-inintroductionoftheforumcanberealized.Intoday'smainstreamwebprojectframework,theprojectwillusethespringframeworkastheback-endfoundationandMySQLdatabase.TherunningenvironmentoftheprojectincludesbutisnotlimitedtotheenvironmentaboveWindows7.MySQLandrediswillusethedockercontainerintheCentOSenvironmentforquickstartup.Sincetheaddition,deletion,modificationandqueryofdataarenotentirelyintheformofPo,themybatisframeworkwithhighflexibilityisusedintheDaolayeroftheproject.Theforummainlyrealizesthepostbrowsingofthevisitorswhohavenotloggedin,thepostreplyandpersonalinformationmanagementoftheuserswhohaveloggedin,theregulationofthemanagementteamontheordinaryusersandposts,thenormaloperationoftheforumenvironmentandthepromotionofthepostandbrowsingexperienceoftheusers.Forthecorepostingmodule,afterthestricttestingoftheback-endinterface,ithasbeenabletocorrectlyimplementposting,reply,orevensecondaryreply.Theotherinterfacesalsopasstheblackboxtestandcanstablyprovidedatainteraction.Throughtheoptimizationandtestofvariousfunctionsofthesystem,thesystemcanprompttheunreasonableoperationofusers,thedesignedsystemcanoperatenormally,thebusinessprocessinglogicismorereasonable,andmeettheinitialgoalandtheactualrequirementsofthesystem.Keywords:Spring,BBS,MySql,ACG,VUE目录TOC\o"1-3"\h\u第1章绪论 11.1系统的开发背景及意义 11、课题目的 12、课题意义 11.2国内外研究现状 31.3系统的主要研究内容 41.4系统开发环境与开发工具 5第2章系统需求分析 72.1系统的核心业务流程分析 72.2系统的整体功能需求分析 92.3动漫论坛系统功能需求 112.3.1参与者 112.3.2用户客户端基础功能需求 122.3.3管理员客户端基础功能需求 142.4本章小结 16第3章系统的设计与实现 173.1系统总体架构设计 173.2数据库设计 183.2.1概念结构设计 183.2.2逻辑结构设计 213.3客户端子系统详细设计 273.3.1客户端后端接口设计 273.3.2客户端关键代码与难点实现 313.4管理端子系统详细设计 353.4.1管理端后端接口设计 353.4.2管理端关键代码与难点实现 373.5前端服务器详细设计 393.4本章小结 39第4章系统测试 404.1测试的意义 404.2测试的目的 404.3测试方法 404.4测试用例及结果 404.5本章小结 40第5章结束语 415.1全文总结 415.2课题展望 41参考文献 42致谢 43PAGEPAGE65第1章绪论1.1系统的开发背景及意义1、课题目的所谓论坛,随着Internet技术的快速发展,BBS论坛在网络上已成为人们彼此沟通、交流信息的主要方式。在论坛上,人们可以对某一领域提出自己遇到的问题,随后,论坛上的其他人会根据自己的学识、经验发表意见或提出问题的方法。BBS论坛接近了人们之间的距离,它早已成为人们网上生活的必备工具。所以说BBS论坛对当今社会是相当重要的。对于日渐增多的动漫爱好者社团活动的需求,我决定实现一个为动漫爱好者定制的论坛系统,实现动漫爱好者彼此之间的线上交互。作为论坛,首要目标就是要实现用户界面的美观,可读性,以及用户发帖和对帖子的阅读。2、课题意义关于动漫的解释,动漫,指动画与漫画的集合,即动画、漫画的合称,取这两个词的第一个字合二为一称之为“动漫”,与游戏无关,并非专业术语。现如今的动漫论坛不再单单是讨论动漫,往往包含了游戏领域。动画和漫画的合称,在台湾一般为“动漫画”,简称“动漫”,在大陆则一般为“动漫”。常见的搭配有“动漫(画)迷”、“动漫(画)产业”等。除“动漫(画)”以外,华语圈也经常使用ACG(动画·漫画·游戏)、ACGN(动画·漫画·游戏·小说)等合称。1995年,台湾的动漫爱好者AIplus在国立中山大学山抹微云BBS站开设新版面,使用“ACG_Review板”作为名称以代动画、漫画、游戏,乃为“ACG”一词之始。由傻呼噜同盟推广下,三个字母的顺序渐渐固定下来,并流传至中国大陆、香港等华人社会。现如今在轻小说改编的动画、漫画、游戏越来越多之际,又衍生出“ACGN”,小说。主要指轻小说(LightNovel)。ACG所指内容也涵盖轻小说,因此虽有人提出使用ACGN作为该演进说法的词,但实际上绝大多数场合仍在使用ACG。不过近年来由于轻小说的发展,使用ACGN的人群正逐渐增多。所谓论坛,随着Internet技术的快速发展,BBS论坛在网络上已成为人们彼此沟通、交流信息的主要方式。在论坛上,人们可以对某一领域提出自己遇到的问题,随后,论坛上的其他人会根据自己的学识、经验发表意见或提出问题的方法。BBS论坛拉近了人们之间的距离,所以说BBS论坛对当今社会是相当重要的。它早已成为人们网上生活的必备工具。对于日渐增多的动漫爱好者社团活动的需求,我们决定实现一个为动漫爱好者定制的论坛系统,实现动漫爱好者彼此之间的线上交互。作为论坛,首要目标就是要实现用户界面的美观,可读性,以及用户发帖和对帖子的阅读。该论坛研发意义有以下几点:(1)为有有相同爱好的动漫爱好者、动漫爱好群体和有兴趣的人们提供一个交流的平台。(2)动漫论坛的开发成本相对php项目开发成本高,但是,由于使用了稳定性、拓展性和维护难度较低的Spring框架,大大提升了系统的可用性和运行效率,具备了论坛的必要功能。.BIKI动漫论坛具备了发帖与回复,个人中心和其他论坛常见模块,并实现一整发帖流程。(3)BIKI动漫论坛具备有管理系统,拥有对用户的发言管理、惩罚机制、以及关键的帖子置顶等功能,方便论坛管理人员对论坛进行管理,并减少无意义发帖、刷帖、不良内容等恶意扰乱秩序的行为。(4)BIKI动漫论坛本身作为开放性交流平台,游客不需要登陆也能够浏览帖子,扩大了用户的访问便利性。发帖或回复则需要登陆才能实现,限制了游客经行无意义发帖、刷帖、举报等恶意扰乱秩序的行为。目前流行的动漫论坛中,有三中类型,一是资源型,资源型论坛注重对ACG(Animation(动画),Comic(漫画)和Game(游戏)的缩写)资源的掌控。二是发布型,发布型论坛注重对ACG新闻热点和实时消息的通知、公告、发布。三是交流型,交流型论坛注重对用户之间的交互,言论自由,但不乏官方限制,比如百度贴吧、知乎、CSDN论坛。本系统主要设计形式为为第三种,交流型论坛。1.2国内外研究现状以动漫作为主题的论坛,它的发展情况应分为两部分来分析也就是对动漫与论坛进行分析与结合。没有人愿意接触的领域,没有建立论坛的必要性。如果没有人愿意接触动漫,BOKI论坛也就失去了的意义。反之,一个交流平台没有的便利性与互动性,热门领域和热门产业也就不会选择这样的平台。如果BOKI论坛没有的便利性与互动性,动漫爱好者也就不会选择这样的平台。首先是动漫领域的分析:基于IP的繁荣和产业链的成熟,各方都在不停的摸索,不停的尝试,但没有一家能拿出大手笔,也没有一家真正拿出分蛋糕的方法。因为没人敢于拿出更大的资金和精力去尝试做一部剧情、分镜、音乐、做画质量等都足够优秀的动画,百千万的投资对于沉寂了十来年的中国动画市场来说无疑是一种赌博,而相关技术人员的匮乏也会让保证质量的动画周期变长,保证周期的动画质量下降,加重动画的制作成本,导致国内情况并不算乐观。尤其是05年之后,随着互联网的发展,随着社交网络的发展,动漫作为一种艺术载体其实有了很多新的一些小趋势。同时受众从原来单纯的收听率调查对象到真正参与进整个作品的企划也是一个比较良性的特征,也就是受众与作品的互动逐渐增多,并且受众对作品的影响也从原来的商品属性转向一种多义性的属性。国外情况以动漫产业发达的日本为例,市场化经济体制的核心就是竞争。竞争是促进产业进步的动力。日本漫画业已是一个十分成熟的产业,杂志社间的竞争自然必不可少。本漫画杂志依照消费群体不同而笼统分为男性向(以男性读者为主体)和女性向(以女性读者为主体)两类。由于互联网近些年的快速发展,动漫文化的交流已经在中国,乃至世界各地占有了一席之地,日渐火爆。其次是基于论坛的分析:抛出结论:论坛依旧是互联网交流的主力,大型论坛有百度贴吧、天涯、猫扑等,中小型论坛作为小群体的主要交流平台,更是数不胜数。论坛本身是一种形式,主贴为一个话题点,评论是话题的延伸,而话题以某个主题聚集在一起,就形成了论坛。这种形式是不死的。因为他很松散,很活跃,很适合互联网,所以他会形变,会衍生,但就是不会消亡。具有鲜明主题的论坛将持续存在且越来越活跃。经过无数网络平台的大浪淘沙,依然人气不减的存在,就是主题鲜明的专业论坛。比如摄影主题下的色影无忌、蜂鸟论坛等等。论坛的字数一般很多,图文并茂,可以以数千上万字来诠释一个专业的主题,加上精华和热门的筛选机制,使得优质的内容可以类似电子版图书一般持久存在,即使论坛一时间人气不足,凭借优质的精华内容,依然可以吸引很多新手来到论坛中进行系统化的学习。动漫在国内外作为近年来兴起的未来发展空间无限的产业,以及在互联网上经久不衰的论坛,二者的结合使得动漫主题得以延续,借助动漫火爆热度的同时,论坛的功能与结构得以拓展。1.3系统的主要研究内容首先对本课题的主要研究题目——《动漫论坛BOKI》诠释如下:对于日渐增多的动漫爱好者社团活动的需求,我们决定实现一个为动漫爱好者定制的论坛系统,实现动漫爱好者彼此之间的线上交互。作为论坛,首要目标就是要实现用户界面的美观,可读性,以及用户发帖和对帖子的阅读。随着Internet技术的快速发展,BBS论坛在网络上已成为人们彼此沟通、交流信息的主要方式。在论坛上,人们可以对某一领域提出自己遇到的问题,随后,论坛上的其他人会根据自己的学识、经验发表意见或提出问题的方法。BBS论坛接近了人们之间的距离,它早已成为人们网上生活的必备工具。所以说BBS论坛对当今社会是相当重要的。论坛配备有管理端系统,能够很好地提高管理员的工作效率和降低工作量。论坛基于SpringCloud框架制作,维护人员也能够较好进行维护。需要解决的主要问题是:该论坛能否完成发帖和回复、用户个人信息管理、帖子调控等这几个问题,以及服务端之间的协调。动漫论坛《BOKI》可分为包括以下几个子系统:1.4系统开发环境与开发工具系统开发环境配置:windows10系统,8GB运行内存。CentOS7虚拟机一台,1GB运行内存。开发环境及其开发工具:jdk1.8,ideaIU,Mysqlserver,redis。以下是系统主要使用的研究方法和关键技术:论坛的发帖和回复应该呈现一个关联的状态,即每个主题对应的回复都有严格的关联。以及用户的权限,个人信息的维护,关注、动态、私信、举报、以及系统发生错误时对客户端的回复等实现,需要借助的方法和技术也多种多样。以下技术归纳有:SpringCloud框架:SpringCloud框架使得服务拆分粒度更细,有利于资源重复利用,有利于提高开发效率。可以更精准的制定优化服务方案,提高系统的可维护性。微服务架构采用去中心化思想,服务之间采用Restful等轻量级通讯,比ESB更轻量。适于互联网时代,产品迭代周期更短。Myabatis:Mybatis是一种持久层框架,也属于ORM映射。mybatis为半自动化,需要自己书写sql语句,需要自己定义映射。增加了程序员的一些操作,但是带来了设计上的灵活,并且也是支持hibernate的一些特性,如延迟加载,缓存和映射等;对数据库的兼容性比hibernate差。移植性不好,但是可编写灵活和高性能的sql语句。Thymeleaf:thymeleaf是一种Java模板引擎,模板引擎就是为了使用户页面和业务数据相互分离而出现的,将从后台返回的数据生成特定的格式的文档,这里说的特定格式一般都指HTML文档。它能够处理html、xml、js、css甚至纯文本,类似于freemarker。它的优点是语法优雅易懂、原型即页面、遵从web标准。原型即页面是它的特色。eureka:Eureka是基于REST(RepresentationalStateTransfer)服务,主要以AWS云服务为支撑,提供服务发现并实现负载均衡和故障转移。我们称此服务为Eureka服务。Eureka提供了Java客户端组件,EurekaClient,方便与服务端的交互。客户端内置了基于round-robin实现的简单负载均衡。feign:Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便。它具有可插拔注释支持,包括Feign注解和JAX-RS注解、Feign还支持可插拔编码器和解码器、SpringCloud增加了对SpringMVC注释的支持,并HttpMessageConverters在SpringWeb中使用了默认使用的相同方式。SpringCloud集成了Ribbon和Eureka,在使用Feign时提供负载平衡的http客户端。hystrix:给依赖于第三方库的应用程序提供给保护,在复杂的分布式系统当中避免级联失败,快速失败并且快速恢复,在可能的情况下提供回退和优雅降级的能力,通过近乎实时的指标,监控和警报来优化发现故障的时间。mysql:MySQL体积小,命令执行的速度快。MySQL是开源的,且提供免费版本,对大多数用户来说大大降低了使用成本。与其他大型数据库的设置和管理相比,其复杂程度较低,易于使用。MySQL能够运行与多种系统平台上,如windouws,Linux,Unix等。支持最常用的数据管理功能,适用于中小型企业甚至大型网站应用。redis:一般部署在linux系统中。速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O。并且支持丰富数据类型,支持string,list,set,sortedset,hash。支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行。丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除。centOS7:用于部署持久化数据服务。作为免费开源的系统。centOS7是一款完全免费的操作系统,任何人都可以从网络上下载到它的源代码,并可以根据自己的需求进行定制化的开发,而且没有版权限制。腾讯邮箱服务:腾讯出品的邮箱服务,用于用户注册时进行账户修改密码时进行邮箱验证。上面介绍的论坛开发的常用技术,可以完成这些任务,不同技术完成的任务和侧重点有很大不同。

第2章系统需求分析需求分析,指对用户的实际需求进行调查,分析和表达这些需求以达成共识。需求分析包括以下步骤:一、对用户想要解决的问题和想法进行详细的分析,分层次的分析。二、将客户需求转化为系统业务需求,形成对系统分析的完整和特定要求。三、对先面的调查结果进行初步分析,以确定系统的功能。四、根据后续需求拓展业务。2.1系统的核心业务流程分析本文在项目系统中的主要工作是对论坛客户端的客户端的业务流程进行分析与展示。在该论坛的用户客户端,水友和论坛职务人员用户可以通过论坛的发帖和回复功能进行相应的交流,以及对个人信息进行更新等等。论坛客户端发帖与回复流程如图2-1所示。图2-1系统核心业务流程图此发帖流程。以已游客客户端软件用户浏览帖子至登陆发帖为的业务流程为例。当用户打开论坛首页时,无论是否登陆该论坛,均可以浏览帖子信息。未授权的游客用户提交功能功能不能使用,包括发帖、回复、个人信息等进行提交的操作;登陆后的合法用户用户浏览帖子过程中,可以将喜欢的对感兴趣的帖子尽兴回复,或者发帖与爱好者一同讨论。发帖或回复完毕完后,在可继续对帖子进行浏览。2.2系统的整体功能需求分析论坛系统将会分为两大模块进行设计,分别是用户功能模块和管理员功能模块。系统用户功能模块如图所示:图2-2系统用户模块功能结构图系统管理员功能模块如图所示:图2-2系统管理员模块功能结构图2.3动漫论坛系统功能需求通过分析动漫论坛功能模块,可以确定为动漫论坛分为两大用户,一般用户和管理员用户。一般用户未登录时可以对帖子进行浏览,但不能进行任何提交操作。用户登陆后可以进行其他操作,发帖,回复,个人信息管理等等。。2.3.1参与者系统参与者之间的关系如下角色层次图所示:参与者说明:一般用户:论坛的核心成员,可以执行用户发帖、关注、动态、私信、回复、举报等用户交互操作。享受登陆、维护个人基本信息、等级、收藏、删帖、信用度,违规受罚等权益。游客:游客基本权限为注册,浏览。不提供注册以外的任何提交数据的权限和操作。管理员:论坛的核心成员,可以执行用户发帖、关注、动态、私信、回复等用户交互操作,但没有用户权益模块的所有子功能。额外享有较高的权限,包括帖子置顶、论坛数据总览、查看用户信用度、查看用户违规情况、查看用户发帖记录,对用户删帖、警告、关小黑屋等等权限。2.3.2用户客户端基础功能需求下面是对图2-2系统用户模块功能结构图的基本功能模块的详细解释:登录模块主要包括用户登录和权限分配管理。用户已有账号,在登陆界面,输入【邮箱】【密码】登陆即可。默认为【水友】权限,即一般用户权限。用户互动模块:作为用户在论坛上活跃的手段。用户除了最基本的浏览之外,还应该具有互动的方式,该模块实现了用户之间的互动。该子系统包括以下模块:发帖子模块:作为论坛最基本的功能,发帖是必备的一项。用户在已经的登陆的状态下,在论坛发帖处输入【主题】【内容】之后点击【发送】即可发帖;关注子模块用户之间必须拥有能够多对多的关注。用户在对另一个用户的【关注】按钮点击之后,实现添加到关注列表,关注后可收到对方的发帖通知。动态与消息子模块。用户所关注的对象的动态应及时通知到用户,用户被回复时必须【通知】到用户。私信子模块不作为帖子发送的信息,属于私人发送信息。用户点击对方【私信】按钮,打开会话,输入【内容】,点击【发送】,对方收到私信【通知】,可进行回复操作,输入【内容】,点击【发送】。回复子模块除了基本的回复(俗称“楼层”),该模块支持了二级发帖(俗称“楼中楼”)。用户在进入帖子之后,在帖子的回复处输入【内容】,之后点击【发送】即可发送回复。用户在对楼层进行二级回复,在楼层的回复处输入【内容】,之后点击【发送】即可发送回复。举报子模块对违规帖子进行举报。用户在帖子的【举报】按钮,输入【理由】,点击【提交】,帖子将进入审核状态。用户权益模块:用户在论坛上享受的权力与义务,在该系统上展现出来,根据用户的行为与习惯,对用户本身的评价。该子系统包括以下模块:注册子模块新用户注册。游客用户进行注册,首先进入注册页面,输入【昵称】【邮箱】【密码】之后,点击【发送验证码】,用户在自己的邮箱收到验证码之后将验证码填入【验证码】,完成注册。基本信息子模块用户基本信息完善与修改;用户进入【个人信息】页面,修改信息后点击【完成】即可完成个人信息的提交。等级子模块根据用户经验代表的用户资质。根据发帖程度决定【经验值】,【经验值】决定【等级】,每次发帖经验值+5,回复帖子经验值+2,被回复时+1,【经验值】不受自己回复自己的叠加。收藏子模块在帖子【收藏帖子】按钮点击,可收藏帖子到【我的收藏】列表。以便用户随时找到该贴。删帖子模块 用户删除自己的帖。用户对自己的帖子进行【删除】操作,出现确认窗口之后,【确认】即可删除。只能对自己发送的帖子删除,不能删除其他人的帖子。当帖子被删除,帖子所包含的回复也应该一同被【清除】。信用度子模块信用度过低,用户权益将受到一定程度的限制。用户每次被管理员删帖,【信誉值】将会降低10点,初始值为100点。被删除回复时【信誉值】-5。【信誉值】每天+1,直到150。违规子模块用户违规,将被处罚。【信誉值】低于50将收到小黑屋触发,即封号处理。2.3.3管理员客户端基础功能需求下面是对图2-2系统用户模块功能结构图的基本功能模块的详细解释:登录模块主要包括用户登录和权限分配管理。用户已有账号,在登陆界面,输入【邮箱】【密码】登陆即可。默认为【小站长】权限,即管理员权限。论坛总览模块包括一个子模块,在【论坛总览】页面,其功能具有帖子数量总览,在线用户数量,作为用户活跃度展示。数据总览。用户信息模块:管理员可以对某一用户的违规记录和发帖记录进行查看。该子系统包括以下子模块:违规处理子模块查看用户违规情况及其日志。在【用户列表】中通过输入【用户ID】或【用户名】作为条件进行查询,在【查看详情】页面浏览用户违规情况。发帖记录子模块用户一段时间内的发帖记录。在【用户列表】中通过输入【用户ID】或【用户名】作为条件进行查询,在【查看详情】页面浏览用户发帖情况。赏罚模块:根据用户行为为用户赋予荣誉勋章,或者删帖、禁封账号等处理,该子系统包括以下子模块:删帖子模块管理员有最高权限的删帖能力。在帖子浏览过程中,管理员点击【删除】按钮,输入【理由】进行删帖,被删贴用户将收到删帖【通知】。小黑屋子模块禁封非法用户,违规用户。在【用户列表】中通过输入【用户ID】或【用户名】作为条件进行查询,点击【禁封】,输入【禁封时长】,完成禁封。信誉度勋章模块表彰用户资质与素质的奖励。根据信用度决定【勋章等级】,详细数据可在数据库中决定。帖子装饰模块该系统功能不多,但对论坛浏览起关键作用,能够对帖子进行置顶,和对贴纸升级为精华贴。在帖子浏览中,对帖子点击【升华】,帖子即被升级为精华贴。在帖子浏览中,对帖子点击【置顶】,帖子即被升级为置顶贴,需要设置置顶持续天数。2.4本章小结本章主要分析《BOKI》论坛的具体需求。在对论坛的基本需求的确定时,除了其中确定的基本需求,开发过程中可能需要针对其中的一些需求做出调整。论坛总体,不论用户客户端还是管理员客户端,需求都是比较明确的,这一点非常体现一个论坛的运转与管理方式。系统的设计与实现详细的系统设计是本论坛系统核心,根据所提供的需求以设计符合需求的系统,基于论坛的基本上一章的基本功能需求,设计了该系统。包括系统总体框架的设计、数据库设计、系统详细设计,以及在文中末尾对本章做了总结。3.1系统总体架构设计系统的总体设计分为两个核心后端系统,分别是用客户端系统和管理端系统,如图3-1所设计。系统通过必要的后端组件对客户端系统和管理端系统的运转进行支持,消息通知与验证码等非持久化数据信息将存储在redis缓存中,如有必要,redis还能作为数据库缓存使用。数据库使用mysql。由于一般用户和管理员都属于用户的分支,且拥有相似的功能权限,故使用同一个数据库,方便数据管理。/图3-1系统总体框架图3.2数据库设计设计合适的数据库是最基础和最核心的,能够对数据进行持久化。本系统选用mysql数据库,它具有以下优势:更好的读写性能,因为和windowsframework绑定一起,底层操作系统级优势。而mysql则有可能oom,被linux无差别清理掉;数据可靠性更好:数据安全,一致性;存储过程。oracle和mssql都有强大的存储过程,银行系统甚至有规定凡是和资金相关的逻辑必须写在存储过程里,禁止写在应用程序里。而mysql的存储过程则一直是鸡肋。用c语言写的扩展存储过程,即运行在数据库内存中的程序代码,两个都支持,这个不在讨论范围;方便的性能监控。打开profiler,可以在生产环境中实时看各个query的执行详情,还可以按需过滤,而且不影响系统性能之内。3.2.1概念结构设计概念结构设计是将用户需求抽象为信息结构,E-R图是常用模型。E-R图由实体、属性、联系组成。正方形表示的是实体,椭圆形表示的是属性。实体间联系分为:一对一、一对多、多对多,共三种。该动漫论坛系统主要实体信息如下:用户信息实体图如图3-2。图3-2用户信息实体图帖子信息实体图如图3-3。图3-3帖子信息实体图楼层信息实体图如图3-4。图3-4楼层信息实体图楼中楼(二级回复)回复信息实体图如图3-5。图3-5楼中楼(二级回复)信息实体图由系统实体及实体间的关系得出该论坛系统的总体E-R图。一对一关系有:用户表对用户表(私信)。一对多关系有:用户表与帖子表、用户表与楼层表、用户表与楼中楼表、帖子表与楼层表、楼层表与楼中楼表。多对多关系有:用户表与用户表(关注)。矩形表示实体,椭圆形表示属性,菱形表示联系。如图3-6所示:图3-6总体E-R图3.2.2逻辑结构设计将概念结构设计的E-R图转换成为逻辑结构,确定关系模式属性和码。根据关系的需求将会对系统表添加关系表,系统的数据模型以数据表的形式展现。数据库表详细设计如下:用户信息基本数据表user,如表3-1。字段名类型是否为空缺省值中文idint否主键mailvarchar否邮箱pwdvarchar否密码user_namevarchar否昵称photovarchar是头像urlsexvarchar否保密性别birthdate否1970-01-01生日come_fromvarchar是来自expint否0经验值credit_degreeint否100信用度role_idint否1职位introvarchar是自我介绍showvarchar是个性签名create_timetimestamp是CURRENT_TIMESTAMP创建时间modified_timetimestamp是CURRENT_TIMESTAMP更新时间creatorvarchar是创建人modifiervarchar是修改人is_deletedvarchar是n删除标记表3-1用户信息表帖子信息基本数据表boki_post,如表3-2。字段名类型是否为空缺省值中文idint否主键user_idint否楼主idtitlevarchar否标题contentvarchar否内容last_replier_idint否最后回复者idreplies_countint否0回复数type_idint否1帖子类型is_topvarchar否n是否置顶report_statusint否1举报状态report_reasonint是举报理由create_timetimestamp是CURRENT_TIMESTAMP创建时间modified_timetimestamp是CURRENT_TIMESTAMP更新时间creatorvarchar是创建人modifiervarchar是修改人is_deletedvarchar是n删除标记表3-2帖子信息表楼层信息基本数据表boki_reply,如表3-3。字段名类型是否为空缺省值中文idint否主键post_idint否所属帖子iduser_idint否层主idfloor_noint否第x楼contentvarchar否内容replies_countint否0楼层回复数report_statusint否1举报状态report_reasonvarchar否举报理由create_timetimestamp是CURRENT_TIMESTAMP创建时间modified_timetimestamp是CURRENT_TIMESTAMP更新时间creatorvarchar是创建人modifiervarchar是修改人is_deletedvarchar是n删除标记表3-3楼层表楼中楼(二级回复)基本数据表orderDetail,如表3-4。字段名类型是否为空缺省值中文idint否主键storey_idint否所属楼层iduser_idint否回复者idcontentvarchar否内容report_statusint否1举报状态report_reasonvarchar否举报理由create_timetimestamp是CURRENT_TIMESTAMP创建时间modified_timetimestamp是CURRENT_TIMESTAMP更新时间creatorvarchar是创建人modifiervarchar是修改人is_deletedvarchar是n删除标记表3-4楼中楼信息表私信信息基本数据表boki_whisper,如表3-5。字段名类型是否为空缺省值中文idint否主键first_user_idint否甲second_user_idint否乙show_in_firstvarchar否y在甲列表显示show_in_secondvarchar否n在乙列表显示last_contentvarchar否最后一条私信create_timetimestamp是CURRENT_TIMESTAMP创建时间modified_timetimestamp是CURRENT_TIMESTAMP更新时间creatorvarchar是创建人modifiervarchar是修改人is_deletedvarchar是n删除标记表3-5私信信息表私信内容信息基本数据表boki_whisper_detail,如表3-6。字段名类型是否为空缺省值中文idint否主键whisper_idint否私信iduser_idint否发送方target_user_idint否接收方contentvarchar否内容create_timetimestamp是CURRENT_TIMESTAMP创建时间modified_timetimestamp是CURRENT_TIMESTAMP更新时间creatorvarchar是创建人modifiervarchar是修改人is_deletedvarchar是n删除标记表3-6私信内容信息表黑名单信息基本数据表boki_blacklist,如表3-7。字段名类型是否为空缺省值中文idint否主键user_idint否用户target_user_idint否被拉黑用户create_timetimestamp是CURRENT_TIMESTAMP创建时间modified_timetimestamp是CURRENT_TIMESTAMP更新时间creatorvarchar是创建人modifiervarchar是修改人is_deletedvarchar是n删除标记表3-7boki_blacklist信息表关注基本信息表boki_follow,如表3-8。字段名类型是否为空缺省值中文idint否主键user_idint否粉丝target_user_idint否被关注者create_timetimestamp是CURRENT_TIMESTAMP创建时间modified_timetimestamp是CURRENT_TIMESTAMP更新时间creatorvarchar是创建人modifiervarchar是修改人is_deletedvarchar是n删除标记表3-8关注信息表帖子收藏基本信息表boki_collection,如表3-9。字段名类型是否为空缺省值中文idint否主键user_idint否用户post_idint否收藏帖子titlevarchar否帖子标题create_timetimestamp是CURRENT_TIMESTAMP创建时间modified_timetimestamp是CURRENT_TIMESTAMP更新时间creatorvarchar是创建人modifiervarchar是修改人is_deletedvarchar是n删除标记表3-9帖子收藏表3.3客户端子系统详细设计由于该系统整体上使用了前后端分离的设计理念,后端使用springcloud的一些组件以实现服务之间的对接,后端统一数据请求接口为负载均衡ribbon,对该服务的请求会被转发到对应的客户端服务或对应的管理端服务。由于使用了请求转发,以及前后端分离,传统的通过session存储当前用户信息(id、userName、sessionId等)将不再生效,因此设计分离时将寻找新的认证方式。3.3.1客户端后端接口设计在使用前后端分离的开发过程中,由于前后端数据对接是主要是前端对后端的接口请求以达到数据增删改查的目的,因此在设计过程中对接口明确定义能够提高开发方向和提升开发效率。ribbon接口入口:http://localhost:8001/登录模块接口设计①登陆登陆请求:post请求:http://localhost:8001/cli/login请求数据:邮箱mail、密码pwd用户互动模块①发帖发帖请求,需要登陆后才能发帖post请求:http://localhost:8001/cli/post/send数据:主题title、内容content②关注关注他人post请求:http://localhost:8001/cli/user/addFollow/{targetUserId}从关注列表中移除post请求:http://localhost:8001/cli/user/removeFollow/{targetUserId}打开关注列表get请求:http://localhost:8001/cli/user/followList?page=我的粉丝get请求:http://localhost:8001/cli/user/myFans?page=动态与消息获取通知数量get请求:http://localhost:8001/cli/notice/count打开通知列表get请求:http://localhost:8001/cli/notice/list移除一条通知post请求:http://localhost:8001/cli/notice/remove/{id}清空通知列表post请求:http://localhost:8001/admin/login④私信发起或打开私信post请求:http://localhost:8001/cli/whisper/open/{targetUserId}发送私信post请求:http://localhost:8001/cli/whisper/send数据:私信id、对方的userId、内容content打开私信列表get请求:http://localhost:8001/cli/whisper/list?page=从列表中移除私信post请求:http://localhost:8001/cli/whisper/remove/{id}拉黑post请求:http://localhost:8001/cli/whisper/addBlacklist/{targetUserId}黑名单get请求:http://localhost:8001/cli/whisper/blacklist?page=从黑名单中移除post请求:http://localhost:8001/cli/whisper/removeBlacklist/{blacklistId}⑤回复打开帖子,这是论坛最基本的帖子浏览功能get请求:http://localhost:8001/cli/p/{postId}?page=加载楼层回复数据,加载二级回复get请求:http://localhost:8001/cli/p/reply/open?id=&page=回帖请求,需要登陆后才能回帖post请求:http://localhost:8001/cli/post/reply/send数据:帖子id、内容content回复层主,二级回复也需要登陆post请求:http://localhost:8001/cli/post/storeyReply/send数据:楼层storeyId、内容content⑥举报举报帖子post请求:http://localhost:8001/cli/post/report数据:帖子id、举报理由reason举报楼层post请求:http://localhost:8001/cli/post/reply/report数据:楼层id、举报理由reason举报二级回复post请求:http://localhost:8001/cli/post/storeyReply/report数据:二级回复id、举报理由reason用户权益模块注册与改密校验码发送请求,这是用于注册和修改密码时获取校验码的请求:get请求:http://localhost:8001/cli/login/sendCheckCode/{mail}注册请求,注册时需要校验码:post请求:http://localhost:8001/cli/login/register请求数据:邮箱mail、密码pwd、昵称userName、校验码checkCode改密请求,修改密码、找回密码的请求,需要配合校验码进行改密:post请求:http://localhost:8001/cli/login/modifyPwd数据:邮箱mail、新密码pwd、校验码checkCode②基本信息用户个人信息get请求:http://localhost:8001/cli/user/info修改个人信息post请求:http://localhost:8001/cli/user/modifyInfo数据:性别sex、生日birth、来自from、简介intro、签名show、更改头像post请求:http://localhost:8001/cli/user/modifyPhoto数据:头像url我的发帖历史get请求:http://localhost:8001/cli/user/replyHistory?page=我的回复历史get请求:http://localhost:8001/cli/user/replyHistory?page=③等级用户等级功能不对外暴露任何接口。收藏收藏帖子post请求:http://localhost:8001/cli/user/collect/{postId}移除收藏的帖子post请求:http://localhost:8001/cli/user/removeCollection/{postId}帖子收藏列表get请求:http://localhost:8001/cli/user/postCollection?page=删帖删除帖子post请求:http://localhost:8001/cli/post/delete/{id}删除楼层post请求:http://localhost:8001/cli/post/reply/delete/{id}删除楼中楼post请求:http://localhost:8001/cli/post/storeyReply/delete/{id}⑥信誉度信誉度模块不对外暴露任何接口。⑦违规违规在用户客户端不提供任何接口。⑧其他图片上传post请求:http://localhost:9001/image/upload数据:图片fileName图片下载get请求:http://localhost:9001/images/{fileName}3.3.2客户端关键代码与难点实现(1)请求拦截由于这是一个开放性的动漫论坛,在设置请求拦截的时候,应该避免未登录的游客正常浏览被拦截导致无法看到帖子或其他开放内容。系统接口设计中,大部分接口属于需要验证的接口,因此在设置请求拦截时我选择了拦截所有请求,并开放部分接口。关键代码如下:InterceptorRegistrationregistration=registry.addInterceptor(clientInterceptor);

registration.addPathPatterns("/**");

registration.excludePathPatterns(

"/p/**",//开放性页面

"/",//首页

"/login/register",//注册

"/login/sendCheckCode/*",//发送邮箱校验码

"/login",//登录

"/static/**"//静态资源

);登陆校验在本动漫论坛中,属于前后端分离开发,且后端是微服务架构风格,因此传统的HttpSerevletSsession将无法继续用于存储临时信息。本系统后端token+redis的形式,认证用户登陆,关键代码如下:userId=JWT.decode(token).getAudience().get(0);

MaptokenCache=redisTemplate.opsForHash().entries(Common.TOKEN+userId);

if(tokenCache.size()==0){

thrownewBusinessException().setType(RequestResultCode.LOGIN_TODO);

}

Stringtime=tokenCache.get("time").toString();

JWTVerifierjwtVerifier=JWT.require(Algorithm.HMAC256(time)).build();

jwtVerifier.verify(token);

redisTemplate.expire(Common.TOKEN+userId,1800,TimeUnit.SECONDS);附加了@TOKEN注解的方法,每次被请求都将执行一次校验,使用redis临时存放token,token有效期为半个小时,每次请求后刷新有效期。在负载均衡服务端使用了请求模板,请求时将头部将带上TOKEN字段。@Bean

publicRequestInterceptorrequestInterceptor(){

returnrequestTemplate->{

ServletRequestAttributesattributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();

if(null!=attributes){

HttpServletRequestrequest=attributes.getRequest();

if(request.getHeader(TOKEN)!=null){

requestTemplate.header(TOKEN,request.getHeader(TOKEN));

}

}

};

}邮箱校验码邮箱校验码使用了腾讯提供的qq邮箱服务,配合spring框架提供的邮箱发送类进行验证邮件的发送。@Autowired

privateJavaMailSenderImplmailSender;验证码采用即时生成8位数字的方式,生成后5分钟内有效。publicStringrandomCode(){

Randomrandom=newRandom();

Stringcode=random.nextDouble()+"";

code=code.substring(code.length()-8);

returncode;

}全局异常捕获一个系统,使用时,会不可避免地发生异常,但是如果异常被清晰地展示到页面上,比如404错误,403错误,或者后端错误日志打印等,这是非常不可取的,必须采取措施。本论坛采用了spring提供的一个全局异常处理功能,配合我所写的BusinessException自定义运行时异常类,实现代码异常时也能够给返回有效的信息。全局异常:@ControllerAdvice

publicclassBokiExceptionHandler{...}自定义BusinessException@ResponseBody

@ExceptionHandler(BusinessException.class)

publicResultVOhandleValException(BusinessExceptione){

if(e.getMessage()!=null){

log.warn("原因:"+e.getMessage());

}

if(e.getType()!=null){

(e.getType().getCode()+e.getType().getMsg());

returne.getType().getResult().setData(e.getInfo());

}else{

(RequestResultCode.SERVER_ERROR.getCode()+RequestResultCode.SERVER_ERROR.getMsg());

returnRequestResultCode.SERVER_ERROR.getResult();

}

}用户等级的制定用户等级的制定参考了较为成熟的百度贴吧,等级划分为1到10级,依次需要经验值0,100,300,1000,3000,6000,10000,15000,22000,30000,每次发帖+5点经验,每次回帖+3经验,每次二级回复+2经验,发送成功后进行结算。使用线程进行结算,关键代码:发帖经验结算://经验+5,告辞

postDao.updateExpById(dto.getUserId(),5);回帖经验结算://经验结算,楼主回复自己的贴,经验+2

if(postDao.findPostByIdAndUser(dto.getPostId(),dto.getUserId())!=0){

postDao.updatePosterSendReply(po);

//非楼主回帖,帖子回帖数更新,楼主经验+1,层主经验+3

}else{

postDao.updateReplierSendReply(po);

}二级回复经验结算://经验结算,楼主回复自己的贴,经验+2

if(postDao.findPostByIdAndUser(dto.getPostId(),dto.getUserId())!=0){

postDao.updatePosterSendReply(po);

//非楼主回帖,帖子回帖数更新,楼主经验+1,层主经验+3

}else{

postDao.updateReplierSendReply(po);

}信誉度与奖赏的挂钩用户初始信誉度为100,每天将会+1,直到150点。当用户信誉度低于30的时候将会被封禁,直到信誉度达到50点时解封。每次被管理员删帖将会减少10点信誉度,删楼将会减少5点信誉度,删除二级回复将会减少5点信誉度。使用mysql定期事件执行任务。动态与消息的实现通知的实现使用了通知生成类,统一管理了通知的生成。publicenumNoticeMessage{

/**

*类型1私信通知

*/

TYPE_1(1,"%s在私信中回复了你:“%s”。"),

TYPE_2(2,"%s在“%s”%s楼回复了你:“%s”。"),

TYPE_3(3,"%s在“%s”%s楼@了你。"),

TYPE_4(4,"您的帖子“%s”被管理团队删除,原因是%s,您的信誉值-10。"),

TYPE_5(5,"您的楼层“%s”被管理团队删除,原因是%s,您的信誉值-5。"),

TYPE_6(6,"您的回复“%s”被管理团队删除,原因是%s,您的信誉值-5。"),

TYPE_7(7,"您关注的大佬%s发帖了:“%s”。");

privateIntegertype;

privateStringraw;但是通知生成后可能会发送给许多人,不可避免地占用请求时间,此时有两个实现思路:方案一、使用线程发送通知,可能有大量通知需要发送。方案二、由用户获取通知,可能有大量通知需要获取。鉴于我所设计的系统属于中小型系统,因此采取了方案一生成并发送通知。(8)结果数据类返回数据使用统一的数据类,其中泛型装载了返回的数据主体。@Data

@Accessors(chain=true)

publicclassResultVO<T>{

privateIntegercode;

privateStringmsg;

privateTdata=null;

}其中的状态code和附带信息由枚举类RequestResultCode提供,以下为部分代码:publicenumRequestResultCode{

/**

*数据错误

*/

ERROR_MAIL(2001,"邮箱格式错误."),

ERROR_DATE(2001,"错误的日期."),

MAIL_ALREADY_EXIST(1000,"邮箱已被注册."),统一的数据格式使得请求后获得的数据能够容易地被处理和分析。3.4管理端子系统详细设计由于该系统整体上使用了前后端分离的设计理念,后端使用springcloud的一些组件以实现服务之间的对接,后端统一数据请求接口为负载均衡ribbon,对该服务的请求会被转发到对应的客户端服务或对应的管理端服务。由于使用了请求转发,以及前后端分离,传统的通过session存储当前用户信息(id、userName、sessionId等)将不再生效,因此设计分离时将寻找新的认证方式。在使用redis缓存认证信息后,管理端的认证也能够通过用户客户端共享,极大方便了管理端的开发流程。3.4.1管理端后端接口设计(1)登录模块接口设计①登陆登陆请求:post请求:http://localhost:8001/cli/login请求数据:邮箱mail、密码pwd论坛总览模块数据总览数据统计接口get请求:http://localhost:8001/admin/statistics用户信息模块违规处理帖子举报待审核列表get请求:http://localhost:8001/admin/post/report/{type}?page=驳回举报post请求:http://localhost:8001/admin/post/report/reject数据:举报类型type、id、执行者userId、举报通过post请求:http://localhost:8001/admin/post/report/pass数据:举报类型type、id、执行者userId、理由reason发帖记录用户列表,条件查询get请求:http://localhost:8001/admin/user/list?elem=&maxLevel=&minLevel=&maxCreditDegree=&minCreditDegree=&isBanned=&page=用户精准查询get请求:http://localhost:8001/admin/user/info?idOrMail=用户发帖历史get请求:http://localhost:8001/cli/user/replyHistory?page=用户回复历史get请求:http://localhost:8001/cli/user/replyHistory?page=赏罚模块删帖不提供直接删帖接口,管理员删帖应该通过举报流程。小黑屋封禁用户post请求:http://localhost:8001/admin/user/ban数据:目标用户userId、封禁天数days、解封用户post请求:http://localhost:8001/admin/user/release/{userId}信誉度信誉度不暴露任何接口,而是根据用户行为结算。帖子装饰帖子加精或降级post请求:http://localhost:8001/admin/post/upgrade数据:加精或降级type、帖子postId帖子置顶post请求:http://localhost:8001/admin/post/setTop数据:帖子postId、置顶天数topDays其他晋升或贬职,站长权力post请求:http://localhost:8001/admin/user/role/change数据:用户id、角色roleId3.4.2管理端关键代码与难点实现(1)关于用户举报审核成功被管理员删帖的情况,应该发送通知给被删贴用户。假如用户被删贴却得不到任何通知,这并不友好。NoticePOpo=newNoticePO()

.setUserId(elem.getTargetUserId())

.setCreator(elem.getFromUserId().toString())

.setNotice(msg.createNotice(elem))

.setTypeId(msg.getType());

//持久化一条通知

noticeDao.insertNotice(po);

//设置通知数

setKeyValueByUid(elem.getTargetUserId());管理员删帖时应该把该帖子下的所有楼层和二级回复,同时被举报用户信誉值应该被结算。--删帖,连同回复,楼中楼一起删

UPDATEboki_postSETis_deleted='y',report_status=3,report_reason=#{reason}

WHEREid=#{id}ANDuser_id=#{userId}ANDreport_status=2;

UPDATEboki_replySETis_deleted='y'WHEREpost_id=(

SELECTidFROMboki_postWHEREid=#{id}ANDuser_id=#{userId}ANDreport_status=3

);

UPDATEboki_storey_replybsr,(

SELECTbr.idbridFROMboki_replybr

JOINboki_postbpONbr.post_id=bp.id

WHEREbp.id=#{id}ANDbp.user_id=#{userId}ANDbp.report_status=3

)aSETbsr.is_deleted='y'WHEREbsr.storey_id=a.brid;

--被举报者信誉值结算-10

UPDATEboki_userSETcredit_degree=credit_degree-10WHEREid=#{userId}ANDrole_id!=3;管理员删楼时应该连同所包含的楼中楼一起删除,同时帖子显示的回复数减少n+1,n表示楼层对应的楼中楼数。同时被举报用户信誉值应该被结算。--删楼,连同楼中楼一起删

--帖子回复数-(1+n)(n楼中楼数量)

UPDATEboki_postSETreplies_count=replies_count-(

SELECTCOUNT(1)+1FROMboki_storey_replyWHEREstorey_id=#{id}ANDis_deleted='n'

)WHEREid=(

SELECTpost_idFROMboki_replyWHEREid=#{id}ANDuser_id=#{userId}ANDfloor_no!=1

ANDis_deleted='n'LIMIT1

);

UPDATEboki_replySETis_deleted='y',report_status=3,report_reason=#{reason}

WHEREid=#{id}ANDuser_id=#{userId}ANDfloor_no!=1ANDreport_status=2;

UPDATEboki_storey_replySETis_deleted='y'WHEREstorey_id=(

SELECTidFROMboki_replyWHEREid=#{id}ANDuser_id=#{userId}ANDfloor_no!=1ANDreport_status=3

);

--被举报者信誉值结算-5

UPDATEboki_userSETcredit_degree=credit_degree-5WHEREid=#{userId}ANDrole_id!=3;管理员删楼中楼时,所属的楼层回复数减1,所属的帖子回复数减1,被举报者信誉值-5。--删除楼层回复

--帖子回复数-1

UPDATEboki_postSETreplies_count=replies_count-1WHEREid=(

SELECTbr.post_idFROMboki_replybr

JOINboki_storey_replybsrONbr.id=bsr.storey_id

WHEREbsr.id=#{id}ANDbsr.user_id=#{userId}

);

--楼层回复数-1

UPDATEboki_replySETreplies_count=replies_count-1WHEREid=(

SELECTstorey_idFROMboki_storey_replyWHEREid=#{id}ANDuser_id=#{userId}

);

UPDATEboki_storey_replySETis_deleted='y',report_status=3,report_reason=#{reason}

WHEREid=#{id}ANDuser_id=#{userId}ANDreport_status=2;

--被举报者信誉值结算-5

UPDATEboki_userSETcredit_degree=credit_degree-5WHEREid=#{userId}ANDrole_id!=3;3.5前端服务器详细设计由于该系统整体上使用了前后端分离的设计理念,前端使用国内较为成熟的VUE框架惊醒开发工作。选择VUE,是因为VUE具备了上手简单,技术沉淀厚,语法简易,沿用了js的数据风格,配合axios进行数据请求。另外,VUE的数据驱动视图的理念也非常符合近年来的web系统开发理念。前端的开发工具也有非常多,我在设计这个前端时,使用vscode进行开发,它的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论