关于数据库设计-博客系统

1. 展示博客具体内容

 

2.设计到点击量 所以多加一个点击量字段

 

3.评论内容

 

3.1 记录用户IP地址

 

 

4.jsp展示页面

  1 <%@ page language="java" contentType="text/html; charset=gb2312"
  2     pageEncoding="gb2312"%>
  3 <%@taglib uri="/struts-tags" prefix="s"%>
  4 <%@ taglib uri="http://java.fckeditor.net" prefix="FCK"%> 
  5 DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  6 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  7 <head>
  8 <title>我的文章title>
  9 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 10 <link type="text/css" rel="stylesheet" href="../css/main.css" media="all" />
 11 
 12 <script type="text/javascript" src="../js/mootools.js">script>
 13 <script type="text/javascript" src="../js/site.js">script>
 14 head>
 15 <body>
 16 <div id="wrapper">
 17   <div id="container">
 18     <div id="scene"> c<img src="../images/scene.jpg" alt="" />
 19        <h1>${empty sessionScope.blogtitle ? "博客网站系统":sessionScope.blogtitle} <br/>
 20               <font size="8">${empty sessionScope.idiograph ? "我的签名":sessionScope.idiograph}font>
 21               h1>
 22       <div id="scale_area">
 23         <div id="scale_knob">» Font Size «div>
 24       div>
 25       <div id="menu">
 26          <div class="holder"> <a href="../showAllArticle.action">博客首页a> div>
 27         <div class="holder"> <a href="showUserAllArticle.action">用户首页a> div>
 28         <div class="holder"> <a href="editbloginfo.jsp">个性化设置a> div>
 29         <div class="holder"> <a href="addArticle.jsp">写日志a> div>
 30         <div class="holder"> <a href="showPhoto.action">相册a> div>
 31       div>
 32     div>
 33     <div id="content">
 34       <div id="col_left">
 35         <div class="post">
 36           <div class="meta"><a class="title" href=""><s:property value="#request.article.title"/>a>
 37             <div class="clear">div>
 38           div>
 39           <div class="comments">
 40             <div class="comment">
 41               <div class="meta">
 42               <span><s:property value="#request.article.content" escape="false"/>
 43               span>
 44                 <div class="clear"> div>
 45               div>
 46             div>
 47             div>
 48           div>
 49         
 50         <s:set name="loushu" value="#request.page.beginIndex">s:set>
 51         <s:iterator value="#request.allCri" id="cri">
 52         <s:set name="loushu" value="#loushu + 1">s:set>
 53           <div class="comments">
 54             <div class="comment">
 55               <div class="meta"><span><s:property value="#cri.content" escape="false"/>span>
 56                 <div class="clear"><span class="datetime">作者:<s:property value="#cri.username"/>span>div>
 57               div>
 58             div>
 59           div>
 60          s:iterator>
 61           <div class="comment" align="center">
 62               当前第${page.currentPage}页,共${page.totalPage}页,每页显示${page.everyPage}条记录
 63             <s:if test="#request.page.hasPrePage">
 64                 <a href="showArticle.action?id=${requestScope.article.id}¤tPage=1">首页a>
 65                 <a href="showArticle.action?id=${requestScope.article.id}¤tPage=${page.currentPage -1 }">上一页a>
 66             s:if>
 67             <s:else>
 68                 首页
 69                 上一页
 70             s:else>
 71             
 72             <s:if test="#request.page.hasNextPage">
 73                 <a href="showArticle.action?id=${requestScope.article.id}¤tPage=${page.currentPage + 1 }">下一页a>
 74                 <a href="showArticle.action?id=${requestScope.article.id}¤tPage=${page.totalPage }">尾页a>            
 75             s:if>
 76             <s:else>
 77                 下一页
 78                 尾页
 79             s:else>
 80           div>
 81           <div class="comment">
 82               <h2>发表评论h2>
 83             <form class="h" action="addCritique.action" method="post">
 84             <input type="hidden" name="id" value='${requestScope.article.id }'/>
 85               <div>
 86                 <FCK:editor instanceName="content" basePath="/user/fckeditor" toolbarSet="myToolbar" height="400">FCK:editor>
 87               div>
 88               <div>
 89                 <label>label>
 90                 <div class="clear"> div>
 91               div>
 92               <div class="button_wrapper">
 93                 <input name="提交" type="submit" class="button" value="提交" />
 94               div>
 95             form>
 96           div>
 97         div>
 98       div>
 99       <div id="col_right">
100         <div id="search_box">
101           <form action="" method="post">
102             <div>
103               <input type="text" name="search" />
104             div>
105             <div class="button_wrapper">
106               <input type="submit" value="Search" class="button" />
107             div>
108             <div class="clear"> div>
109           form>
110         div>
111         <div id="sidebar">
112           <h2>页面导航h2>
113           <ul>
114             <li><a href="../showAllArticle.action">博客首页a>li>
115             <li><a href="showUserAllArticle.action">用户首页a>li>
116             <li><a href="editbloginfo.jsp">个性化设置a>li>
117             <li><a href="addArticle.jsp">写日志a>li>
118                <li><a href="showPhoto.action">相册a>li>
119           ul>
120         div>
121       div>
122       <div class="clear"> div>
123     div>
124     <div id="footer">
125       <div class="clear"> div>
126       <hr />
127       <p class="credit">博客网站系统p>
128     div>
129   div>
130 body>
131 html>

 

