Java實(shí)戰(zhàn)個人博客系統(tǒng)的實(shí)現(xiàn)流程
springboot+mybatis+前端vue,使用前后端分離架構(gòu)實(shí)現(xiàn)的個人博客系統(tǒng),共7個模塊,首頁,寫博客,博客詳情頁,評論管理,文章分類,標(biāo)簽管理和文章歸檔。
運(yùn)行環(huán)境: jdk8+tomcat8.5+mysql5.7+IntelliJ IDEA+maven
項(xiàng)目技術(shù): springboot+mybatis+redis+vue+element ui






博客管理控制層:
/**
* @author yy
*/
@Controller
public class MyblogController {
// public static String theme = "default";
public static String theme = "amaze";
@Resource
private BlogService blogService;
@Resource
private TagService tagService;
@Resource
private CommentService commentService;
@Resource
private ConfigService configService;
@Resource
private 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頁面(包括分類數(shù)據(jù)和標(biāo)簽數(shù)據(jù))
*
* @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";
}
/**
* 標(biāo)簽列表頁
*
* @param request http請求
* @param tagName 標(biāo)簽名稱
* @return java.lang.String
*/
@GetMapping({"/tag/{tagName}"})
public String tag(HttpServletRequest request, @PathVariable("tagName") String tagName) {
return tag(request, tagName, 1);
}
/**
* 標(biāo)簽列表頁(帶頁碼)
*
* @param request http請求
* @param tagName 標(biāo)簽名稱
* @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", "標(biāo)簽");
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 關(guān)鍵詞
* @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 關(guān)鍵詞
* @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 驗(yàn)證碼
* @param commentator 評論者昵稱
* @param email 郵箱
* @param websiteUrl 留言者的網(wǎng)站
* @param commentBody 評論內(nèi)容
* @return com.hbu.myblog.util.Result
*/
@PostMapping(value = "/blog/comment")
@ResponseBody
public 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("驗(yàn)證碼不能為空");
}
String kaptchaCode = session.getAttribute("verifyCode") + "";
if (StringUtils.isEmpty(kaptchaCode)) {
return ResultGenerator.genFailResult("非法請求");
}
if (!verifyCode.equals(kaptchaCode)) {
return ResultGenerator.genFailResult("驗(yàn)證碼錯誤");
}
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("請輸入評論內(nèi)容");
}
if (commentBody.trim().length() > 200) {
return ResultGenerator.genFailResult("評論內(nèi)容過長");
}
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
@RequestMapping("/admin")
public class CategoryController {
@Resource
private CategoryService categoryService;
/**
* @param request
* @return java.lang.String
*/
@GetMapping("/categories")
public String categoryPage(HttpServletRequest request) {
request.setAttribute("path", "categories");
return "admin/category";
}
/**
* @param params
* @return com.hbu.myblog.util.Result
*/
@RequestMapping(value = "/categories/list", method = RequestMethod.GET)
@ResponseBody
public Result list(@RequestParam Map<String, Object> params) {
if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {
return ResultGenerator.genFailResult("參數(shù)異常!");
}
PageQueryUtil pageUtil = new PageQueryUtil(params);
return ResultGenerator.genSuccessResult(categoryService.getBlogCategoryPage(pageUtil));
}
/**
* @param categoryName
* @param categoryIcon
* @return com.hbu.myblog.util.Result
*/
@RequestMapping(value = "/categories/save", method = RequestMethod.POST)
@ResponseBody
public Result save(@RequestParam("categoryName") String categoryName,
@RequestParam("categoryIcon") String categoryIcon) {
if (StringUtils.isEmpty(categoryName)) {
return ResultGenerator.genFailResult("請輸入分類名稱!");
}
if (StringUtils.isEmpty(categoryIcon)) {
return ResultGenerator.genFailResult("請選擇分類圖標(biāo)!");
}
if (categoryService.saveCategory(categoryName, categoryIcon)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("分類名稱重復(fù)");
}
}
/**
* @param categoryId
* @param categoryName
* @param categoryIcon
* @return com.hbu.myblog.util.Result
*/
@RequestMapping(value = "/categories/update", method = RequestMethod.POST)
@ResponseBody
public Result update(@RequestParam("categoryId") Integer categoryId,
@RequestParam("categoryName") String categoryName,
@RequestParam("categoryIcon") String categoryIcon) {
if (StringUtils.isEmpty(categoryName)) {
return ResultGenerator.genFailResult("請輸入分類名稱!");
}
if (StringUtils.isEmpty(categoryIcon)) {
return ResultGenerator.genFailResult("請選擇分類圖標(biāo)!");
}
if (categoryService.updateCategory(categoryId, categoryName, categoryIcon)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("分類名稱重復(fù)");
}
}
/**
* @param ids
* @return com.hbu.myblog.util.Result
*/
@RequestMapping(value = "/categories/delete", method = RequestMethod.POST)
@ResponseBody
public Result delete(@RequestBody Integer[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("參數(shù)異常!");
}
if (categoryService.deleteBatch(ids)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("刪除失敗");
}
}
}
處理管理員界面請求:
/**
* 處理管理員界面請求
*
* @author yy
*/
@Controller
@RequestMapping("/admin")
public class AdminController {
@Resource
private AdminUserService adminUserService;
@Resource
private BlogService blogService;
@Resource
private CategoryService categoryService;
@Resource
private TagService tagService;
@Resource
private 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 驗(yàn)證碼
* @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", "驗(yàn)證碼不能為空");
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", "驗(yàn)證碼錯誤");
return "admin/login";
}
AdminUser adminUser = adminUserService.login(userName, password);
if (adminUser != null) {
session.setAttribute("loginUser", adminUser.getNickName());
session.setAttribute("loginUserId", adminUser.getAdminUserId());
//session過期時間設(shè)置為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")
@ResponseBody
public String passwordUpdate(HttpServletRequest request, @RequestParam("originalPassword") String originalPassword,
@RequestParam("newPassword") String newPassword) {
if (StringUtils.isEmpty(originalPassword) || StringUtils.isEmpty(newPassword)) {
return "參數(shù)不能為空";
}
Integer loginUserId = (int) request.getSession().getAttribute("loginUserId");
if (adminUserService.updatePassword(loginUserId, originalPassword, newPassword)) {
//修改成功后清空session中的數(shù)據(jù),前端控制跳轉(zhuǎn)至登錄頁
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")
@ResponseBody
public String nameUpdate(HttpServletRequest request, @RequestParam("loginUserName") String loginUserName,
@RequestParam("nickName") String nickName) {
if (StringUtils.isEmpty(loginUserName) || StringUtils.isEmpty(nickName)) {
return "參數(shù)不能為空";
}
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";
}
}
到此這篇關(guān)于Java實(shí)戰(zhàn)個人博客系統(tǒng)的實(shí)現(xiàn)流程的文章就介紹到這了,更多相關(guān)Java 個人博客系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java并發(fā)編程Semaphore計(jì)數(shù)信號量詳解
這篇文章主要介紹了Java并發(fā)編程Semaphore計(jì)數(shù)信號量詳解,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10
Java中數(shù)組的創(chuàng)建與傳參方法(學(xué)習(xí)小結(jié))
這篇文章主要介紹了Java中數(shù)組的創(chuàng)建與傳參方法,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
springboot項(xiàng)目攔截器重定向循環(huán)問題的解決
這篇文章主要介紹了springboot項(xiàng)目攔截器重定向循環(huán)問題的解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
說明Java的傳遞與回調(diào)機(jī)制的代碼示例分享
這篇文章主要介紹了說明Java的傳遞與回調(diào)機(jī)制的代碼示例分享,傳遞與回調(diào)機(jī)制是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09
Java8中stream和functional interface的配合使用詳解
這篇文章主要給大家介紹了關(guān)于Java8中stream和functional interface配合使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java8具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-11-11

