文章目录

  • 写在前面
  • 开发环境
  • 说明
  • 技术栈
  • 功能模块图
  • 效果展示
  • 项目源码:
  • K.X的博客开发过程种遇到问题及解决方法
    • 问题一、
    • 问题二、
    • 问题三、
    • 问题四、
    • 问题五、

写在前面

又是一个学期又是一个课程设计,上学期写了一个web前端课程设计——K.X的博客这学期老师给了一些SpringBoot的demo练习;明白了如何可以进行前后端分离开发。选择这个课程设计也是给自己上学期的前端课程设计写一个后端。

开发环境

  • idea
  • Visual Studio Code
  • mysql 8.0
  • jdk 10
    服务器用的是SpringBoot内置的服务器

说明

本课程设计的前端目前还是直接引用的,后续会转换成node.js环境下的前端项目

技术栈

  • Spring Boot
  • Mybatis
  • Spring Security
  • Vue
  • Bootstrap

功能模块图

效果展示

博主模块:







访客模块
大部分页面效果和博主类似少了一些管理功能,添加了注册和评论发布功能。



PS:固定的底部栏的向上箭头图片添加了页面回滚至顶的效果,我怕它太小大家看不到;哈哈哈哈哈

项目源码:

项目源码以及sql文件已托管至github需要自取,可能是因为网络的原因,托管至github的图片显示错误;但clone或下载下来的图片显示是正常的。
由于经过了Spring Security安全框架的加密,数据库中看不到用户密码:在这里说一下,所有用户的密码都为:123456

K.X的博客开发过程种遇到问题及解决方法

问题一、

前端页面加载正常,但浏览器F12查看会有一个404错误

undefined:1 GET http://localhost:8080/blog/undefined 404

但是我的前端页面根本没有这个请求,查了这个问题也有一些其他的人遇到了这个问题;好像是和vue-router的使用有关,也没有找到具体的解决办法。

解决方法:

未解决。

问题二、

数据查询问题

由于想要实现在博客详情页面显示博客内容,以及所有评论和对应评论的用户和头像,就需要涉及到article(文章表)、comment(评论表)和user(表)连接查询问题。刚开始只是简单的写了三个表的连接查询,查出对应的字段。对于含有评论的文章这样查询是没有问题的,但当一个文章还没有评论时,comment(评论表)中无该文章相关数据,直接三个表连接查询查到为空。

初始sql语句

select a.*,c.id c_id,c.content c_content,c.created c_created,u.nickname u_nickname,u.photo u_photofrom article a,comment c,user uwhere a.id=c.articleid and c.userid=u.id and a.id=8 order by c_id desc;

解决方法:

查看了老师的博客例子发现老师使用的是左连接,两个进行左连接左连接会读取左边数据表的全部数据,即使右边数据表没有对应数据。(如果两个表中数据有相同部分,只显示一个) 没有写过sql的左连接,查了网上的都是两个表的左连接,自己试着照葫芦画瓢写三个表的左连接,要么语法错误要么找不到字段;后来想到了嵌套查询,先给user(用户表)和comment(评论表)连接查询,再与article(文章表)进行左连接查询,成功查到,解决当文章没有评论的不会报为空的查询。

sql语句

select a.*,c_id,c_content,c_created,u_nickname,u_photo
from article a left join
(select c.id c_id,c.articleid c_articleid,c.content c_content,c.created c_created,u.nickname u_nickname,u.photo u_photo from user u,comment c where c.userid=u.id) as b
on a.id=c_articleid where a.id=1 order by c_id desc;

PS:我这种方法肯定影响效率,一定有更好的语句解决;有知道的大佬欢迎来留言,为小弟指点迷津。

由于每个文章有多个评论,而每个评论又对应一个用户,也就出现了一对多中含有多对一

ArticleMapper.xml中关于查询文章详情语句:

