目录
一、前言
1.1、项目背景
1.2、项目需求
1.3、部分项目截图
1.3.1游客端编辑
1.3.2用户端
1.3.3管理员端
1.3.4信息发布端
二、项目概述
2.1、项目总述
2.2、技术手段
三、设计思路
3.1、数据库UML设计(home)
3.2、功能分析
3.3、建表
3.4、搭建项目架构
3.4.1、项目建立
3.4.2、后端建设
3.4.3、配置依赖
3.4.4、前端建设
3.4.5、接口设计
四、项目内容
4.1项目结构
4.1.1 后端
4.1.2前端
4.2登陆
4.3Result风格
4.2.2.1什么是result风格?
4.2.2.2怎么使用
4.3分页显示
4.4评论功能
4.5信息发布(项目最核心部分)
五、遇到问题
5.1后端篇
5.2前端篇
5.2.1ajax写接口
5.2.2框架的使用
5.2.3为什么我只使用html不用js呢
5.3项目上线
六、项目上线(主要是流程,内容留意mysql部分的配置即可)
6.1购买服务器
6.2配置服务器
6.3下载安装xshell
6.4连接服务器并且下载jdk
6.5在服务器那下载mysql8
6.5.1mysql版本不同
6.5.2mysql密码是空的怎么改
6.5.3mysql卸载怎么卸载干净
6.5.4 安装mysql8
6.6 访问房地详细报500错误
七、总结
此项目前端有部分来源于gitee和github,如有雷同纯属意外。我根据自己的需求和水平,主写后端和数据库部分,这个项目跟我以前做过的个人博客有点类似,都是属于信息发布系统,最核心部分就是commonmark把markdown转化为html,具体我后面会详细介绍。因为我主后端,所以前端部分不会详细描述,核心技术点会描述。
系统角色:游客(没注册)、用户(注册了账号)、管理员
管理员可以对用户详细、房地信息、类型、标签进行发布管理
用户可对个人信息、本人房地信息发布管理
游客在浏览了首页遇到合适的房子,无论是租房买房还是出租卖房,针对用户对应需求可以留言或者打通用户发文留下的电话来联系用户。
此项目分为前台和后台、页面适配移动端,用户可进行个人信息修改,房地信息发布,管理员可进行用户个人信息修改、房地信息发布修改,评论、标签、分类管理、游客可以在评论区评论留言。
前端:Semantic UI、thymeleaf、js、html、bootstrap
后端:SpringBoot、Spring、SpringMVC、Mybatis
插件:commonmark、markdown、lombok、logback
工具:idea、postman、maven、xhell、navicat
环境:阿里云ecs服务器一台(选的是centos7.9)、mysql8、jkd8
我记得我asp.net老师说过,一个项目只要解决数据库的关系就完成项目一大半工作了,我的数据库水平比较拉,所以建立的都是基本表,能后端实现的,就不在数据库实现了,下面是我数据库的内容。
在我们得知需求以及数据库的构造后我们就开始建立表格了,这里推荐使用navicat
首先就是建立个springboot的开发环境,我之前的博客有https://blog.csdn.net/weismwonameshuai/article/details/122282690?spm=1001.2014.3001.5502
然后在后端建立这四个最基本的包,当然,不是说其它不重要,只是springboot项目也是mvc结构的,所以控制层、数据层和服务层必须有,同时实体类放在了pojo,命名看个人喜欢,跟动力节点学的喜欢把mapper写成dao,pojo写成domain,我是吃百家饭学的,主流还是这样命名。
对于pom进行依赖的配置,刚开始配个mysql就行了,springboot起步依赖建立项目时候会自动导入(..答辩完后会贴代码)
对于前端,刚开始当然是不写 ,后面写个简单接口就行了(..答辩完后会贴代码)
接口采用的是result风格,后续也会讲解result风格的配置要求。
登陆这块用到的技术手段就很常见了,拦截器结合session进行判断是否非法访问
当用户登陆后在session中会存储一个user的key,里面有用户的个人信息,然后登陆成功了后,用户会访问到用户的后台系统,此时拦截器发挥作用,这里重写了HanderInterceptorAdapter这个类,当用户访问后台,此时就会经过UserIntercepter这个类,然后就会判断session是否存在,存在就不拦截。当用户退出后,会注销session,所以会再次拦截访问后台管理。同理管理员登陆也一样。
REST的核心原则是将你的API拆分为逻辑上的资源。这些资源通过http被操作(GET ,POST,PUT,DELETE)。
简单来说就是接口以资源名字为主,然后通过发送请求方式的不同来区分增删改查的操作
GetMapping是查,PostMapping是添加、PutMapping是修改,DeleteMapping是删除
例如这个:
以前地址栏
例如:http://localhost:8080/index?id=1
restful风格后的地址栏:
例如:http://localhost:8080/index/1
配置pom
org.springframework.boot
spring-boot-starter-thymeleaf
2.3.1.RELEASE
配置yml(application)文件
spring:
mvc:
hiddenmethod:
filter:
enabled: true
分页显示思路大体可以分成三种,一种是后端获取所有资源全部反馈给前端,前端再进行分页处理,一种是前端需要显示的部分资源再部分获取,还有一种是后端所有资源获取,然后后端分好每一次显示的资源数量,再发给前端。
三种方法都可以,我这个项目用的是第二种,以为第二种对于前端需要的能力较弱,我主后端,所以这个方法对我来说比较简单,只需要获取size和begin这两个参数就行了
评论区最麻烦的就是回复功能呢,在我找了好多篇博客以及上gitee上参考别人设计才想到用父id和子id这个想法(这里忘记把博主去掉了,原项目改编于一个个人博客项目),然后数据库又要改了
信息发布这点就很简单了,我直接用回以前写个人博客那个项目里面的markdown插件,在用commonmark这个插件把markdown写的内容转化成html显示。
后端遇到bug我之前也开了个帖子写,后面没更新(过年拜访亲戚多,只能晚上再敲代码),无非就是依赖版本,接口写错,mapper.xml里面数据库漏了参数,异常抛出没有处理,拦截器写错天天404,说多了都是眼泪,以后工作后完善bug帖。
springboot毕设开发bug帖(不定期添加bug和解决思路)_溯逸的博客-CSDN博客
前端真的一生之敌,当时不是为了考研就去把前端vue也学了,现在考研也寄了,前端也半桶水,靠着点js和ajax写接口太难受了,后面复习了springboot里面自带的前端thymeleaf后才好点,起码会在前端写循环判断这些基本的语法了。感谢菜鸟教程以及csdn让我完成这个项目。
这里我遇到个卡了我四五个小时的坑,ajax使用后,后端检测数据都是正常的,sout大法,但是返回到了前端无反应,我现在还没搞懂,然后翻回去看了看以前写ssm船只管理系统
这个项目后,发现也是一样的写法,现在还没搞懂,我新建了个项目测试又正常,真的很谜,最后采用了 经典
为什么我使用了Semantic UI又使用bootstrap,因为菜,我一开始使用Semantic UI是因为上一个写过的个人博客项目是用这个写导航栏,后面添加了个人头像和退出功能,而我以前只学过boostrap怎么办呢,直接加上bootstrap来写,究极缝合怪。
这个是因为我要用thymeleaf,而我在yml文件配置配置thymeleaf在html文件里实现(偷懒)。
项目上线遇到的问题以及解决思路会在下一章节
SpringBoot项目部署到阿里云服务器详细步骤_allen_csdns的博客-CSDN博客_spring项目部署到服务器
这里我选择了阿里云ecs,为什么选择这个呢,因为新用户免费试用一个月,这是我选择他最主要的原因,租借流程可以看上面这篇博客,这篇博客啥都好,就是没有mysql那块安装
配置服务器也是看上面那篇博客,不好剽窃别人的内容
看上面博客
继续看上面博客
因为上面的博客里面没有讲mysql在租界服务器怎么配置,所以我会详细讲这个
就是这点卡了我八个多小时,从3月3下午两点搞到了3月3晚上十一点,
一开始我装了mysql5.6,但是我本地项目是mysql8.2,导致导入sql文件时候疯狂报错,这点根据了这篇博客解决了出现导入sql文件错误原因是版本不兼容
CentOS7 安装MySQL;修改MySQL默认密码;开放远程连接;当前mysql用户是一个空用户@localhost 而不是root用户,所以看不了其他数据库的解决_zmx8023zmj的博客-CSDN博客_localhost空用户
噩梦开始来说,因为我一开始下载的mysql版本是5.6,然后测试项目上线发现前端房地信息显示的全是????,然后我就排查了,没理由本地项目运行正常,服务器那边就故障了,排查很久也没发现问题,最后灵机一动想会不会是数据库版本不同导致的。然后我下载和当时本地项目一样的mysql8,最后一直显示找不到sock什么的,搞得我一头雾水。看了很多篇安装mysql的帖子,我就发现会不会是我mysql没有卸载干净。想到这里时候已经是下午6点了,然后就开始找帖子卸载mysql,有说卸载/etc/my.cnf,有说把含mysql的文件全删掉,方正说法很多,试了我很久,最终一横心都试试,结果/etc/my.cnf卸载了,重装mysql没给我配上,裂开了。各种保持错。
解决博客连接:
Linux系统彻底卸载MySQL数据库_linux 卸载mysql_qq_41437844的博客-CSDN博客
MySQL(1)CentOS彻底卸载MySQL_redrose2100的博客-CSDN博客_centos卸载mysql
linux下安装mysql8_linux安装mysql8_罗大胖丶的博客-CSDN博客
这篇博客算得上我的曙光,当时我还纠结删除了 /etc/my.cnf这个文件怎么配置回来,看网上写的云里雾里了,从博客园找到开发者中心,又找回csdn,最后发现处发现错了,我直接找到了这个博客,里面直接配置了这个文件。当时已经是网上11点了,点了个宵夜准备熬大夜了,结果这篇博客保住了我的头发。
众所周知,500错误就是你服务器在处理请求时发生内部错误,当时打开xshell显示很清楚就是message这个网页错了,我排查到了12点,结果发现,是因为多了个/
本项目是开始于2023.1.17号下午开始截至到2023.2.4号凌晨1点完成,总耗时16天,基本保持了明天4小时以上,特殊时间(遇到大bug)一天敲了12小时代码(找帖子解决)。
从头到尾完成一个项目是提升个人编程水平最好的手段
其实从这个项目开始之前我已经四个月没有敲过代码了,很多技术都忘记了,这个项目开展之前我就开始复习ssm和springboot,写博客也是提升水平的最好手段,你写的是给予你的理解,写出来的就是你的,我看回以前的博客以及动力节点(从大二开始跟了动力节点的视频,加过群,有里面的文件)文件,thymeleaf部分基本就是照着springboot的pdf文件写了,哈哈哈。
以前敲得多代码好处还是有的,我现在还保留我大二到大四这段时间跟动力节点得代码,便于我遇到不会的点可以找回以前解决思路,好歹也是从动力节点得java-javaweb-ssm-springboot-springcloud-微服务学过来的,下一个项目打算在工作后开展,springcloud的电商项目,结合一下redis,提升一下个人水平,毕竟还没做过微服务的项目,更别说区块链技术了。
乾坤未定,你我皆是黑马!