网站首页   文章专栏   SpringBoot之从零搭建博客网站
SpringBoot之从零搭建博客网站
原创 2020-02-16 20:58 ApeNixX 2775浏览 SpringBoot

文字不够,图片来凑。

前言

为什么想要搭建这个博客?

博主是一名大三软件工程的学生。坚持学习课堂上未曾教授的java以及javaweb相关的知识,乃至学习Spring一系列的框架的过程尤为枯燥。每天看视频学习编程,“copy”视频中的代码运行让我就像是机器一样日复一日地重复着那些操作。而使得我能够坚持下去的兴趣,就是能够在不久的将来完成我自己的项目。也就有了我的个人博客网站。

编程是个脑力活,如果把它做成了体力活,这就代表是时候改变一下了

从中有什么收获?


  • 基于SpringBoot的完整全栈式的开发套路- 基于SpringBoot的完整全栈式的开发套路
  • LayUI框架的使用LayUI框架的使用
  • 后端使用SpringBoot+Mybatis,相比于SSM框架大量的配置开发更为方便,作为新手练手的javaweb项目来说是富有意义的:激发自己编程热情+熟悉SpringBoot整个开发流程+完成过后提高自己的成就感。
  • 懂得根据需求去GitHub上面使用优秀的开源插件,使得自己的项目锦上添花。
  • 对页面引擎 thymeleaf模板 的熟悉掌握。相比于连SpringBoot都官方遗弃的jsp来说,掌握thymeleaf是刻不容缓的。(JSP本质上是servlet,内含java代码,实际上没有做到前后端分离,所以在大环境都推崇前后端分离的情况下,着实不必再使用JSP)

文章概述

  • 关于项目,对于学习Springboot是个挺不错的练手项目,可以让你在烦恼的业务逻辑中保持一颗纯洁的心
  • 如何从零开始,使用Springboot开发项目
  • 开发前的一些准备工作,以及思考项目整体结构与思路
  • 记录开发过程中遇到的一些难题以及bug
  • 总结目前博客网站的一些优缺点
  • 思考整个项目有哪些可以优化的地方,以及有哪些可增加的功能

页面展示

首页展示


文章编辑


后台管理


用户个人中心

项目需求

项目背景

对于初学Springboot的朋友来说,最好的一个学习方式就是那一个功能俱全的项目来练练手,通过自己重构项目来发现其中的潜在难题,并且也能很好的在编码过程中总结和发现问题、解决问题。使用Springboot开发的博客系统,简单并且实用,适合做练手项目。

功能需求

主页
  • 博客汇总,以列表形式展示文章,并附上文章作者、发布日期、分类情况以及文章简要

  • 能够以分类形式查看文章

  • 能够以时间列表方式归档文章

  • 可实现通过标签查找所有相关文章

  • 个人介绍、联系方式

  • 博客网站更新记录

  • 友链链接

后台管理
  • 网站仪表盘,记录网站访客量情况

  • 文章管理

  1. 分页展示文章信息
  2. 可对文章进行再编辑以及删除文章
  • 发布文章
  1. 使用markdown编辑器,支持插入代码,插入图片等功能
  2. 文章可选择分类和标签,以及转载文章支持链接原作者文章
  • 分类管理,支持增加、删除、修改分类

  • 友情链接

  1. 支持增加友情链接
  2. 支持删除友情链接
  • 反馈信息管理,可查看用户反馈信息

安装部署需求

  • 可以使用docker方式部署,也可支持-jar方式
  • 使用springboot自带方式打包

非功能需求

性能需求
  • 首页响应时间不超过2秒钟
  • 文章页响应时间不超过3秒钟

项目设计

总体设计

本项目用到的技术和框架

  1. 项目构建:Maven
  2. web框架:Springboot
  3. 数据库ORM:Mybatis
  4. 数据库连接池:Druid
  5. 分页插件:PageHelper
  6. 数据库:MySql
  7. 缓存:Redis
  8. 前端模板:Thymeleaf
  9. 文章展示:Editor.md

本项目中的关键点

  1. 采用Springboot开发,数据库使用连接池加orm框架的模式,对于系统的关键业务使用Redis缓存,加快相应速度。
  2. 整体系统采用门户网站+后台管理+用户个人中心的方式搭建,门户网站展示博客内容以及博主介绍,后台管理用于编辑文章,查看反馈,管理评论留言。
  3. 使用阿里云OSS进行静态资源存储,以及CDN全站加速。
  • 环境