<!--根据id查询文章详情,包括所有评论-->
<select id="selectArticleByID" resultMap="articleWithComment">select a.*,c_id,c_content,c_created,u_nickname,u_photofrom article a left join(select c.id c_id,c.articleid c_articleid,c.content c_content,c.created c_created,u.nickname u_nickname,u.photo u_photofrom user u,comment cwhere c.userid=u.id) as bon a.id=c_articleid where a.id=#{id} order by c_id desc;
</select>
<resultMap id="articleWithComment" type="Article"><id property="id" column="id"/><result property="title" column="title"/><result property="content" column="content"/><result property="created" column="created"/><result property="hits" column="hits"/><result property="zan" column="zan"/><result property="comments" column="comments"/><collection property="commentList" ofType="Comment"><id property="id" column="c_id"/><result property="content" column="c_content"/><result property="created" column="c_created"/><association property="user" javaType="User"><result property="nickname" column="u_nickname"/><result property="photo" column="u_photo"/></association></collection>
</resultMap>

评论管理时遇到类似问题,同样思路解决;不说是先进行的嵌套查询,再连接查询的;因为有些没有评论的博客就不需要再显示了。

问题三、

由于使用了Spring Security安全框架,User类实现了接口UserDetails;当通过Controller获取User时 新增了一些属性。

当更改用户信息时,报错无法构造实例

