读取博客文章的实现
本章主要完成了博客文字的数据库读取,以及公共首页的所有文章展示页面。完成通过点击文章标题进入博客的功能。
ps:
后续来看,这篇文章中的部分数据库查找的算法比较累赘,比如查找文章内容的算法甚至把所有数据都读出来了,在我的“Java微型博客系统——Redis和MySQL实现多级缓存”文章中有对这一部分的修改。大家如果要学习的话可以看看结果集查询的结构,查数据的时候不需要像我那样读很多没有的数据。
1.文章的数据库设计
id为主键,account为外键,content为内容。取名可能不太符合规范,做之前没有考虑好。content的类型为TEXT。
各种类型能存的数据大小如下:
TINYTEXT 256bytes
TEXT 64kb
MEDIUMTEXT 16Mb
LONGTEXT 4GB
2.公众页面的设计
公众页面可以看见所有文章的标题,通过点击想看的文章即可进入文章页面,显示文章的内容。
2.1html页面设计
这里遍历了后端传来的一个articles对象链表,展示了所有的文章标题,并提供了进入文章的点击按钮。
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>看看大家的博客</title>
</head>
<body>
看看有什么喜欢的博客吧:
<h4>
<div th:each="article:${articles}">
<form action="/zhz/toArticle" method="get">
<strong th:text="${article.title}"></strong>
<input name="articleID" th:value="${article.id}" hidden>
<input name="articleTitle" th:value="${article.title}" hidden>
<input type="submit" value="转到文章">
</form>
</div>
</h4>
</body>
</html>
效果图:
2.2对应controller的编写
controller首先通过myData接口函数getAllArticles,从zookeeper获得provider提供的服务,得到了文章编号和名字的键值对。再将其封装成对象传给前端,方便前端的显示。
@Controller
public class ToPublicMainController {
@DubboReference
private MyData myData;
@RequestMapping("/zhz/toPublicMain")
public String toPublicMain(Model model){
//获取所有的文章编号和名字的键值对
Map<Integer, String> allArticles = myData.getAllArticles();
//得到所有的keys
Set<Integer> keys = allArticles.keySet();
List<Article> articles = new ArrayList<>();
for (Integer key : keys) {
//遍历所有的键值对,存到新的类中,放在list里,传给前端
articles.add(new Article(key,allArticles.get(key)));
}
System.out.println(articles.toString());
model.addAttribute("articles",articles);
return "publicMain";
}
@Data
@AllArgsConstructor
@NoArgsConstructor