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è)展示,喜爰圖書展示,后臺(tái)圖書維護(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)文章
原生Java操作mysql數(shù)據(jù)庫(kù)過(guò)程解析
這篇文章主要介紹了原生Java操作mysql數(shù)據(jù)庫(kù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
springboot整合quartz定時(shí)任務(wù)框架的完整步驟
在做項(xiàng)目時(shí)有時(shí)候會(huì)有定時(shí)器任務(wù)的功能,比如某某時(shí)間應(yīng)該做什么,多少秒應(yīng)該怎么樣之類的,下面這篇文章主要給大家介紹了關(guān)于springboot整合quartz定時(shí)任務(wù)框架的相關(guān)資料,需要的朋友可以參考下2022-01-01
Java超級(jí)實(shí)用的Freemarker工具類
這篇文章主要介紹了Java超級(jí)實(shí)用的Freemarker工具類,文章圍繞相關(guān)資料介紹以及代碼描述非常詳細(xì),需要的小伙伴可以參考一下,希望對(duì)你得學(xué)習(xí)有所幫助2022-02-02
Java?json轉(zhuǎn)換實(shí)體類(JavaBean)及實(shí)體類(JavaBean)轉(zhuǎn)換json代碼示例
這篇文章主要介紹了兩種常見的JSON與Java實(shí)體類相互轉(zhuǎn)換的方法,分別是使用庫(kù)Jackson、Gson、Fastjson和在線工具,無(wú)論是將JSON轉(zhuǎn)換為Java實(shí)體類還是將Java實(shí)體類轉(zhuǎn)換為JSON,這些方法都能顯著簡(jiǎn)化開發(fā)過(guò)程,需要的朋友可以參考下2024-12-12
如何使用MyBatis Plus實(shí)現(xiàn)數(shù)據(jù)庫(kù)curd操作
MyBatis-Plus是一個(gè)MyBatis 的增強(qiáng)工具,在MyBatis,的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開發(fā)、提高效率而生。 這篇文章主要介紹了MyBatis Plus實(shí)現(xiàn)數(shù)據(jù)庫(kù)curd操作,需要的朋友可以參考下2021-09-09
教你怎么實(shí)現(xiàn)java語(yǔ)言的在線編譯
這篇文章主要介紹了教你怎么實(shí)現(xiàn)java語(yǔ)言的在線編譯,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04

