【SSM架构】博客系统开发(八)-后台主页

1 完成效果

访问地址:http://localhost:8080/blog-douyuzhi/login
登陆成功后进入index.jsp

在这里插入图片描述

2 模板页的规划

(1) 加入 rapid 支持

它可以让我们的jsp支持模板的继承

 <dependency>
 	<groupId>com.googlecode.rapid-framework</groupId>
 	 <artifactId>rapid-core</artifactId>
 	 <version>4.0.5</version>
 </dependency>

(2) 建模板页framework.jsp

设计通用的模板页 framework.jsp 放在 src/main/webapp/jsp 目录下

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="http://www.rapid-framework.org.cn/rapid" prefix="rapid" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
 	<base href="<%=basePath%>">	
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">   
    <meta charset="utf-8">
    <link rel="shortcut icon" href="resources/img/logo.png">
    <title>博客后台</title>                  
    <link rel="stylesheet" href="resources/plugin/layui/css/layui.css">
    <link rel="stylesheet" href="resources/css/back.css">
    <link rel="stylesheet" href="resources/plugin/font-awesome/css/font-awesome.min.css">   
    <%--留给其他模块引入自已的样式或css --%>
    <rapid:block name="frame-header-style"> </rapid:block>
    <rapid:block name="frame-header-script"></rapid:block>
</head>
<body>
	<div class="layui-layout layui-layout-admin">
	    <div class="layui-header">
	        <div class="layui-logo">
	      	  <a href="/admin" style="color:#009688;">  博客后台 </a>
	        </div>
	        <!-- 头部区域(可配合layui已有的水平导航) -->
	        <ul class="layui-nav layui-layout-left">
	            <li class="layui-nav-item"><a href="/" target="_blank">前台</a></li>
	            <li class="layui-nav-item">
	                <a href="javascript:;">新建</a>
	                <dl class="layui-nav-child">
	                    <dd><a href="/admin/article/insert">文章</a></dd>
	                    <dd><a href="/admin/page/insert">页面</a></dd>
	                    <dd><a href="/admin/category/insert">分类</a></dd>
	                    <dd><a href="/admin/notice/insert">公告</a></dd>
	                    <dd><a href="/admin/link/insert">链接</a></dd>
	                </dl>
	            </li>
	        </ul>
	        <ul class="layui-nav layui-layout-right">
	            <li class="layui-nav-item">
	                <a href="javascript:void(0);"><img src="resources//uploads/2017/10/20171006225356181.jpg" class="layui-nav-img">  admin</a>
	                <dl class="layui-nav-child">
	                    <dd><a href="/admin/user/profile">基本资料</a></dd>
	                </dl>
	            </li>
	            <li class="layui-nav-item">
	                <a href="/admin/logout">退出</a>
	            </li>
	        </ul>
	    </div>	
	    <div class="layui-side layui-bg-black">
	        <div class="layui-side-scroll">
	            <!-- 左侧导航区域(可配合layui已有的垂直导航) -->
	            <ul class="layui-nav layui-nav-tree" >
	                <li class="layui-nav-item layui-nav-itemed">
	                    <a class="" href="javascript:;">文章</a>
	                    <dl class="layui-nav-child">
	                        <dd><a href="article">全部文章</a></dd>
	                        <dd><a href="article/add">写文章</a></dd>
	                        <dd><a href="category">全部分类</a></dd>
	                        <dd><a href="tag">全部标签</a></dd>
	                    </dl>
	                </li>
	                <li class="layui-nav-item">
	                    <a href="javascript:;">页面</a>
	                    <dl class="layui-nav-child">
	                        <dd><a href="page">全部页面</a></dd>
	                        <dd><a href="page/add">添加页面</a></dd>
	                    </dl>
	                </li>
	                <li class="layui-nav-item">
	                    <a class="" href="javascript:;"> 链接 </a>
	                    <dl class="layui-nav-child">
	                        <dd><a href="link">全部链接</a></dd>
	                        <dd><a href="link/add">添加链接</a></dd>
	                    </dl>
	                </li>
	                <li class="layui-nav-item">
	                    <a href="javascript:;">公告</a>
	                    <dl class="layui-nav-child">
	                        <dd><a href="notice">全部公告</a></dd>
	                        <dd><a href="notice/add">添加公告</a></dd>
	                    </dl>
	                </li>
	                <li class="layui-nav-item">
	                    <a href="comment">评论</a>
	                </li>
	                <li class="layui-nav-item">
	                    <a class="" href="javascript:;">用户 </a>
	                    <dl class="layui-nav-child">
	                        <dd><a href="user">全部用户</a></dd>
	                        <dd><a href="user/add">添加用户</a></dd>
	                    </dl>
	                </li>
	                <li class="layui-nav-item">
	                    <a href="javascript:;">设置</a>
	                    <dl class="layui-nav-child">
	                        <dd><a href="menu">菜单</a></dd>
	                        <dd><a href="options">主要选项</a></dd>
	                    </dl>
	                </li>
	            </ul>
	        </div>
	    </div>	
	    <div class="layui-body">         
	        <div style="padding: 15px;">
	            <rapid:block name="frame-content">
	                       内容主体区域  不同的页面要分别进行不同的重写
	            </rapid:block>
	        </div>
	    </div>	
	    <div class="layui-footer">
	        <!-- 底部固定区域 -->
	         ? 这里展示一些提示性信息 <a href="#" target="_blank">其他导航</a> / <a href="#" target="_blank">其他导航</a>
	    </div>
	</div>
	<script src="resources/js/jquery.min.js"></script>
	<script src="resources/plugin/layui/layui.all.js"></script>
	<script src="resources/js/back.js"></script>
	<%--留给其他模块引入自已的css --%>
	<rapid:block name="frame-footer-script">
	</rapid:block>
