绪论 1 1.1系统的概述1 1.2系统的研究背景 2需求分析 2.1系统需求分析 2.2可行性分析 2.2.1技术可行性 2.2.2经济可行性 2.2.3操作可行性 2.3开发及运行环境 3总体设计 3.1系统功能结构图 4.1. 1数据库表概要 3. 2数据库表设计 4 3.3配置文件详情 4系统详细设计 4.1登录界面 4.2游客操作 4.2.1博客查看 4.2.2分类查看 4.2.3标签查看 4.2.4归档查看 4.2.5查看作者 4.2.6搜索博客 4.3管理员操作 4.3.1博客管理 4.3.2分类管理15 4.3.3标签管理 5系统测试 5.1 测试的必要性 5.1. 1 目的 5.2 测试过程 5. 2. 1 白盒测试 5.3 测试结果 5.4 项目部署 5.5 负载均衡测试 总 结 鸣 谢 参考文献
摘要 作为计算机的学生,我们学习的方法是通过老师,书籍, 论文等。 对很多从事计算机方面的人来说, 他们学习知识是通过官方文档,以及相关博客。现在知名博客网站有很多, 比如 CSDN, 博客园, 还有全球最知名的 Github。 其中我也在这几个博客中写过一些文章, 分享自己学习的成果。 因此我在想为什么不自己打造一个属于自己的博客呢。我的博客系统是采SpringBoot、 SpringMvc、 Spring等技术栈编写的, 数据库采用 MySQL。 架构方式是采用 MVC 三层架构方式。 管理员可以对博客进行添加, 删除, 修改, 查询操作。 游客可以查看管理员编辑的博客,并可以评论, 打赏。 最后通过测试跟负载均衡完善最终需求。 关键词: SpringBoot; Github; MVC
1 绪论 1.1 系统的概述 进入二十一世纪, 以互联网为核心的现代网络和通信技术已经得到了快速的发展和广泛的应用, 各种网络通信工具也随时代而生。 其中就有论坛、 博客、 社区等较受广大人民欢迎, 也是现在发展的比较成熟的信息交流工具。 随着网络技术的日渐成熟, 互联网已成为日常生活必不可少的工具, 网络博客在近几年更是成为各类网友不可缺少的交流工具。 以前我们记录个人生活的时候, 我们可以写日志。 现在我们可以写博客。 博客又称为网络日志。 目的是通过博客记录生活的点滴, 分享身边美好的东西, 发表自己的感言, 与更多志同道合的人交流。 博客发展到今天已经取得了相当规模的成就, 以新浪、 搜狐、 网易为代表的三大门户网站都已经推出了自己的博客服务, 在规模扩大的同时, 博客技术也在不断的进步和完善。 1.2 系统的研究背景 博客改变着人们的交流方式和情感体验和表达形态, 改变着人们聚散的方式,它影响着中国互联网的发展走向, 甚至会波及或影响着现实社会的决策。 在这个信息时代, 只要你在网上发布了信息, 就算是一张图片, 一段文字, 一个音频。它都可以传遍世界各个角落, 可想网络时代的传播速度。 毫无疑问, 博客将可以作为我们美好事物及美好思想传播的载体。 通过博客, 你的科研成果可以让更多人知道, 可以传播到世界各地, 让更多人知道, 可以推进社会的进步。 无疑, 博客这样一种影响力颇大的媒介将有利于我们好的思想好的事物的传播, 有利于社会进步。 所以我们要把这种好的影响力发挥到最大。
部分页面截屏 前端页面 部分代码:
package com.blog.controller;
import com.blog.pojo.Blog;
import com.blog.pojo.Message;
import com.blog.service.BlogService;
import com.blog.service.MessageService;
import com.blog.service.TagService;
import com.blog.service.TypeService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Controller
public class IndexController {
@Autowired
private BlogService blogService;
@Autowired
private TypeService typeService;
@Autowired
private MessageService messageService;
@Autowired
private TagService tagService;
@RequestMapping("/")
public String toIndex(@RequestParam(required = false,defaultValue = "1") int pageNum,Model model){
PageHelper.startPage(pageNum, 5);
List<Blog> allBlog = blogService.getIndexBlog();
List<Blog> recommendBlog =blogService.getAllRecommendBlog();
PageInfo pageInfo = new PageInfo(allBlog);
List<Message> messages = messageService.findByIndexParentId();
model.addAttribute("messages", messages);
model.addAttribute("pageInfo", pageInfo);
model.addAttribute("recommendBlogs", recommendBlog);
List<Blog> HotBlog=blogService.getHotBlog();
model.addAttribute("HotBlog", HotBlog);
return "index";
}
@PostMapping("/search")
public String search(@RequestParam(required = false,defaultValue = "1",value = "pagenum")int pagenum,
@RequestParam String query, Model model){
PageHelper.startPage(pagenum, 5);
List<Blog> searchBlog = blogService.getSearchBlog(query);
PageInfo pageInfo = new PageInfo(searchBlog);
model.addAttribute("pageInfo", pageInfo);
model.addAttribute("query", query);
return "search";
}
@GetMapping("/blog/{id}")
public String toLogin(@PathVariable Long id, Model model){
Blog blog = blogService.getDetailedBlog(id);
model.addAttribute("blog", blog);
return "blog";
}
}
后端页面截图 部分代码如下:
package com.blog.controller.admin;
import com.blog.pojo.User;
import com.blog.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import javax.servlet.http.HttpSession;
@Controller
@RequestMapping("/admin")
public class LoginController {
@Autowired
private UserService userService;
@GetMapping()
public String loginPage(HttpSession session){
if (session.getAttribute("user")!=null) {
return "admin/index";
}
return "admin/login";
}
@GetMapping("/login")
public String login(HttpSession session){
if (session.getAttribute("user")!=null) {
return "admin/index";
} else {
return "redirect:/admin";
}
}
@PostMapping("/login")
public String login(@RequestParam String username,
@RequestParam String password,
HttpSession session,
RedirectAttributes attributes){
User user = userService.checkUser(username, password);
if(user != null){
session.setAttribute("user", user);
return "admin/index";
}else {
attributes.addFlashAttribute("msg", "用户名或密码错误");
return "redirect:/admin";
}
}
@GetMapping("/logout")
public String logout(HttpSession session){
session.removeAttribute("user");
return "redirect:/admin";
}
}
package com.blog.controller.admin;
import com.blog.pojo.Blog;
import com.blog.pojo.User;
import com.blog.service.BlogService;
import com.blog.service.TagService;
import com.blog.service.TypeService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import javax.servlet.http.HttpSession;
import java.util.List;
@Controller
@RequestMapping("/admin")
public class BlogController {
@Autowired
private BlogService blogService;
@Autowired
private TypeService typeService;
@Autowired
private TagService tagService;
public void setTypeAndTag(Model model) {
model.addAttribute("types", typeService.getAllType());
model.addAttribute("tags", tagService.getAllTag());
}
@GetMapping("/blogs")
public String blogs(@RequestParam(required = false,defaultValue = "1",value = "pagenum")int pagenum, Model model){
PageHelper.startPage(pagenum, 5);
List<Blog> allBlog = blogService.getAllBlog();
PageInfo pageInfo = new PageInfo(allBlog);
model.addAttribute("pageInfo", pageInfo);
setTypeAndTag(model);
return "admin/blogs";
}
@PostMapping("/blogs/search")
public String searchBlogs(Blog blog, @RequestParam(required = false,defaultValue = "1",value = "pagenum")int pagenum, Model model){
PageHelper.startPage(pagenum, 5);
List<Blog> allBlog = blogService.searchAllBlog(blog);
PageInfo pageInfo = new PageInfo(allBlog);
model.addAttribute("pageInfo", pageInfo);
model.addAttribute("message", "查询成功");
setTypeAndTag(model);
return "admin/blogs";
}
@GetMapping("/blogs/input")
public String toAddBlog(Model model){
model.addAttribute("blog", new Blog());
setTypeAndTag(model);
return "admin/blogs-input";
}
@GetMapping("/blogs/{id}/input")
public String toEditBlog(@PathVariable Long id, Model model){
Blog blog = blogService.getBlog(id);
blog.init();
model.addAttribute("blog", blog);
setTypeAndTag(model);
return "admin/blogs-input";
}
@PostMapping("/blogs")
public String addBlog(Blog blog, HttpSession session, RedirectAttributes attributes){
blog.setUser((User) session.getAttribute("user"));
blog.setUserId(blog.getUser().getId());
blog.setType(typeService.getType(blog.getType().getId()));
blog.setTypeId(blog.getType().getId());
blog.setTags(tagService.getTagByString(blog.getTagIds()));
if (blog.getId() == null) {
blogService.saveBlog(blog);
} else {
blogService.updateBlog(blog);
}
attributes.addFlashAttribute("msg", "新增成功");
return "redirect:/admin/blogs";
}
@GetMapping("/blogs/{id}/delete")
public String deleteBlogs(@PathVariable Long id, RedirectAttributes attributes){
blogService.deleteBlog(id);
attributes.addFlashAttribute("msg", "删除成功");
return "redirect:/admin/blogs";
}
}
论文和源码下载地址:请点击》》》
|