简易博客(Java)"/>
模拟CSDN的简易博客(Java)
模拟CSDN的简易博客
- 1.项目需求:
- 2.项目介绍:
- 3.项目思路:
- a.实现所有文章查询和展示模块:
- b.实现用户登录、注册和退出模块:
- c.实现文章发布模块:
- (1)新建文章模块:
- (2)删除文章模块:
- (3)修改文章模块:
- 4.项目难点:
- 5.项目评价:
1.项目需求:
之所以打算做一个有关博客的项目,是因为个人一只很好奇CSDN的作业原理,好奇是怎样的的结构和技术在支撑它运作.以前只是会用CSDN写博客,就算好奇也没有能力模仿,自从了解到Java Web技术后,就一直想要尝试一下,但感觉工作量有点大也一直未尝试.当学习了Spring技术后,一方面为了巩固知识,一方面为了完成心愿,于是就做了这个项目.
2.项目介绍:
此项目是一个模拟 CSDN 实现的简易博客,可以实现用户的注册和登陆,文章发布,文章修改,以及文章分类的添加等功能。项目是基于 Spring Boot 框架进行搭建的,使用了maven 对项目依赖进行管理,通过 MyBatis 和 MySQL 完成数据的持久化存储,最后在前端使用到了 FreeMarker 模板引擎。
3.项目思路:
(1)首先由于本人对前端技术并不是十分熟悉,所以从老师那里获取了本项目的前端实现,之后后端的实现都是为了满足前端的需要;
(2)利用Maven管理项目所需的依赖,如:spring-boot-start-*自动配置依赖模块,为使用SpringBoot框架做准备;
(3)使用mysql创建项目所需要的一些表:user表、article表、category表和comment表,并为表插入一些数据用来测试;
(4)根据前端提供的展示效果和功能需求实现其后端业务逻辑:
a.实现所有文章查询和展示模块:
当用户访问首页时,查询数据库中所有文章信息并跳转到展示页面,向用户展示所有文章信息.此时用户状态分为已登录和未登录状态:(1)当用户状态处于已登录状态时,则用户具有查看文章、评论文章、新建文章和删除自己已发布的文章等功能;(2)当用户处于未登录状态时,仅有查看文章的功能.
b.实现用户登录、注册和退出模块:
当前模块也将用户状态分为两种,即已登录状态和未登录状态.此模块为已登录用户提供退出功能,为未登录用户提供登录和注册功能.用户注册的信息会保存到数据库中.
c.实现文章发布模块:
此模块是为已登录用户提供的,即为用户提供与文章操作相关的功能:如:新建文章、删除文章等功能.
(1)新建文章模块:
为用户提供新建文章的功能:实现方式为通过请求
/writer/forward/1/$ {activeCid}/editor 访问 ArticleController 中的 editor 方法,该方法通过请求路径中的 1 来判断本次请求是新增文章,于是修改 activeCid 的值为用户所选的文章分类 id.之后为用户提供输入文章标题和内容的页面,当用户输入完成时,通过点击"发布"按钮来实现文章的持久化存储,用户点击"发布",即通过请求 /writer/article/1/${activeCid} 访问 ArticleController 中的publish 方法,该方法通过调用 ArticleService 中的 insert 方法实现文章插入数据库的操作. insert 方法实际是调用了 ArticleMapper 的 insert 方法,即通过 SQL mapper (映射器) 实现了 ArticleMapper 接口中 insert 方法在映射文件中的 SQL语句映射.
(2)删除文章模块:
为用户提供删除文章的功能:此功能的实现方式较为简单,即用户通过点击"修改"链接,发起请求 /delete/${article.id} 访问 ArticleController 的 delete 方法,该方法最初始的实现也是通过 SQL mapper 实现 ArticleMapper 接口中 delete 方法在映射文件中的 SQL 语句映射.(需要注意的是在进行删除操作后,再进行插入操作的主键 id 可能不连续).
(3)修改文章模块:
为用户提供修改文章的功能:实现方式为通过请
求 /writer/forward/2/$ {article.id}/editor 访问 ArticleController 中的 editor 方法,该方法通过请求路径中的 2 来判断本次请求是修改文章.之后为用户提供修改文章标题和内容的页面,当用户修改完成时,通过点击"发布"按钮来实现文章的持久化存储,用户点击"发布",即通过请求 /writer/article/2/${article.id) 访问 ArticleController 中的publish 方法,该方法通过调用 ArticleService 中的 update 方法实现文章插入数据库的操作. update 方法实际是调用了 ArticleMapper 的 update 方法,即通过 SQL mapper (映射器) 实现了 ArticleMapper 接口中 update 方法在映射文件中的 SQL语句映射.
4.项目难点:
1.感觉项目最难的还是在于文件的配置,无论是 Maven的配置文件,还是 Mybatis 的配置文件都是重中之重,一个完整的配置文件是一个项目开发得以进行的基础.
2.在项目开发过程中我遇到了这样的问题:
问题描述:在使用 IDEA 进行数据库连接时,出现了如下的问题描述:
ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)
问题猜测:结合问题出现时间和最近对数据库进行的操作来推断,初步可判断问题与我执行过数据库密码修改操作有关.
问题解决方案:
针对问题进行资料搜索(搜索引擎),最终我找到了下面这篇博客:
采用第2种方法最终解决问题.
问题总结:我上次修改密码后没有进行权限刷新,问题可能由此产生.
3.还有一个需要注意的点就是执行删除操作后,可能会导致之后自增的主键不连续.
解决方案:在每次删除操作后,执行下面的语句:
lter table 表名 auto_increment = 1
即删除后,是自增主键重新从 1 开始自增.
5.项目评价:
项目优点:
1.使用Spring Boot框架简化了文件配置的工作, Spring Boot 提供了大量的 Spring 默认配置和"开箱即用"的依赖模块,它使用"习惯大于配置"的原则使得项目可以快速运行,同时在运行过程中可以进行监控.
2.使用Mybatis作为持久层框架,简化了对数据库的操作,提供了动态SQL,且能自动生成一些默认的SQL语句.
3.使用FreeMarker模板引擎可以很好的应用于MVC模式的视图展示阶段,即动态的转换模板数据.
项目缺点:
1.此项目在身份验证上所提供的的功能和其他正式发布的博客产品相比还是有很大不足的,如:未使用验证码验证,未使用加密算法给用户信息加密等;
2.博客的个性化功能也不完善,还不能使用户自由设置头像、文章背景图和主题等.
3.由于使用了Spring Boot框架中的很多默认配置,所以出现问题还是比较难定位.
更多推荐
模拟CSDN的简易博客(Java)
发布评论