工具名称
开发工具IDEA
语言JDK1.8、HTML、css、js
数据库Mysql5.6
项目框架SpringBoot
ORMMybatis
安全框架SpringSecurity
缓存Redis
项目构建Maven
运行环境华为云ECS

打包、部署和运行

  • 本项目采用Springboot的maven插件进行打包,打包结果:****.jar
  • 部署方式:使用 nohup java -jar ******.jar >******.log 2>&1 &的方式,后台启动项目,并在该路径下生成运行日志

开发流程

数据库CRUD
  • controller层中编写前端接口,接收前端参数
  • service层中编写所需业务接口,供controller层调用
  • 实现service层中的接口,并注入mapper层中的sql接口
  • 采用Mybatis的JavaConfig方式编写Sql语句。由于并没有使用Mybatis的逆向功能,需要自己手写所有sql语句
  • 关于事务的实现,在启动类中开启事务,并在service层需要实现事务的业务接口上使用@Transactional注解,还是十分方便的
  • 本项目开发并不是很难,只是在业务的实现上比较复杂
页面与展示
  • 作为一名后端开发,对于css的功力有所欠缺,这里我使用了LayUI,极大的减少了页面的开发难度,特此感谢
  • 前端页面与后端的交互主要是在controller包中,并使用Thymeleaf渲染页面。
  • 自定义异常处理页面,通过重写WebMvcConfigurerAdapter实现自动跳转到404、403页面
其他功能
  • 使用lazyload插件实现页面图片懒加载
  • 后台实时记录当天访客量,便于了解博客日常访问量
  • 分析访问量最多的数据,主要在于文章访问部分,将文章放入Redis缓存。每次编辑完文章后,更新缓存
  • 使用阿里云互联网中间件的业务实时监控服务,对于网站性能的了解以及优化有很大的帮助
网站建设
  • 服务器选用的是华为云ECS
  • 域名是华为云上购买的.top的域名
  • 网站备案以及公安机关备案,后者备案时间较短但是那个备案网站经常挂掉,所以公安机关备案还得看运气。而网站备案时间就比较长了,按照华为云的流程走大概1个月左右时间,需要上传个人身份信息以及邮寄个人资料过去。

总结

开发中遇到的难点

  • 要实现在一个页面进行权限验证,如果验证不成功会跳转到登录界面,并且登录成功后还要返回到之前界面,这里由于对SpringSecurity内部原理的不了解,所以我这里采用的方法是利用请求头和响应头存储url,并在登录成功后的页面出跳转到响应头中存储的url处
  • 上传头像处使用上传头像至阿里云的OSS对象存储中,由于上传问题并没有返回上传成功后的图片url地址,于是只好设置OSS的Bucket为公共读权限,然后当上传成功后手动拼接图片url并存入数据库
  • 项目中最大的难点还是莫过于页面css的设计,但是使用了LayUI后极大的解决了这个问题,只需修改少量css就能实现自己所需要的样式

博客网站优缺点

  • 首先最大的一个缺点就是在前端页面设计过程中混用了一些Bootstrap,导致依赖过于复杂,不便于后期修改,已经网站上有一些隐藏的bug
  • 对于页面用户体验以及反馈功能的设计便于用户对于浏览过程中出现的问题进行反馈
  • 后端部分明确的分工有利于项目的理解与维护

项目整体优化

  • 目前项目首页以及文章页响应时间过长,后期最好优化到1s响应时间
  • 定时定期进行数据库的备份,防止出现网站被攻击后数据丢失的风险
  • 手机端浏览文章页面会出现代码自动换行问题,不便于浏览过程

未来需增加的功能

  • 文章置顶功能
  • 用户可在线写文章功能
  • 用户收藏文章功能

以上就是我在博客网站搭建过程后的所有总结记录,可能会有遗缺部分,等以后想起来了再来修改吧。

版权声明:本文由ApeNixX原创出品,转载请注明出处!

本文链接:http://www.apenixx.top/article/details/1533196734


  SpringBoot    个人博客    原创 

赞助本站,网站的发展离不开你们的支持!
来说两句吧
最新评论
  • 不落阁
    不落阁
    我为大家做了模拟留言与回复!试试吧!

    Absolutely
    Absolutely这是用户回复内容

    2017-03-18 18:26回复

    Absolutely
    Absolutely 回复 不落阁这是第二个用户回复内容

    2017-03-18 18:26回复