源码获取:博客首页 "资源" 里下载!

一、项目简述

本系统功能包括: 基于vue + Springboo痼J后端分离项目个人博客系统,注册 登录,首页展示,喜爰图书展示,后台图书维护,个人文 章展示,后台文章上传等等。

二、项目运行

环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX (Webstorm也 行)+ Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts都支 持)。

项目技术: Springboot + Maven + Mybatis + Vue + Redis^K, B/S 模式+ Maven等等。

博客首页:

/*** @author yy*/
@Controller
public class MyblogController {//    public static String theme = "default";public static String theme = "amaze";@Resourceprivate BlogService blogService;@Resourceprivate TagService tagService;@Resourceprivate CommentService commentService;@Resourceprivate ConfigService configService;@Resourceprivate CategoryService categoryService;/*** 首页** @param request http请求* @return java.lang.String*/@GetMapping({"/", "/index", "index.html"})public String index(HttpServletRequest request) {return this.page(request, 1);}/*** 首页(带页码)** @param request http请求* @param pageNum 页码* @return java.lang.String*/@GetMapping({"/page/{pageNum}"})public String page(HttpServletRequest request, @PathVariable("pageNum") int pageNum) {PageResult blogPageResult = blogService.getBlogsForIndexPage(pageNum);if (blogPageResult == null) {return "error/error_404";}request.setAttribute("blogPageResult", blogPageResult);request.setAttribute("newBlogs", blogService.getBlogListForIndexPage(1));request.setAttribute("hotBlogs", blogService.getBlogListForIndexPage(0));request.setAttribute("hotTags", tagService.getBlogTagCountForIndex());request.setAttribute("pageName", "首页");request.setAttribute("configurations", configService.getAllConfigs());return "blog/" + theme + "/index";}/*** Categories页面(包括分类数据和标签数据)** @param request http请求* @return java.lang.String*/@GetMapping({"/categories"})public String categories(HttpServletRequest request) {request.setAttribute("hotTags", tagService.getBlogTagCountForIndex());request.setAttribute("categories", categoryService.getAllCategories());request.setAttribute("pageName", "分类页面");request.setAttribute("configurations", configService.getAllConfigs());return "blog/" + theme + "/category";}/*** 详情页** @param request     http请求* @param blogId      博客id* @param commentPage 评论页* @return java.lang.String*/@GetMapping({"/blog/{blogId}", "/article/{blogId}"})public String detail(HttpServletRequest request, @PathVariable("blogId") Long blogId, @RequestParam(value = "commentPage", required = false, defaultValue = "1") Integer commentPage) {BlogDetailVO blogDetailVO = blogService.getBlogDetail(blogId);if (blogDetailVO != null) {request.setAttribute("blogDetailVO", blogDetailVO);request.setAttribute("commentPageResult", commentService.getCommentPageByBlogIdAndPageNum(blogId, commentPage));}request.setAttribute("pageName", "详情");request.setAttribute("configurations", configService.getAllConfigs());return "blog/" + theme + "/detail";}/*** 标签列表页** @param request http请求* @param tagName 标签名称* @return java.lang.String*/@GetMapping({"/tag/{tagName}"})public String tag(HttpServletRequest request, @PathVariable("tagName") String tagName) {return tag(request, tagName, 1);}/*** 标签列表页(带页码)** @param request http请求* @param tagName 标签名称* @param page    页码* @return java.lang.String*/@GetMapping({"/tag/{tagName}/{page}"})public String tag(HttpServletRequest request, @PathVariable("tagName") String tagName, @PathVariable("page") Integer page) {PageResult blogPageResult = blogService.getBlogsPageByTag(tagName, page);request.setAttribute("blogPageResult", blogPageResult);request.setAttribute("pageName", "标签");request.setAttribute("pageUrl", "tag");request.setAttribute("keyword", tagName);request.setAttribute("newBlogs", blogService.getBlogListForIndexPage(1));request.setAttribute("hotBlogs", blogService.getBlogListForIndexPage(0));request.setAttribute("hotTags", tagService.getBlogTagCountForIndex());request.setAttribute("configurations", configService.getAllConfigs());return "blog/" + theme + "/list";}/*** 分类列表页** @param request      http请求* @param categoryName 类别名称* @return java.lang.String*/@GetMapping({"/category/{categoryName}"})public String category(HttpServletRequest request, @PathVariable("categoryName") String categoryName) {return category(request, categoryName, 1);}/*** 分类列表页(带页码)** @param request      http请求* @param categoryName 类别名称* @param page         页码* @return java.lang.String*/@GetMapping({"/category/{categoryName}/{page}"})public String category(HttpServletRequest request, @PathVariable("categoryName") String categoryName, @PathVariable("page") Integer page) {PageResult blogPageResult = blogService.getBlogsPageByCategory(categoryName, page);request.setAttribute("blogPageResult", blogPageResult);request.setAttribute("pageName", "分类");request.setAttribute("pageUrl", "category");request.setAttribute("keyword", categoryName);request.setAttribute("newBlogs", blogService.getBlogListForIndexPage(1));request.setAttribute("hotBlogs", blogService.getBlogListForIndexPage(0));request.setAttribute("hotTags", tagService.getBlogTagCountForIndex());request.setAttribute("configurations", configService.getAllConfigs());return "blog/" + theme + "/list";}/*** 搜索列表页** @param request http请求* @param keyword 关键词* @return java.lang.String*/@GetMapping({"/search/{keyword}"})public String search(HttpServletRequest request, @PathVariable("keyword") String keyword) {return search(request, keyword, 1);}/*** 搜索列表页(带页码)** @param request http请求* @param keyword 关键词* @param page    页码* @return java.lang.String*/@GetMapping({"/search/{keyword}/{page}"})public String search(HttpServletRequest request, @PathVariable("keyword") String keyword, @PathVariable("page") Integer page) {PageResult blogPageResult = blogService.getBlogsPageBySearch(keyword, page);request.setAttribute("blogPageResult", blogPageResult);request.setAttribute("pageName", "搜索");request.setAttribute("pageUrl", "search");request.setAttribute("keyword", keyword);request.setAttribute("newBlogs", blogService.getBlogListForIndexPage(1));request.setAttribute("hotBlogs", blogService.getBlogListForIndexPage(0));request.setAttribute("hotTags", tagService.getBlogTagCountForIndex());request.setAttribute("configurations", configService.getAllConfigs());return "blog/" + theme + "/list";}/*** 评论留言** @param request     http请求* @param session     session* @param blogId      博客id* @param verifyCode  验证码* @param commentator 评论者昵称* @param email       邮箱* @param websiteUrl  留言者的网站* @param commentBody 评论内容* @return com.hbu.myblog.util.Result*/@PostMapping(value = "/blog/comment")@ResponseBodypublic Result comment(HttpServletRequest request, HttpSession session,@RequestParam Long blogId, @RequestParam String verifyCode,@RequestParam String commentator, @RequestParam String email,@RequestParam String websiteUrl, @RequestParam String commentBody) {if (StringUtils.isEmpty(verifyCode)) {return ResultGenerator.genFailResult("验证码不能为空");}String kaptchaCode = session.getAttribute("verifyCode") + "";if (StringUtils.isEmpty(kaptchaCode)) {return ResultGenerator.genFailResult("非法请求");}if (!verifyCode.equals(kaptchaCode)) {return ResultGenerator.genFailResult("验证码错误");}String ref = request.getHeader("Referer");if (StringUtils.isEmpty(ref)) {return ResultGenerator.genFailResult("非法请求");}if (null == blogId || blogId < 0) {return ResultGenerator.genFailResult("非法请求");}if (StringUtils.isEmpty(commentator)) {return ResultGenerator.genFailResult("请输入称呼");}if (StringUtils.isEmpty(email)) {return ResultGenerator.genFailResult("请输入邮箱地址");}if (!PatternUtil.isEmail(email)) {return ResultGenerator.genFailResult("请输入正确的邮箱地址");}if (StringUtils.isEmpty(commentBody)) {return ResultGenerator.genFailResult("请输入评论内容");}if (commentBody.trim().length() > 200) {return ResultGenerator.genFailResult("评论内容过长");}BlogComment comment = new BlogComment();comment.setBlogId(blogId);comment.setCommentator(MyBlogUtils.cleanString(commentator));comment.setEmail(email);if (PatternUtil.isURL(websiteUrl)) {comment.setWebsiteUrl(websiteUrl);}comment.setCommentBody(MyBlogUtils.cleanString(commentBody));return ResultGenerator.genSuccessResult(commentService.addComment(comment));}
}