5.

  1 package com.sanqing.action;
  2 
  3 import java.text.SimpleDateFormat;
  4 import java.util.Date;
  5 import java.util.Map;
  6 
  7 import javax.servlet.http.HttpServletRequest;
  8 
  9 import org.apache.struts2.ServletActionContext;
 10 
 11 import com.opensymphony.xwork2.ActionContext;
 12 import com.opensymphony.xwork2.ActionSupport;
 13 import com.sanqing.fenye.Page;
 14 import com.sanqing.fenye.Result;
 15 import com.sanqing.po.Article;
 16 import com.sanqing.po.BlogInfo;
 17 import com.sanqing.service.ArticleService;
 18 import com.sanqing.service.BlogInfoService;
 19 import com.sanqing.service.CritiqueService;
 20 import com.sanqing.service.DianjiliangService;
 21 
 22 public class ShowArticle extends ActionSupport {
 23     // 业务逻辑组件属性
 24     private ArticleService articleService;
 25     // id属性
 26     private int id;
 27     // 点击量的业务逻辑组件
 28     private DianjiliangService dianjiliangService;
 29     // 评论的业务逻辑组件
 30     private CritiqueService critiqueService;
 31     //设置当前页
 32     private int currentPage;
 33     
 34     //username
 35     private String username;
 36     
 37     private BlogInfoService blogInfoService;
 38 
 39     public BlogInfoService getBlogInfoService() {
 40         return blogInfoService;
 41     }
 42 
 43     public void setBlogInfoService(BlogInfoService blogInfoService) {
 44         this.blogInfoService = blogInfoService;
 45     }
 46 
 47     public String getUsername() {
 48         return username;
 49     }
 50 
 51     public void setUsername(String username) {
 52         this.username = username;
 53     }
 54 
 55     public int getCurrentPage() {
 56         return currentPage;
 57     }
 58 
 59     public void setCurrentPage(int currentPage) {
 60         this.currentPage = currentPage;
 61     }
 62 
 63     public CritiqueService getCritiqueService() {
 64         return critiqueService;
 65     }
 66 
 67     public void setCritiqueService(CritiqueService critiqueService) {
 68         this.critiqueService = critiqueService;
 69     }
 70 
 71     public DianjiliangService getDianjiliangService() {
 72         return dianjiliangService;
 73     }
 74 
 75     public void setDianjiliangService(DianjiliangService dianjiliangService) {
 76         this.dianjiliangService = dianjiliangService;
 77     }
 78 
 79     public int getId() {
 80         return id;
 81     }
 82 
 83     public void setId(int id) {
 84         this.id = id;
 85     }
 86 
 87     public ArticleService getArticleService() {
 88         return articleService;
 89     }
 90 
 91     public void setArticleService(ArticleService articleService) {
 92         this.articleService = articleService;
 93     }
 94 
 95     public String execute() throws Exception {
 96         // 将文章设置到request范围
 97         HttpServletRequest request = ServletActionContext.getRequest();
 98         // 按ID查询文章
 99         Article article = articleService.showArticle(id);
100         // 获得用户IP
101         String IP = request.getRemoteAddr();
102         // 获得当前时间
103         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
104         String stime = sdf.format(new Date());
105         Date time = sdf.parse(stime);
106 
107         if (!dianjiliangService.isVistor(id, IP, time)) {
108             // 点击量增加
109             article.setHasread(article.getHasread() + 1);
110         }
111         // 将更新的Article保存到数据表中
112         articleService.addArticle(article);
113         
114         
115         //显示评论
116         Page page = new Page();
117         page.setCurrentPage(this.getCurrentPage());
118         page.setEveryPage(5);
119         
120         Result result = critiqueService.showCritiqueByPage(id, page);
121         
122         request.setAttribute("page", result.getPage());
123         request.setAttribute("allCri", result.getList());
124         request.setAttribute("article", article);
125         
126         //取得个性化设置
127         //通过业务逻辑组件来查询
128         if(username != null || !"".equals(username)) {
129             Map session = ActionContext.getContext().getSession();
130             BlogInfo bloginfo  = blogInfoService.getBlogInfo(username);
131             if(bloginfo != null) {
132                 session.put("blogtitle", bloginfo.getBlogtitle());
133                 session.put("idiograph", bloginfo.getIdiograph());
134             }
135         }
136         return this.SUCCESS;
137     }
138 
139 }

 

 

6 strut2.xml

       
            showArticle
        

       

你可能感兴趣的:(关于数据库设计-博客系统)