有了我的已成型的项目和代码,可以更容易理解这篇文章。

本篇文章记录下自己博客项目评论功能实现的全过程,重点其实是评论回复功能。

【一,写评论】

写评论部分我没有使用富文本编辑器,只是单纯地使用了textarea标签,所以后台不需要作html标签的白名单检验(关于防范xss攻击,可以看我之前的一篇文章http://www.cnblogs.com/rixiang/p/6239464.html),只需要将所有字符作转义即可。

提交到后台需要做的处理:必要的校验,存储。然后生成消息。消息会在用户个人空间消息中心显示。提示用户有新的评论。

数据库存储方面,评论与文章的关系是双向多对一。设置懒加载和级联删除。

写评论部分就这些,没什么好说的。

【二,评论显示】

评论的显示是基于文章的。也就是说在点击、查看一篇文章的同时,在该文章下面显示对这篇文章的所有评论。

上面提到评论和文章是多对一的关系,可知,查询到文章即可查询到该文章的所有评论。也正因此,且鉴于自己博客评论数并不很多情况,对于评论的分页我没有采用数据库查询层的分页方法,而是用java写了分页、排序。我并不确定最好的实现。

/** Select the article by the id, and show it at the jsp page.

*

* @param HttpServletRequest request, Integer id, Model model

*

* @return the jsp page*/@RequestMapping(value= "/show", method =RequestMethod.GET)publicString showFromMainPage(HttpServletRequest request, Integer id,

Integer currentPage, Model model)throwsException {if (null ==id) {return "error";

}

Article article= articleService.find(id, Article.class);//click the link, then read_times ++

article.setRead_times(article.getRead_times() + 1);

articleService.update(article);

article=getArticleOfContentByUrl(article);//sort the comments

List comments =commentService.sort(article.getComments());

String username=userService.getUsernameFromSession(request);

model.addAttribute("article", article);

model.addAttribute("username", username);

model.addAttribute("article_id", id);if (currentPage == null || currentPage <= 0) {

currentPage= 1;

}int totalSize =comments.size();

PageInfo pageInfo= PageUtils.createPage(10, comments.size(),

currentPage);int beginIndex =pageInfo.getBeginIndex();long totalNum =pageInfo.getTotalCount();int everyPage =pageInfo.getEveryPage();if (totalNum - beginIndex

comments= comments.subList(beginIndex, (int) totalNum);

}else{

comments= comments.subList(beginIndex, beginIndex +everyPage);

}//评论分页

Page comments_page = new Page(comments, totalSize,

pageInfo);

model.addAttribute("comments_page", comments_page);return "showArticlePage";

}

以上代码可看出,访问文章路径需要两个参数,一个是文章id,一个是评论页,类似这样:http://118.89.29.170/RiXiang_blog/article/show.form?id=101&currentPage=2

根据id查询文章Article article = articleService.find(id, Article.class);

然后获取此文章的所有评论List comments = commentService.sort(article.getComments());

之后便可以根据评论总数、每页评论数、当前页这三项信息来创建分页类。关于分页工具类,可以看我之前总结的这篇文章http://www.cnblogs.com/rixiang/p/5257085.html

一般情况下,分页的逻辑要放在数据库查询层,而非java后台的service和controller层,我的这个博客项目也实现了基于jpa的查询分页底层工具类。

【三、评论回复功能实现】

评论回复是本篇的重点。这部分我是参考博客园的逻辑实现的,效果是这样:

之后我F12查看了下博客园的前端代码,然后便有了思路了。

下面先写下流程:

1,点击文章下评论栏【回复】链接后,调用javascript方法。

2,组合回复内容:@usrname [quote]+引用内容+[/quote]作为写评论的标签的初始value。

3,用户在二的基础上写了回复后,点提交,数据库会存储带有[quote]标签的Comment内容,由于是[]而不是<>所以不会因为xss跨站脚本校验而被拦截。然后生成回复的消息(用于通知被回复用户新消息)。

4,页面显示时,查询到的数据库中的Comment内容(带有[quote]标签的Comment内容),在前端显示前用javascript作字符串转化:

[quote]替换为

引用

xxxxxxxx(引用的内容)

[/quote]替换为

这样便完成了html的拼接。显示出来的将不是[quote][/quote],而是:

上述流程的第一二点的实现(quote拼接):

下面是基于jsp标签的评论显示:

#${comment.floor}楼 &nbsp${fn:substring(comment.date,0,16)} &nbsp&nbsp${comment.authorName}&nbsp&nbsp&nbsp&nbsp【回复】

${comment.content}

java 评论功能_博客项目实现文章评论功能(重点是评论回复)相关推荐

  1. 【博客项目】—用户删除功能(十二)

    [博客项目]-用户删除功能(十二)

  2. 【博客项目】—用户修改功能(十一)

    [博客项目]-用户修改功能(十一)

  3. 【博客项目】—用户新增功能(九)

    [博客项目]-用户新增功能(九) 此时的数据库里面已经新增了一个用户

  4. 【博客项目】—登录验证功能实现( 五)

    [博客项目]-登录验证功能实现( 五)

  5. 前后端分离_博客项目

    1,前后端分离 1.1 什么是前后端分离 ​ 前端: 即客户端,负责渲染用户显示界面[如web的js动态渲染页面, 安卓, IOS,pc客户端等] ​ 后端:即服务器端,负责接收http请求,处理数据 ...

  6. SpringBoot个人博客项目搭建—前端页面功能介绍(一)

    SpringBoot个人博客-前端页面功能介绍(一) 项目首页地址:https://blog.csdn.net/weixin_45019350/article/details/108869025 一. ...

  7. 各种排序算法的分析及java实现 - 残剑_ - 博客园

    排序一直以来都是让我很头疼的事,以前上<数据结构>打酱油去了,整个学期下来才勉强能写出个冒泡排序.由于下半年要准备工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间 ...

  8. 实战react技术栈+express前后端博客项目(8)-- 前端管理界面标签管理+后端对应接口开发...

    项目地址:https://github.com/Nealyang/R... 本想等项目做完再连载一波系列博客,随着开发的进行,也是的确遇到了不少坑,请教了不少人.遂想,何不一边记录踩坑,一边分享收获呢 ...

  9. springboot+jwt+shiro+vue+elementUI+axios+redis+mysql完成一个前后端分离的博客项目(笔记,帮填坑)

    根据B站up主MarkerHub视频制作的一个笔记 我的博客 B站博主链接: https://www.bilibili.com/video/BV1PQ4y1P7hZ?p=1 博主的开发文档: http ...

  10. java web论文_(定稿)毕业论文基于JavaWeb技术博客项目的设计论文(完整版)最新版...

    <[毕业论文]基于Java Web技术博客项目的设计论文.doc>由会员分享,可免费在线阅读全文,更多与<(定稿)毕业论文基于Java Web技术博客项目的设计论文(完整版)> ...

最新文章

  1. [实现] 利用 Seq2Seq 预测句子后续字词 (Pytorch)2
  2. 数据结构:排序趟数 / 比较次数与序列的原始状态有关的排序方法有哪些?
  3. mysql date string类型_mysql date类型与string转换
  4. 【原题】【noip 2003 T2】【动态规划】加分二叉树
  5. Oracle的Net Configuration Assistant 配置
  6. C++语言实现hello world代码
  7. C/C++常量数据类型
  8. 生成 oracle 连接串,Generator连接Oracle数据库生成Model报错
  9. 分布式云时代,腾讯云为何自研操作系统
  10. 基于android鲜花销售app,基于Android的鲜花APP设计任务书
  11. 辽宁移动计算机类专业笔试题库,2019辽宁中国移动笔试行测模拟题(八)
  12. Android Studio- 把SVN项目下载到 本地的 操作方法
  13. 数字图像处理复习总结
  14. 华为路由器接口IP地址如何配置与查看
  15. 陈松松:推荐制作高清视频必备的3个工具
  16. centos下ftp安装及添加账户
  17. EasyExcel - API
  18. 用户数据反超Snap,Pinterest能否拾回独角兽光环?
  19. 计算机通过镜子测试,人工智能通过镜子测试或许只是一个悖论
  20. “秘密入职”字节跳动,百度高级经理一审被判赔107万

热门文章

  1. android之标准体重
  2. nginx安装 打开php文件自动下载的问题
  3. CSS学习11:区块背景样式(布局图片)和用户交互图片
  4. 心田花开:小学三年级语文下册古诗词整理【全】
  5. main()打成mian()的后果,切记小心
  6. 【智库解读】明天系、安邦系、海航系、复星系、联想系、中植系、三胞系、宝能系等27个超级民营金融巨头名单及其持股图揭秘!
  7. 同一方法被多个Aspect拦截, 修改切面@Around @Before的执行顺序
  8. C语言 输出斐波那契数列
  9. 自动驾驶上的三种感知传感器(激光、毫米波雷达和摄像头)优缺点比较
  10. 获取软件的apk包名、查看手机设备名称等