验证码控制层:

/*** @author yy*/
@Controller
public class CommonController {@Autowiredprivate DefaultKaptcha captchaProducer;/*** @param httpServletRequest* @param httpServletResponse* @throws Exception*/@GetMapping("/common/kaptcha")public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {byte[] captchaOutputStream = null;ByteArrayOutputStream imgOutputStream = new ByteArrayOutputStream();try {//生产验证码字符串并保存到session中String verifyCode = captchaProducer.createText();httpServletRequest.getSession().setAttribute("verifyCode", verifyCode);BufferedImage challenge = captchaProducer.createImage(verifyCode);ImageIO.write(challenge, "jpg", imgOutputStream);} catch (IllegalArgumentException e) {httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);return;}captchaOutputStream = imgOutputStream.toByteArray();httpServletResponse.setHeader("Cache-Control", "no-store");httpServletResponse.setHeader("Pragma", "no-cache");httpServletResponse.setDateHeader("Expires", 0);httpServletResponse.setContentType("image/jpeg");ServletOutputStream responseOutputStream = httpServletResponse.getOutputStream();responseOutputStream.write(captchaOutputStream);responseOutputStream.flush();responseOutputStream.close();}
}

处理管理员界面请求:

/*** 处理管理员界面请求**/
@Controller
@RequestMapping("/admin")
public class AdminController {@Resourceprivate AdminUserService adminUserService;@Resourceprivate BlogService blogService;@Resourceprivate CategoryService categoryService;@Resourceprivate TagService tagService;@Resourceprivate CommentService commentService;/*** 处理登录请求** @return java.lang.String*/@GetMapping({"/login"})public String login() {return "admin/login";}/*** 主页** @param request http请求* @return java.lang.String*/@GetMapping({"", "/", "/index", "/index.html"})public String index(HttpServletRequest request) {request.setAttribute("path", "index");request.setAttribute("categoryCount", categoryService.getTotalCategories());request.setAttribute("blogCount", blogService.getTotalBlogs());request.setAttribute("tagCount", tagService.getTotalTags());request.setAttribute("commentCount", commentService.getTotalComments());return "admin/index";}/*** 登录界面** @param userName   用户名* @param password   密码* @param verifyCode 验证码* @param session    session* @return java.lang.String*/@PostMapping(value = "/login")public String login(@RequestParam("userName") String userName,@RequestParam("password") String password,@RequestParam("verifyCode") String verifyCode,HttpSession session) {if (StringUtils.isEmpty(verifyCode)) {session.setAttribute("errorMsg", "验证码不能为空");return "admin/login";}if (StringUtils.isEmpty(userName) || StringUtils.isEmpty(password)) {session.setAttribute("errorMsg", "用户名或密码不能为空");return "admin/login";}String kaptchaCode = session.getAttribute("verifyCode") + "";if (StringUtils.isEmpty(kaptchaCode) || !verifyCode.equals(kaptchaCode)) {session.setAttribute("errorMsg", "验证码错误");return "admin/login";}AdminUser adminUser = adminUserService.login(userName, password);if (adminUser != null) {session.setAttribute("loginUser", adminUser.getNickName());session.setAttribute("loginUserId", adminUser.getAdminUserId());//session过期时间设置为7200秒 即两小时//session.setMaxInactiveInterval(60 * 60 * 2);return "redirect:/admin/index";} else {session.setAttribute("errorMsg", "登陆失败");return "admin/login";}}/*** 修改个人信息** @param request http请求* @return java.lang.String*/@GetMapping("/profile")public String profile(HttpServletRequest request) {Integer loginUserId = (int) request.getSession().getAttribute("loginUserId");AdminUser adminUser = adminUserService.getUserDetailById(loginUserId);if (adminUser == null) {return "admin/login";}request.setAttribute("path", "profile");request.setAttribute("loginUserName", adminUser.getLoginUserName());request.setAttribute("nickName", adminUser.getNickName());return "admin/profile";}/*** 修改密码** @param request          http请求* @param originalPassword 原始密码* @param newPassword      新密码* @return java.lang.String*/@PostMapping("/profile/password")@ResponseBodypublic String passwordUpdate(HttpServletRequest request, @RequestParam("originalPassword") String originalPassword,@RequestParam("newPassword") String newPassword) {if (StringUtils.isEmpty(originalPassword) || StringUtils.isEmpty(newPassword)) {return "参数不能为空";}Integer loginUserId = (int) request.getSession().getAttribute("loginUserId");if (adminUserService.updatePassword(loginUserId, originalPassword, newPassword)) {//修改成功后清空session中的数据,前端控制跳转至登录页request.getSession().removeAttribute("loginUserId");request.getSession().removeAttribute("loginUser");request.getSession().removeAttribute("errorMsg");return "success";} else {return "修改失败";}}/*** 修改登录名,昵称** @param request       http请求* @param loginUserName 登录名* @param nickName      昵称* @return java.lang.String*/@PostMapping("/profile/name")@ResponseBodypublic String nameUpdate(HttpServletRequest request, @RequestParam("loginUserName") String loginUserName,@RequestParam("nickName") String nickName) {if (StringUtils.isEmpty(loginUserName) || StringUtils.isEmpty(nickName)) {return "参数不能为空";}Integer loginUserId = (int) request.getSession().getAttribute("loginUserId");if (adminUserService.updateName(loginUserId, loginUserName, nickName)) {return "success";} else {return "修改失败";}}/*** 管理员退出** @param request http请求* @return java.lang.String*/@GetMapping("/logout")public String logout(HttpServletRequest request) {request.getSession().removeAttribute("loginUserId");request.getSession().removeAttribute("loginUser");request.getSession().removeAttribute("errorMsg");return "admin/login";}
}

源码获取:博客首页 "资源" 里下载!

Java项目:朴素风个人博客系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)相关推荐

