基于SpringBoot从零构建博客网站 - 开发文章详情页面
文章详情页面是博客系统中最为重要的页面,登录用户与游客都可以浏览文章详情页面,只不过只有登录用户才能进行其它的一些操作,比如评论、点赞和收藏等等。
本次的开发任务只是将文章详情页面展示出来,至于一些收藏、点赞、评论以及统计相关的功能后续慢慢加上。
1、后台核心代码
加载出文章的详情页面的核心代码如下:
/**
* 加载出文章详情页面
*
* @param articleId
* @param model
* @param session
* @return
*/
@RequestMapping(value = "/p/{articleId}", method = RequestMethod.GET)
public String view(@PathVariable("articleId") String articleId, Model model, HttpSession session) {
// 根据ID获取文章信息
Article article = articleService.getById(articleId);
// 获取用户信息
User user = userService.getById(article.getUserId());
if (!StringUtils.isEmpty(article.getGroupId())) {
// 获取专栏信息
Group group = groupService.getById(article.getGroupId());
article.setGroupName(group.getName());
}
// 获取文章标签信息
List<Tag> tags = tagService.queryByArticleId(articleId);
// 获取该用户更多的文章信息
Wrapper<Article> queryWrapper = new QueryWrapper<Article>().lambda().eq(Article::getUserId, user.getUserId()).eq(Article::getStatus, Article.STATUS_SUCCESS).ne(Article::getArticleId, articleId).orderByDesc(Article::getPublishTime);
List<Article> moreArticles = articleService.queryForLimit(queryWrapper, 6);
// 获取推荐的文章信息
List<Article> likeArticles = null;
if (tags != null && !tags.isEmpty()) {
// 根据标签来获取类似的文章
List<String> tagStrs = new ArrayList<String>();
tags.stream().forEach(tag -> tagStrs.add(tag.getTag()));
Map<String, Object> params = new HashMap<String, Object>();
params.put("status", Article.STATUS_SUCCESS);
params.put("articleId", articleId);
likeArticles = articleService.queryForLimitByTags(params, tagStrs, 10);
} else {
// 获取最新的文章信息
Wrapper<Article> likeWrapper = new QueryWrapper<Article>().lambda().eq(Article::getStatus, Article.STATUS_SUCCESS).ne(Article::getArticleId, articleId).orderByDesc(Article::getPublishTime);
likeArticles = articleService.queryForLimit(queryWrapper, 10);
}
model.addAttribute("article", article);
model.addAttribute("user", user);
model.addAttribute("tags", tags);
model.addAttribute("moreArticles", moreArticles);
model.addAttribute("likeArticles", likeArticles);
return Const.BASE_INDEX_PAGE + "blog/article/view";
}
里面核心逻辑为:
- 获取文章内容
- 获取文章的标签
- 获取该用户的更多文章列表
- 根据标签查询出相关的文章,作为推荐文章列表
其实里面有一些统计相关的逻辑暂时没有加上,后续会加上。
2、前台核心代码
由于文章是通过editor.md工具完成的,所以前台文章展示也是要借助editor.md来完成,核心代码如下:
<div class="note-cont">
<div id="article-content">
<textarea id="article-content-textarea" style="display:none;">${article.content}</textarea>
</div>
</div>
首先文章内容像上面的代码一样放置于html中,同时当页面加载时需要执行如下的js代码,即:
$(function() {
editormd.markdownToHTML("article-content", {
htmlDecode : "style,script,iframe", // you can filter tags decode
emoji : true,
taskList : true,
tex : true, // 默认不解析
flowChart : true, // 默认不解析
sequenceDiagram : true, // 默认不解析
});
});
页面效果如下:
关注我
以你最方便的方式关注我:
微信公众号:
基于SpringBoot从零构建博客网站 - 开发文章详情页面的更多相关文章
- 基于SpringBoot从零构建博客网站 - 开发设置主页标识和修改个人信息功能
由于守望博客系统中支持由用户自己设置个人主页的URL的后半段,所以必须要用户设置该标识的功能,而且是用户注册登录之后自动弹出的页面,如果用户没有设置该标识,其它的操作是不能够操作的,同时要求主页标识只 ...
- 基于SpringBoot从零构建博客网站 - 确定需求和表结构
要确定一个系统的需求,首先需要明确该系统的用户有哪些,然后针对每一类用户,确定其需求.对于博客网站来说,用户有3大类,分别是: 作者,也即是注册用户 游客,也即非注册用户 管理员,网站维护人员 那么从 ...
- 基于SpringBoot从零构建博客网站 - 技术选型和整合开发环境
技术选型和整合开发环境 1.技术选型 博客网站是基于SpringBoot整合其它模块而开发的,那么每个模块选择的技术如下: SpringBoot版本选择目前较新的2.1.1.RELEASE版本 持久化 ...
- 基于SpringBoot从零构建博客网站 - 新增创建、修改、删除专栏功能
守望博客是支持创建专栏的功能,即可以将一系列相关的文章归档到专栏中,方便用户管理和查阅文章.这里主要讲解专栏的创建.修改和删除功能,至于专栏还涉及其它的功能,例如关注专栏等后续会穿插着介绍. 1.创建 ...
- 基于SpringBoot从零构建博客网站 - 设计可扩展上传模块和开发修改头像密码功能
上传模块在web开发中是很常见的功能也是很重要的功能,在web应用中需要上传的可以是图片.pdf.压缩包等其它类型的文件,同时对于图片可能需要回显,对于其它文件要能够支持下载等.在守望博客系统中对于上 ...
- 基于SpringBoot从零构建博客网站 - 集成editor.md开发发布文章功能
发布文章功能里面最重要的就是需要集成富文本编辑器,目前富文本编辑器有很多,例如ueditor,CKEditor.editor.md等.这里守望博客里面是集成的editor.md,因为editor.md ...
- 基于SpringBoot从零构建博客网站 - 分页显示文章列表功能
显示文章列表一般都是采用分页显示,比如每页10篇文章显示.这样就不用每次就将所有的文章查询出来,而且当文章数量特别多的时候,如果一次性查询出来很容易出现OOM异常. 后台的分页插件采用的是mybati ...
- 基于SpringBoot从零构建博客网站 - 整合ehcache和开发注册登录功能
对于程序中一些字典信息.配置信息应该在程序启动时加载到缓存中,用时先到缓存中取,如果没有命中,再到数据库中获取同时放到缓存中,这样做可以减轻数据库层的压力.目前暂时先整合ehcache缓存,同时预留了 ...
- 基于SpringBoot从零构建博客网站 - 整合lombok和mybatis-plus提高开发效率
在上一章节中<技术选型和整合开发环境>,确定了开发的技术,但是如果直接这样用的话,可能开发效率会不高,为了提高开发的效率,这里再整合lombok和mybatis-plus两个组件. 1.l ...
随机推荐
- spring实战学习笔记(一)spring装配bean
最近在学习spring boot 发现对某些注解不是很深入的了解.看技术书给出的实例 会很疑惑为什么要用这个注解? 这个注解的作用?有其他相同作用的注解吗?这个注解的运行机制是什么?等等 spring ...
- Docker——理解好镜像和容器的关系
关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 镜像也是 docker 的核心组件之一,镜像时容器运行的基础,容器是镜像运行后的形态.前面我们介绍了 ...
- zookeeper 集群配置
安装前要先确保配置好 jdk,这里不在讲述 一. 将zookeeper 安装包下载到你想要的目录 下载地址:http://mirrors.hust.edu.cn/apache/zookeeper/ m ...
- 后端小白的VUE入门笔记, 进阶篇
使用 vue-cli( 脚手架) 搭建项目 基于vue-cli 创建一个模板项目 通过 npm root -g 可以查看vue全局安装目录,进而知道自己有没有安装vue-cli 如果没有安装的话,使用 ...
- 认识Redies
既然是作为了解性文章,那必然不会做很深入的解读.深入的解读以后会加上. 我们先来回答两个问题.通过这两个问题来开始我们的Redies入门之旅. Redies是什么? Redies有什么作用? Redi ...
- 安全测试基础2-sqlmap演练
sqlmap简介 sqlmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限. 它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括 ...
- windows如何访问wsl系统下的文件
windows如何访问wsl系统下的文件 可以在wsl终端输入以下命令 explorer.exe . 会出现如下界面 这样就可以很方便的查看wsl的文件了
- 01 Python网络爬虫简介
什么是爬虫 爬虫就是通过编写程序模拟浏览器上网,然后去互联网上爬取/获取数据的过程. 爬虫的分类 - 通用爬虫:就是爬取互联网中的一整张页面内容. - 聚焦爬虫:根据指定的需求爬取页面中指定的局部内容 ...
- git 导出新修改的文件
git archive -o update.zip HEAD $(git diff --name-only HEAD)
- cogs 80. 石子归并 动态规划
80. 石子归并 ★★ 输入文件:shizi.in 输出文件:shizi.out 简单对比时间限制:1 s 内存限制:128 MB 设有N堆沙(shi)子排成一排,其编号为1,2,3, ...