IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 基于 SpringBoot 的个人博客系统设计与实现(含论文与程序代码).rar -> 正文阅读

[Java知识库]基于 SpringBoot 的个人博客系统设计与实现(含论文与程序代码).rar

绪论 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;

/**
 * @author Ryan
 */
@Controller
public class IndexController {

    @Autowired
    private BlogService blogService;

    @Autowired
    private TypeService typeService;

    @Autowired
    private MessageService messageService;

    @Autowired
    private TagService tagService;

    /**
     * 首页数据
     * @param model
     * @param pageNum
     * @return
     */
    @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;

/**
 * 后台登录处理
 * @author Ryan
 */
@Controller
@RequestMapping("/admin")
public class LoginController {

    @Autowired
    private UserService userService;

    /**
     * 修复后台路径访问
     * @param session
     * @return
     */
    @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;

/**
 * @author Ryan
 */
@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());
    }

    /**
     * 后台显示博客列表
     * @param pagenum
     * @param model
     * @return
     */
    @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";
    }

    /**
     *  按条件查询博客
     * @param blog
     * @param pagenum
     * @param model
     * @return
     */
    @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";
    }

    /**
     * 去新增博客页面
     * @param model
     * @return
     */
    @GetMapping("/blogs/input")
    public String toAddBlog(Model model){
        //返回一个blog对象给前端th:object
        model.addAttribute("blog", new Blog());
        setTypeAndTag(model);
        return "admin/blogs-input";
    }

    /**
     * 去编辑博客页面
     * @param id
     * @param model
     * @return
     */
    @GetMapping("/blogs/{id}/input")
    public String toEditBlog(@PathVariable Long id, Model model){
        Blog blog = blogService.getBlog(id);
        //将tags集合转换为tagIds字符串
        blog.init();
        //返回一个blog对象给前端th:object
        model.addAttribute("blog", blog);
        setTypeAndTag(model);
        return "admin/blogs-input";
    }

    /**
     * 新增、编辑博客
     * @param blog
     * @param session
     * @param attributes
     * @return
     */
    @PostMapping("/blogs")
    public String addBlog(Blog blog, HttpSession session, RedirectAttributes attributes){
        //设置user属性
        blog.setUser((User) session.getAttribute("user"));
        //设置用户id
        blog.setUserId(blog.getUser().getId());
        //设置blog的type
        blog.setType(typeService.getType(blog.getType().getId()));
        //设置blog中typeId属性
        blog.setTypeId(blog.getType().getId());
        //给blog中的List<Tag>赋值
        blog.setTags(tagService.getTagByString(blog.getTagIds()));
        //id为空,则为新增
        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";
    }
}

论文和源码下载地址:请点击》》》

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:15:32  更:2021-12-04 13:21:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:48:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码