  1. Java项目:个人博客系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括:文章展示.热门文章.文章分类.标签云用户登录评论.匿名评论用户留言.匿名留言评论管理.文章发布.文章管理文章数 ...

  2. 博客系统(前后端分离)

    前面已经学习如何使用Servlet实现前后端交互,现在就可以使用Servlet把之前的博客系统修改为动态页面 动态页面可以使用模板引擎实现,这是由服务器渲染:服务器来构建出完整的页面并返回给浏览器 但 ...

  3. Java项目:仿小米商城系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 基于vue + Springboot前后端分离项目精简版仿小米商城 系统,注册登录,首页展示,商品展示,商品 ...

  4. Java项目:网上电商项目(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 一款基于Springboot+Vue的电商项目,前后端分离项目,前台后台都有,前台商品展示购买,购物车分类, ...

  5. Java项目:员工管理系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括:分为前端翻后端部分,包括用户,区分晋通用户以及誉里员用户,包括首页展示,部门管理,人事管理,员工管理三个模块等 ...

  6. Java项目:在线商城系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 前台展示+后台管理,包括最基本的用户登录注册,下单, 购物车,购买,结算,订单查询,收货地址,后台商品管 理 ...

  7. Java项目:在线小说阅读系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 普通用户端登录注册,小说的分类,日榜,月榜,年榜, 小说的阅读,分章节,小说的评论,收藏,推荐等等,以 及后 ...

  8. Java项目:进销存管理系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 库存管理,入库管理,出库管理,往来管理,基础资料, 系统管理,消息中心,系统监控等等. 二.项目运行 环境配 ...

  9. Java项目:精美网上音乐平台(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 音乐播放 用户登录注册 用户信息编辑.头像修改 歌曲.歌单搜索 歌单打分 歌单.歌曲评论 歌单列表.歌手列表 ...

最新文章

  1. 计算Python的代码块或程序的运行时间
  2. python os 常用方法_python中os常用方法详解
  3. flask-session 在redis中存储session
  4. when save is performed, registered callback will be called one by one
  5. 中科院院士:最让人讨厌的10种研究生导师
  6. websocket python unity_Unity中Websocket的简单使用
  7. 得到控制台窗口的句柄
  8. [CareerCup] 17.1 Swap Number In Place 互换位置
  9. python贪心算法几个经典例子_贪心算法及示例,Python
  10. java 2的64次幂_2的N次方对照表 2的64次方等于几?
  11. ArcGIS获取点图层对应栅格图层的栅格行列号(或属性值)
  12. OpenJudge NOI 2.1 1813:熄灯问题
  13. TortoiseSVN不会弹出认证(账号密码)或 TortoiseSVN正在启动版本库浏览器
  14. 如何利用C#/C++调取创蓝253短信验证码
  15. Word中如何快速删除页眉下的横线?教你一招,轻松解决!
  16. 记:EVE模拟器拓扑配置的保存及导入
  17. c语言数组顺时针转90°
  18. stacking集成模型预测回归问题
  19. 从后台获取的图片渲染到前端页面
  20. windows embed sapi php,嵌入式SAPI - PHP 扩展开发及内核应用相关内容 - UDN开源文档

热门文章

  1. Go 分布式学习利器(6)-- Map
  2. 数据结构和算法 -- 学习导图
  3. 01 python爬虫
  4. 2018牛客网暑期ACM多校训练营(第十场)J(二分)
  5. 联合体union和大小端(big-endian、little-endian)
  6. 引用类型(一):Object类型
  7. head first python菜鸟学习笔记(第六章)
  8. jQuery中用ajax访问php接口文件
  9. IOS类似9.png
  10. python利用wx.grid网格显示数据