</body>
</html>

(3) index.jsp继承framework 模板

把原来的index.jsp 改成从上面的 framework 模板继承,并重写相应的模块

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.rapid-framework.org.cn/rapid" prefix="rapid" %>
<rapid:override name="frame-header-style">
	<link rel="stylesheet" href="resources/css/index-page.css" >
</rapid:override>										
<rapid:override name="frame-content">
   这是我重写的内容,哈哈哈, 原来如此	
</rapid:override>
<%@ include file="framework.jsp" %>

3 建主页index.jsp

index.jsp 中,重写内容

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.rapid-framework.org.cn/rapid" prefix="rapid" %>
<rapid:override name="frame-header-style">
<link rel="stylesheet" href="resources/css/index-page.css" >
</rapid:override>										
<rapid:override name="frame-content">
	<div class="layui-container">
	<div class="layui-row">
		<div class="layui-col-md6">
			<div id="dashboard_activity" class="postbox ">
				<div class="inside">
					<div id="activity-widget">
						<div id="published-posts" class="activity-block">
							<h3>最近发布</h3>
							<br>
							<ul>
								<li><span>21:06 11月25日</span> <a href="/article/33"
									target="_blank">MySQL常用命令语句</a></li>
								<li><span>21:05 11月25日</span> <a href="/article/32"
									target="_blank">Docker_入门?只要这篇就够了!(纯干货适合0基础小白)</a></li>
								<li><span>21:02 11月25日</span> <a href="/article/31"
									target="_blank">RocketMQ 实战之快速入门</a></li>
								<li><span>21:01 11月25日</span> <a href="/article/30"
									target="_blank">SpringBoot + mongodb 整合,
										记录网站操作日志,常用查询操作</a></li>
								<li><span>21:00 11月25日</span> <a href="/article/29"
									target="_blank">IDEA启动EDAS项目</a></li>
							</ul>
						</div>
						<br>
						<div id="latest-comments" class="activity-block">
							<h3>近期评论</h3>
							<ul id="the-comment-list" data-wp-lists="list:comment">
								<li class="comment   thread-even comment-item approved">

									<img alt=""
									src="http://cn.gravatar.com/avatar/88d5cb704d88bdad67d000eee4782000?s=128&d=identicon&r=PG"
									class="avatar avatar-50 photo" height="50" width="50">
									<div class="dashboard-comment-wrap has-row-actions">
										<p class="comment-meta"><cite class="comment-author"> <a target="_blank"
												href="" rel="external nofollow" class="url">1111</a>
											</cite>发表在 《<a href="/article/6">Hibernate 简单的CURD操作</a></p>

										<blockquote>
											<p>1</p>
										</blockquote>
										<p class="row-actions">
											| <span class=""> <a data-comment-id="1268"
												href="/admin/comment/reply/29"> 回复 </a>
											</span> <span class=""> | <a
												href="/admin/comment/edit/29">编辑</a>
											</span> <span class=""> | <a href="javascript:void(0)"
												onclick="deleteComment(29)">删除</a>
											</span>
										</p>
									</div>
								</li>
								<li class="comment   thread-even comment-item approved">

									<img alt=""
									src="http://cn.gravatar.com/avatar/487f87505f619bf9ea08f26bb34f8118?s=128&d=identicon&r=PG"
									class="avatar avatar-50 photo" height="50" width="50">
									<div class="dashboard-comment-wrap has-row-actions">
										<p class="comment-meta"><cite class="comment-author"> <a target="_blank"
												href="" rel="external nofollow" class="url">你好</a>
											</cite>发表在 《<a href="/article/6">Hibernate 简单的CURD操作</a></p>

										<blockquote>
											<p>ssss</p>
										</blockquote>
										<p class="row-actions">
											| <span class=""> <a data-comment-id="1268"
												href="/admin/comment/reply/22"> 回复 </a>
											</span> <span class=""> | <a
												href="/admin/comment/edit/22">编辑</a>
											</span> <span class=""> | <a href="javascript:void(0)"
												onclick="deleteComment(22)">删除</a>
											</span>
										</p>
									</div>
								</li>
								<li class="comment   thread-even comment-item approved">

									<img alt=""
									src="http://cn.gravatar.com/avatar/3ae8728fec3cd5cbfe99c4b966695f03?s=128&d=identicon&r=PG"
									class="avatar avatar-50 photo" height="50" width="50">
									<div class="dashboard-comment-wrap has-row-actions">
										<p class="comment-meta"><cite class="comment-author"> <a target="_blank"
												href="" rel="external nofollow" class="url">saysky3</a>
											</cite>发表在 《<a href="/article/2">springmvc 表单中文乱码解决方案</a></p>

										<blockquote>
											<p>33333</p>
										</blockquote>
										<p class="row-actions">
											| <span class=""> <a data-comment-id="1268"
												href="/admin/comment/reply/20"> 回复 </a>
											</span> <span class=""> | <a
												href="/admin/comment/edit/20">编辑</a>
											</span> <span class=""> | <a href="javascript:void(0)"
												onclick="deleteComment(20)">删除</a>
											</span>
										</p>
									</div>
								</li>
								<li class="comment   thread-even comment-item approved">

									<img alt=""
									src="http://cn.gravatar.com/avatar/3ae8728fec3cd5cbfe99c4b966695f03?s=128&d=identicon&r=PG"
									class="avatar avatar-50 photo" height="50" width="50">
									<div class="dashboard-comment-wrap has-row-actions">
										<p class="comment-meta"><cite class="comment-author"> <a target="_blank"
												href="" rel="external nofollow" class="url">saysky2</a>
											</cite>发表在 《<a href="/article/2">springmvc 表单中文乱码解决方案</a></p>

										<blockquote>
											<p>sssssss</p>
										</blockquote>
										<p class="row-actions">
											| <span class=""> <a data-comment-id="1268"
												href="/admin/comment/reply/19"> 回复 </a>
											</span> <span class=""> | <a
												href="/admin/comment/edit/19">编辑</a>
											</span> <span class=""> | <a href="javascript:void(0)"
												onclick="deleteComment(19)">删除</a>
											</span>
										</p>
									</div>
								</li>
								<li class="comment   thread-even comment-item approved">

									<img alt=""
									src="http://cn.gravatar.com/avatar/3ae8728fec3cd5cbfe99c4b966695f03?s=128&d=identicon&r=PG"
									class="avatar avatar-50 photo" height="50" width="50">
									<div class="dashboard-comment-wrap has-row-actions">
										<p class="comment-meta"><cite class="comment-author"> <a target="_blank"
												href="http://liuyanzhao.com" rel="external nofollow"
												class="url">saysky</a>
											</cite>发表在 《<a href="/article/2">springmvc 表单中文乱码解决方案</a></p>

										<blockquote>
											<p>ssssss</p>
										</blockquote>
										<p class="row-actions">
											| <span class=""> <a data-comment-id="1268"
												href="/admin/comment/reply/18"> 回复 </a>
											</span> <span class=""> | <a
												href="/admin/comment/edit/18">编辑</a>
											</span> <span class=""> | <a href="javascript:void(0)"
												onclick="deleteComment(18)">删除</a>
											</span>
										</p>
									</div>
								</li>
							</ul>
						</div>
					</div>
				</div>
			</div>
		</div>
		<div class="layui-col-md6">
			<div id="dashboard_quick_press" class="postbox ">
				<div class="inside">
					<form name="post" method="post" id="insertDraftForm"
						class="initial-form hide-if-no-js"
						action="/admin/article/insertDraftSubmit">

						<div class="layui-form-item">
							<div class="layui-input-block">
								<input type="text" name="articleTitle" id="articleTitle"
									required lay-verify="required" placeholder="请输入标题"
									autocomplete="off" class="layui-input">
							</div>
						</div>
						<div class="layui-form-item layui-form-text">
							<div class="layui-input-block">
								<textarea name="articleContent" placeholder="请输入内容"
									id="articleContent" class="layui-textarea" required></textarea>
							</div>
						</div>
						<input type="hidden" name="articleStatus" value="0">
						<div class="layui-form-item">
							<div class="layui-input-block">
								<button class="layui-btn layui-btn-small" lay-submit
									lay-filter="formDemo" onclick="insertDraft()">保存草稿</button>
								<button type="reset"
									class="layui-btn layui-btn-small layui-btn-primary">重置</button>
							</div>
						</div>

					</form>
					<div class="drafts">
						<p class="view-all">
							<a href="/admin/article" aria-label="查看所有草稿">查看所有</a>
						</p>
						<h2 class="hide-if-no-js">草稿</h2>
						<ul>
						</ul>
					</div>
				</div>
			</div>
		</div>
	</div>
