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