Java 實(shí)戰(zhàn)項(xiàng)目錘煉之樸素風(fēng)格個(gè)人博客系統(tǒng)的實(shí)現(xiàn)流程
一、項(xiàng)目簡(jiǎn)述
本系統(tǒng)功能包括: 基于vue + Springboo痼J后端分離項(xiàng)目個(gè)人博客系統(tǒng),注冊(cè) 登錄,首頁(yè)展示,喜爰圖書(shū)展示,后臺(tái)圖書(shū)維護(hù),個(gè)人文 章展示,后臺(tái)文章上傳等等。
二、項(xiàng)目運(yùn)行
環(huán)境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX (Webstorm也 行)+ Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts都支 持)。
項(xiàng)目技術(shù): Springboot + Maven + Mybatis + Vue + Redis^K, B/S 模式+ Maven等等。
博客信息代碼:
/** * 博客信息 */ @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; /** * 首頁(yè) * * @param request http請(qǐng)求 * @return java.lang.String */ @GetMapping({"/", "/index", "index.html"}) public String index(HttpServletRequest request) { return this.page(request, 1); } /** * 首頁(yè)(帶頁(yè)碼) * * @param request http請(qǐng)求 * @param pageNum 頁(yè)碼 * @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", "首頁(yè)"); request.setAttribute("configurations", configService.getAllConfigs()); return "blog/" + theme + "/index"; } /** * Categories頁(yè)面(包括分類數(shù)據(jù)和標(biāo)簽數(shù)據(jù)) * * @param request http請(qǐng)求 * @return java.lang.String */ @GetMapping({"/categories"}) public String categories(HttpServletRequest request) { request.setAttribute("hotTags", tagService.getBlogTagCountForIndex()); request.setAttribute("categories", categoryService.getAllCategories()); request.setAttribute("pageName", "分類頁(yè)面"); request.setAttribute("configurations", configService.getAllConfigs()); return "blog/" + theme + "/category"; } /** * 詳情頁(yè) * * @param request http請(qǐng)求 * @param blogId 博客id * @param commentPage 評(píng)論頁(yè) * @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)簽列表頁(yè) * * @param request http請(qǐng)求 * @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)簽列表頁(yè)(帶頁(yè)碼) * * @param request http請(qǐng)求 * @param tagName 標(biāo)簽名稱 * @param page 頁(yè)碼 * @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"; } /** * 分類列表頁(yè) * * @param request http請(qǐng)求 * @param categoryName 類別名稱 * @return java.lang.String */ @GetMapping({"/category/{categoryName}"}) public String category(HttpServletRequest request, @PathVariable("categoryName") String categoryName) { return category(request, categoryName, 1); } /** * 分類列表頁(yè)(帶頁(yè)碼) * * @param request http請(qǐng)求 * @param categoryName 類別名稱 * @param page 頁(yè)碼 * @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"; } /** * 搜索列表頁(yè) * * @param request http請(qǐng)求 * @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); } /** * 搜索列表頁(yè)(帶頁(yè)碼) * * @param request http請(qǐng)求 * @param keyword 關(guān)鍵詞 * @param page 頁(yè)碼 * @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"; } /** * 評(píng)論留言 * * @param request http請(qǐng)求 * @param session session * @param blogId 博客id * @param verifyCode 驗(yàn)證碼 * @param commentator 評(píng)論者昵稱 * @param email 郵箱 * @param websiteUrl 留言者的網(wǎng)站 * @param commentBody 評(píng)論內(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("非法請(qǐng)求"); } if (!verifyCode.equals(kaptchaCode)) { return ResultGenerator.genFailResult("驗(yàn)證碼錯(cuò)誤"); } String ref = request.getHeader("Referer"); if (StringUtils.isEmpty(ref)) { return ResultGenerator.genFailResult("非法請(qǐng)求"); } if (null == blogId || blogId < 0) { return ResultGenerator.genFailResult("非法請(qǐng)求"); } if (StringUtils.isEmpty(commentator)) { return ResultGenerator.genFailResult("請(qǐng)輸入稱呼"); } if (StringUtils.isEmpty(email)) { return ResultGenerator.genFailResult("請(qǐng)輸入郵箱地址"); } if (!PatternUtil.isEmail(email)) { return ResultGenerator.genFailResult("請(qǐng)輸入正確的郵箱地址"); } if (StringUtils.isEmpty(commentBody)) { return ResultGenerator.genFailResult("請(qǐng)輸入評(píng)論內(nèi)容"); } if (commentBody.trim().length() > 200) { return ResultGenerator.genFailResult("評(píng)論內(nèi)容過(guò)長(zhǎng)"); } 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)); } }
以上就是Java 實(shí)戰(zhàn)項(xiàng)目錘煉之樸素風(fēng)格個(gè)人博客系統(tǒng)的實(shí)現(xiàn)流程的詳細(xì)內(nèi)容,更多關(guān)于Java 博客系統(tǒng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaGUI界面實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)方法
這篇文章主要給大家介紹了關(guān)于JavaGUI界面實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的相關(guān)資料, GUI是指圖形用戶界面,指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面,需要的朋友可以參考下2023-07-07Java中的CountDownLatch簡(jiǎn)單理解
這篇文章主要介紹了Java中的CountDownLatch簡(jiǎn)單理解,CountDownLatch是一個(gè)同步工具類,用來(lái)攜調(diào)多個(gè)線程之間的同步,它是是使用一個(gè)計(jì)數(shù)器進(jìn)行實(shí)現(xiàn)的,計(jì)數(shù)器初始值為線程數(shù)量,需要的朋友可以參考下2024-01-01深入理解Java運(yùn)行時(shí)數(shù)據(jù)區(qū)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java運(yùn)行時(shí)數(shù)據(jù)區(qū)的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-06-06springmvc4+hibernate4分頁(yè)查詢功能實(shí)現(xiàn)
本篇文章主要介紹了springmvc4+hibernate4分頁(yè)查詢功能實(shí)現(xiàn),Springmvc+hibernate成為現(xiàn)在很多人用的框架整合,有興趣的可以了解一下。2017-01-01springboot實(shí)現(xiàn)執(zhí)行sql語(yǔ)句打印到控制臺(tái)
這篇文章主要介紹了springboot實(shí)現(xiàn)執(zhí)行sql語(yǔ)句打印到控制臺(tái)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06排查Java進(jìn)程內(nèi)存占比過(guò)高的方法
某天下午運(yùn)維反應(yīng)集成環(huán)境的一個(gè)Java服務(wù)內(nèi)存飆高,內(nèi)存耗的太高了,會(huì)疑似內(nèi)存泄漏,所以本文記一次排查Java進(jìn)程內(nèi)存占比過(guò)高的解決方法,需要的朋友可以參考下2023-10-10java實(shí)現(xiàn)簡(jiǎn)單五子棋小游戲(2)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單五子棋小游戲的第二部分,添加游戲結(jié)束條件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01Android中比較常見(jiàn)的Java super關(guān)鍵字
這篇文章主要為大家介紹了Android中比較常見(jiàn)的Java super關(guān)鍵字,具有一定的學(xué)習(xí)參考價(jià)值,感興趣的小伙伴們可以參考一下2016-01-01