基于SSM的博客项目实战(附源码和SQL)

1.前言

  本项目是SSM的博客系统,目前只支持发表个人博客,管理个人博客相关内容,供他人以游客身份进行浏览,搜索,评论等功能。

2.所用技术

  1. 使用Spring5+SpringMVC+Mybatis3架构
  2. 采用Mysql数据库
  3. 使用Maven管理项目
  4. 使用Shiro作为项目安全框架
  5. 使用Lucene作为全文检索,支持restful风格
  6. 前台网页使用主流的Bootstrap3 UI框架
  7. 后台管理使用主流易用的EasyUI轻量级框架
  8. 数据库连接池使用的是阿里巴巴的Druid
  9. 在线编辑器使用了百度的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

发布了9 篇原创文章 · 获赞 5 · 访问量 1170

猜你喜欢

转载自blog.csdn.net/weixin_44200984/article/details/103500601
今日推荐