天天看點

【SSM架構】部落格系統開發(八)-背景首頁1 完成效果2 模闆頁的規劃3 建首頁index.jsp4 提取文章清單的資料5 資料庫表article結構

【SSM架構】部落格系統開發8-背景首頁

  • 1 完成效果
  • 2 模闆頁的規劃
      • (1) 加入 rapid 支援
      • (2) 模組化闆頁framework.jsp
      • (3) index.jsp繼承framework 模闆
  • 3 建首頁index.jsp
  • 4 提取文章清單的資料
      • (1) 建實體類Article.java
      • (2) 建 ArticleMapper.java接口
      • (3) 建ArticleMapper.xml
      • (4) 建業務層接口ArticleServic.java
      • (5) 建業務層ArticleServiceImpl.java
      • (6) 配置控制層AdminController.java
      • (7) 首頁加入展示資料
  • 5 資料庫表article結構

1 完成效果

通路位址:http://localhost:8080/blog-douyuzhi/login

登陸成功後進入index.jsp

【SSM架構】部落格系統開發(八)-背景首頁1 完成效果2 模闆頁的規劃3 建首頁index.jsp4 提取文章清單的資料5 資料庫表article結構

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結構

【SSM架構】部落格系統開發(八)-背景首頁1 完成效果2 模闆頁的規劃3 建首頁index.jsp4 提取文章清單的資料5 資料庫表article結構