1.前言
本項目是SSM的博客系統,目前只支持發表個人博客,管理個人博客相關內容,供他人以遊客身份進行瀏覽,搜索,評論等功能。
2.所用技術
- 使用Spring5+SpringMVC+Mybatis3架構
- 採用Mysql數據庫
- 使用Maven管理項目
- 使用Shiro作爲項目安全框架
- 使用Lucene作爲全文檢索,支持restful風格
- 前臺網頁使用主流的Bootstrap3 UI框架
- 後臺管理使用主流易用的EasyUI輕量級框架
- 數據庫連接池使用的是阿里巴巴的Druid
- 在線編輯器使用了百度的UEditor,支持單圖,多圖上傳,支持截圖上傳,支持代碼高亮特性
3.項目效果圖展示
1.後臺部分
- 登錄後臺界面:使用Shiro進行安全管理,對前臺輸入的密碼進行加密運算,然後與數據庫(數據庫存入密碼已加密)中的進行比較。成功後才能登入後臺系統。
- 博客系統後臺:其分爲博客及類別管理,評論管理等幾大模塊。這裏只展示了博客管理中“寫博客功能”。先寫入博客標題,然後選擇博客類型,將博客內容填入百度的富文本編輯器中,最後加上關鍵字(方便前臺Lucene全文檢索),點擊發布博客按鈕即可發佈博客。
2.前臺展示部分
-
首頁展示:可觀看博客內容的相關信息(分頁展示),和博主的相關信息,右上角引入天氣插件模塊,有其他想法可以另做更換。
-
查看博客界面:顯示博客具體內容,關鍵字(Lucene全文檢索),鏈接分享,遊客發表評論,查看所有評論(內容太多,沒截屏出來哦~),
-
搜索博客:採用Lucene全文檢索,搜索關鍵字採用高亮顯示。這裏不僅可以關鍵字查詢,還可以輸入博客相關內容查詢哦(其他搜索條件可另外填加)。
4.部分代碼演示
- 以遊客搜索結果分頁爲例。此處沒有采用分頁類,而是手寫一個上下頁方法,通過字符拼接 html超文標記語言,返回給前臺展示。
@RequestMapping({"/q"})
public ModelAndView q(@RequestParam(value = "q", required = false) String q,
@RequestParam(value = "page", required = false) String page,
HttpServletRequest request) throws ParseException, InvalidTokenOffsetsException, IOException {
if (StringUtil.isEmpty(page)) {//判斷如果page是空,則顯示爲第一頁
page = "1";
}
ModelAndView mav = new ModelAndView();
mav.addObject("mainPage", "foreground/blog/result.jsp");
//加入lucene搜索,結果放入list集合中,方便按條數取出
List<Blog> blogList = blogIndex.searchBlog(q.trim());
int toIndex = 0;//展示頁的最後一條
if (blogList.size()>=Integer.parseInt(page)*10){
//總條數大於當前取出的最後一條的索引,則設當前取出的最後一條爲展示頁的最後一條
toIndex = Integer.parseInt(page)*10;
}else {
//否則以查詢的總條數,爲展示頁的最後一條的索引
toIndex = blogList.size();
}
//取出展示搜索條數(以截取的條數爲標準給前臺展示)
mav.addObject("blogList",blogList.subList((Integer.parseInt(page)-1)*10,toIndex));
mav.addObject("pageCode",genUpAndDownPageCode(Integer.parseInt(page),blogList.size(),q,10,request.getServletContext().getContextPath()));
mav.addObject("q", q);//q爲搜索關鍵字
mav.addObject("resultTotal", blogList.size());
mav.addObject("pageTitle", "搜索關鍵字" + q + "結果頁面_個人博客");
mav.setViewName("index");
return mav;
}
/**
* 查詢結果翻頁方法
*/
private String genUpAndDownPageCode(int page, int totalNum, String q, int pageSize, String projectContext) {
StringBuffer pageCode = new StringBuffer();
//運用三目運算判斷總頁數
int totalPage = totalNum % pageSize == 0 ? totalNum / pageSize : totalNum / pageSize + 1;
if (totalPage == 0) {
return "";
}
pageCode.append("<nav>");
pageCode.append("<ur class='pager'>");
if (page > 1) {//當前大於1,則可以有上一頁
pageCode.append("<li><a href='" + projectContext + "/blog/q.html?page" + (page - 1) + "&q=" + q + "'>上一頁</a></li>");
} else {
pageCode.append("<li class='disabled'><a href='#'>上一頁</a></li>");
}
if (page < totalPage) {//不是最後一頁,則也可以有下一頁
pageCode.append("<li><a href='" + projectContext + "/blog/q.html?page" + (page + 1) + "&q=" + q + "'>下一頁</a></li>");
} else {
pageCode.append("<li class='disabled'><a href='#'>下一頁</a></li>");
}
pageCode.append("</nav>");
pageCode.append("</ur>");
return pageCode.toString();
}
5.源碼地址
本項目源碼和SQL已上傳GitHub,歡迎加★Star.下載哦! (^ o ^)。因爲不會美工,前端界面還是照舊,項目如有瑕疵,還望大佬指點,希望大家都可以寫出屬於自己的博客系統。
源碼地址: https://github.com/Control201/Control