Cannot construct instance of `org.springframework.security.core.GrantedAuthority` (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type informationat [Source: (PushbackInputStream); line: 1, column: 487] (through reference chain: com.kx.pojo.User["authorities"]->java.util.ArrayList[1])

解决方法:

查了一圈博客发现问题是由于Jackson反序列化时,authorities字段无法进行序列化;可通过@JsonIgnore注解在序列化或反序列化时忽略某属性;Jackson提供了@JsonIgnore这个注解,用于在(反)序列化时,忽略bean的某项属性;

参考博客:https://www.iteye.com/blog/wwwcomy-2397340

问题四、

由于获取登录用户的信息,是通过Spring Security中的SecurityContextHolder获取,在更改用户信息后但是session中缓存的用户信息未更新,所以当再次获取登录用户的信息依旧是上次登录session缓存中的信息。

获取登录用户信息代码:

@GetMapping("/getuser")
public User getuser(){return (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
}

解决方法:

感谢江南一点雨大佬分享,无意间找到了大佬博客,有很多框架教学博客。具体解决文章:
https://mp.weixin.qq.com/s/jQZx4i4-vqjpBjpoJKJF4A

更新用户信息代码:

@PutMapping("/user")
public String updateUser(@RequestBody User user, Authentication authentication){userService.updateUser(user);SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(user,authentication.getCredentials(),authentication.getAuthorities()));return "success";
}

问题五、

加入Spring Security安全框架后,发现新加博客时插入本地图片显示错误。

解决方法:

查看login_page页面,提示未登录,估计vue-heml5-editor富文本编辑器的原因,为了使用方便在选择导入图片时,不用对用户进行认证。

查看file请求错误状态码为302;

并且请求的URL为:

http://localhost:8080/blog/file。

在后端设置/file服务任何用户都可以访问,可以不用登录。

选择本地图片显示成功。

后来在注册用户时也遇到了类似的问题,请求静态资源图片默认头像时显示错误类似方法解决,开启可不登录访问

欢迎大家运行测试,有问题随时滴滴我

动态网站开发课程设计——K.X的博客相关推荐

  1. java设计五子棋_JAVA课程设计+五子棋(团队博客)

    JAVA课程设计 利用所学习的JAVA知识设计一个五子棋小游戏 1.团队名称.团队成员介绍(菜鸟三人组) 杨泽斌[组长]:201521123049 网络1512 叶文柠[组员]:20152112305 ...

  2. 基于HTML个人博客网站项目的设计与实现——个人博客作品展示6页 HTML+CSS

    Web前端开发技术 描述 网页设计题材,DIV+CSS 布局制作,HTML+CSS网页设计期末课程大作业 | 个人博客网站 | 个人主页介绍 | 个人简介 | 个人博客设计制作 | 等网站的设计与制作 ...

  3. java课设 五子棋_Java课程设计 ————五子棋 (个人博客)

    JAVA课程设计 五子棋(博客个人版) •团队课程设计博客链接 •个人负责模块或任务说明 1.主框架类:设置棋盘窗体,颜色等 2.isWin方法:判断胜负 •自己的代码提交记录截图 •自己负责模块或任 ...

  4. java贪吃蛇博客带图片_java课程设计--贪吃蛇小队博客

    一.团队名称.团队成员介绍.任务分配,团队成员课程设计博客链接(以表格形式呈现) 学号 班级 姓名 任务 201721123103 网络1714 凌俊霄(组长) 蛇体.排行榜(数据库).排错.整体代码 ...

  5. java设计五子棋_JAVA课程设计(五子棋)--个人博客

    JAVA课程设计(五子棋)--个人博客(李金妲) 1.题目及我负责的内容 1.1题目:五子棋 1.2负责内容:游戏界面的GUI设计.背景音乐功能.趣味对战算法实现 2.本人负责的主要功能展示与代码截图 ...

  6. php动态网站开发论文,浅谈《基于PHP的动态网站开发》课程的项目案例设计

    电子论文 浅谈<基于PHP的动态网站开发>课程的项目案例设计 时间:2020年05月25日 所属分类:电子论文 点击次数: [摘要]在教学资源建设中,案例设计建设是非常重要的资源之一.运用 ...

  7. php动态网站开发报告,PHP动态网站开发pdf

    PHP动态网站开发 作者:赵增敏 PHP动态网站开发 出版社:电子工业出版社 PHP动态网站开发 内容简介 本书从Adobe Dreamweaver CS6可视化设计与手工编码的结合上详细地介绍了基于 ...

  8. ASP.NET动态网站开发培训-41.互动论坛制作(九、制作管理员详细页面)

    ASP.NET动态网站开发培训-41.互动论坛制作(九.制作管理员详细页面) 课程安排 添加并设置两个数据源控件 添加设置FormView控件 添加设置DataList控件 处理DataList控件的 ...

  9. php实训ppt,PHP动态网站开发实例教程教学全套课件(刘万辉)配套资料 任务3:运用目录与文件实现投票统计.ppt...

    PHP动态网站开发实例教程教学全套课件(刘万辉)配套资料 任务3:运用目录与文件实现投票统计.ppt (18页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! ...

最新文章

  1. 数据结构和算法:(3)3.2.1单链表的整表创建
  2. 战略配售基金成热点,它或成为入局CDR的最优选择
  3. 臭名昭著的sun.misc.Unsafe解释
  4. 如何使用Quartz Scheduler和日志记录创建Web应用程序
  5. arch linux 树莓派,树莓派上安装配置Archlinux
  6. 我的世界服务器自定义怪物怎么用,我的世界 教你自定义怪物属性
  7. hdu1829 A Bug's Life
  8. ******多个政府网站 嫌犯潜逃永州落网
  9. 如何让阿三 Windows 10、11 的恢复分区(Recovery Partition)恢复到 “盖茨” 模式
  10. c语言设计程序计算水仙花数,C语言水仙花数算法
  11. 类似Wordpress的建站系统
  12. 计算机黑屏不亮,win7休眠后唤醒电脑但屏幕一直黑屏不亮的解决方法
  13. 搜狗输入法不能再idea上输入中文
  14. 对话MVP | 清华博士马福辰:希望成为社区和生态发展强有力的“助攻”
  15. 如何让ipad成为电脑的扩展屏
  16. 复旦大学python教程_复旦大学大数据学院本科生课程学习手册.PDF
  17. 微信 编辑器 后台 英文单词 换行 分开
  18. 说一下浏览器垃圾回收机制?
  19. 思迪博软件在2021 Gartner主数据管理解决方案 魔力象限中被评为挑战者
  20. 计算机学生英语面试自我介绍ppt,【英语自我介绍ppt】_大学生英语自我介绍ppt...

热门文章

  1. electron系统托盘与右键菜单
  2. Windows 下 Docker 与 VMware 共存
  3. mysql 多实例 2019_mysql 多实例
  4. 看似简单的UI设计,为何比平面设计师的工资那么高?
  5. Adobe Premiere基础-素材嵌套(制作抖音结尾头像动画)(九)
  6. 关于如何解决img标签中图片超出盒子div范围的讨论
  7. 软考什么时候出成绩、领证书?戳进来看!
  8. 初级会计学基础概念期末复习总结
  9. 上海交通大学软件学院林老师幽默语录
  10. 计算机整体硬盘销毁,一种计算机用硬盘数据的物理销毁方法