</div>
</rapid:override>
<%@ include file="framework.jsp" %>

4 提取文章列表的数据

(1) 建实体类Article.java

文章表对应的实体类

   package com.entity;
       import java.util.Date;
				public class Article {
			    //文章ID, 自增主键
			    private Integer articleId;
			    //创建文章的用户
			    private Integer articleUserId;		
			    //文章标题
			    private String articleTitle;			
			    //浏览次数
			    private Integer articleViewCount;	
			    //回复次数
			    private Integer articleCommentCount;			
			    //点赞次数
			    private Integer articleLikeCount;		
			    //创建时间
			    private Date articleCreateTime;
			    //更新时间
			    private Date articleUpdateTime;
			    //是否回复
			    private Integer articleIsComment;
			    //状态(0,草稿,1 已发表)
			    private Integer articleStatus;			
			    //排序
			    private Integer articleOrder;			
			    //文章内容
			    private String articleContent;			
			    //文章概述
			    private String articleSummary;			
			    //用户
			    private User user;			
			    //文章挂有哪些标签
			    //private List<Tag> tagList;			
			    //文章属于哪些分类
			    //private List<Category> categoryList;			    
			    get set 方法//别忘了建立get set 方法	

(2) 建 ArticleMapper.java接口

com.mapper.ArticleMapper 接口

package com.mapper;
import java.util.List;
import com.entity.Article;

public interface ArticleMapper {
	/**
	 * 查询最新发布的前n条文件
	 * @param n 查询出的文章数
	 * @return 文章列表
	 */
	List<Article>listRecentArticle(Integer n);
}
	

(3) 建ArticleMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.mapper.ArticleMapper">
	
	<select id="listRecentArticle"  resultType="Article">
		select * from Article order by article_id DESC limit #{n}
	</select>
	
</mapper>

(4) 建业务层接口ArticleServic.java

ArticleService 业务层接口

package com.service;
import java.util.List;
import com.entity.Article;

public interface ArticleService {
	/**
	 * 查询最新发布的前n条文件
	 * @param n 查询出的文章数
	 * @return 文章列表
	 */
	List<Article>listRecentArticle(Integer n);
}

(5) 建业务层ArticleServiceImpl.java

业务层的实现类

package com.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.entity.Article;
import com.mapper.ArticleMapper;
import com.service.ArticleService;

@Service
public class ArticleServiceImpl implements ArticleService {
	@Resource
	private ArticleMapper articleMapper;
	/**
	 * 查询最近发表的前n条文章
	 */
	public List<Article> listRecentArticle(Integer n) {
		return articleMapper.listRecentArticle(n);
	}
}

(6) 配置控制层AdminController.java

控制层
@Controller
public class AdminController {
@Resource
private UserService userService;

				@Resource
				private  ArticleService articleService;
				
				@RequestMapping("/login")
				public String login(String userName,String userPass,HttpServletRequest request) {
			
					//调用dao层来进行数据访问
					User  user =userService.login(userName, userPass);
					if(user!=null ) {		
						//把当前登录用户的信息放到 session 中,为了以后全局共享
						request.getSession().setAttribute("session_user", user);		
						
						List<Article> articleList= articleService.listRecentArticle(5);
						request.setAttribute("articleList", articleList);
				
						return  "index";  
					}
					else {
						request.setAttribute("msg", "用户或或密码错误,登录失败");
						return  "login";  
					}
				}	
			}

(7) 主页加入展示数据

在index.jsp上展示模型数据
上方引入 jstl 标签库

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

然后把jsp中,原来的ul中的静态的文章列表内容换成下面的:

<ul>								
	<c:forEach var= "a"  items="${articleList }">
		<li>
			<span>  
				 <fmt:formatDate value="${a.articleCreateTime }"  pattern="yyyy/MM/dd hh:mm:ss"  />  
			</span> 
			<a href="/article/${a.articleId }" target="_blank">${a.articleTitle }_AA</a>
		</li>
	</c:forEach>						
</ul>

5 数据库表article结构

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_35325539/article/details/106902587