个人博客系统的设计与实现

 

随着互联网的发展,博客在自由和共享的精神的影响下应运而生。博客的出现让我们有更多机会在日常生活中向他人展示自己的观点和信息。博客就是开放的私人空间。在互联网中,你可以尽情的发表自己的思想和言论。可以在网络上结交各式各样的人。

互联网在大家的方方面面都提供了极大的帮助。所以很明显的趋势就是网站的出现。个人博客系统为树立个人在网络上的形象提供了一个良好的平台。

JAVA作为目前最盛行的技术之一,J2EE(JAVA企业版本)十分适合于Web应用程序的设计和实现。此外,目前基于J2EE的开源框架在市场上久经考验,java社区也是十分活跃。本文的目的就是利用J2EE技术设计和实现个人博客系统。

关键词:个人博客系统;B/S结构;SpringMVCSpring MyBatis

 

ABSTRACT

blog comes into being under the influence of the spirit of freedom and sharing. The advent of blogs gives us more opportunities to present our views and information to others in our daily lives. Blog is open private space. On the Internet, you can express your thoughts and opinions. You can make all kinds of people on the internet.

The Internet has provided great help in all aspects of our. So the obvious trend is the emergence of the site. Personal blog system provides a good platform for setting up the image of the individual on the network.

JAVA is currently the most popular technology, J2EE (JAVA enterprise version) is very suitable for the design and implementation of Web applications. In addition, the current open source framework based on J2EE has been tested on the market, Java community is also very active. The purpose of this paper is to use J2EE technology to design and implement personal blog system.

Key words: Personal Blog SystemB / S structureSpringMVCSpring MyBatis

个人博客是人们在网络上展现自己个性的一种方式。自从互联网走进千家万户,大受人们喜爱。大家都喜欢通过网络来获取各种各样的信息。而在网络上,你也可以畅所欲言,而个人博客也是其中一种。在个人博客上,你可以发表自己的心路旅程,发表自己的工作经验,发表技术博客等等。

首先介绍一下什么是博客,它也被称为网络日志。博客其实就是一个网页,它是由各种各样的帖子组成。这些帖子可以是你某一天观看电影的感慨,也可以是阅读到某篇书籍的读后感,更可以是你在自己技术领域的心得。它就是一个网页,但是大家可以在上面用文字或者图片分享自己的心情等,它提供的内容可以用来进行交流。

博客最开始的时候是论坛下的一个子系统。最早参与博客的都是一些信息技术的一些专家和学者,讨论的都是专业技能。直到发现了博客的商业价值,一些开放了自发式的博客,大家也都发现了博客分享和讨论的趣味。越来越多的人参与进来,博客也越来越风靡盛行。

博客与论坛有许多的相似之处,许多朋友都分不清他们两的区别。首先,论坛和博客都可以进行交友和交流等。而其中论坛注重的是集体讨论,博客注重的是个人分享。它们两者的核心点就有着很大的区别。论坛的创建的用户是基于为众人服务,而博客是为了博主服务。它们的不同点还有在形式上的不同。博客是独立存在的。而论坛并不是。总结起来,论坛是多人一起交流的地方,互动性强,社交性强。博客是发表个人文章的地方,虽然也可以交流,但更多的还是自娱自乐。

第二章  相关技术介绍

2.1 B/S 简介

软件系统体系结构分为两种,是客户机/服务器结构和浏览器/服务器结构。其中的浏览器/服务器结构就是B/S结构。

C/s模式:是客户端/服务器(Client/Server)模式,主要指的是传统的桌面级的应用程序。比如我们经常用的信息管理系统。

B/S模式:是浏览器/服务器(Browser/Server)模式,主要指的是web应用程序,就像电子商务网站,如淘宝,阿里巴巴等。相对于C/S模式的应用程序来说,B/S模式最大的优势在于客户端只要有浏览器就可以运行。而C/S模式的应用程序需要在客户端进行安装,而且升级也不太方便。而B/S模式的应用程序对于客户端来说,永远都是最新版本的。

2.2 JAVA 简介

Java的前身是Oak,sun公司在1995年申请注册商标的时候,发现已经Oak已经被注册了,最终才另外取了一个名字叫JAVA(其中还有一个趣味故事,有兴趣的可以去查找看看),

要使用Java首先要到官网甲骨文官网上下载Java的软件开发工具包,其中分为windows版本和Linux版本,我使用的是Windows的。而在Windows上要使用Java,要设置JAVA的环境变量。设置环境变量的步骤如下:第一步,点击计算机属性中的高级系统设置,点击系统属性高级的环境变量。第二步,设置一个系统变量为JAVA_HOME,其中的值是你的Java安装目录。它的作用还在于一些使用Java的工具时候需要用到这个变量,否则打不开,例如eclipse.第三步,设置一个classpath系统变量,它的作用是在你写Java源文件导包的时候去查找的类路径。第三步,在Windows自有的系统变量path中加入Java安装目录下的bin路径。既可以写成%JAVA_HOME%/bin;这就将Java的运行环境搭配好了。

介绍一下Java的文件目录。首先最重要的bin目录下面包含的是一些JDK包含的一些开发工具执行文件,例如像编译器javac.exe.运行Java的java.exe等等都在这个目录下面。其中Java启动的虚拟机在Java目录的jre目录中。

2.3 JSP 简介

Jsp是服务端技术,与微软的ASP一样,是一种动态网页的技术,不过jsp是使用Java语言技术开发的技术,jsp使用的时候会被jsp引擎解析成Servlet代码,而jsp虽然可以写Java代码,但是jsp主要的作用是为了展示视图,所以jsp+javabean 可以很好的解决代码混淆问题,然后将视图与逻辑分离。

2.4 SpringMVC简介

SpringMVC是一种现今十分流行的WEB框架,它的作用是使用了MVC思想设计模式对web层进行解耦。是用来接受请求和处理请求的。

   SpringMVC处理请求的流程是如下:首先用户从浏览器中发送请求;之后它SpringMVC的核心组件DispacherServlet 前端控制器根据请求信息也即是url的信息来选择一个页面控制器进行处理;页面控制器接受得到委托之后,它首先会收集和绑定参数到某个对象中,然后调用业务对象进行业务逻辑代码处理,处理结束后返回ModelAndView。前端控制器根据视图的名字渲染相应的视图然后将响应传到前台去。

第三章  可行性分析

3.1 技术可行性分析

本系统管理项目使用的是maven,数据库连接使用的是mybatis,数据库使用的是mysql,接受浏览器请求并处理的是使用springmvc,他们都是经过市场检验的,都已经十分成熟了,在安全性、可用性、可靠性等方面都是可以值得肯定的

3.2 经济可行性分析

       本系统使用的技术框架都是开源框架,比如spring,springmvc,mybatis.而使用的数据库也是开源免费的mysql,使用的开发软件eclipse也是免费的,人员就本人一个也是免费的。所以在经济上消费很低,在经济可行性分析中是可以确定可行的。

3.3 操作可行性

个人博客系统开发结合个人需求而开发,能解决用户可以通过互联网来展现自己等诸多问题,因此该项目符合开发条件,具有成熟的基础,并且,从前面的分析来看,技术上的操作是十分成熟并且开源免费广为人们使用,从系统的操作上是可行的。

第四章  系统设计

4.1 系统总流程

图4-1  系统流程图

本个人博客系统分为两个角色,分别是博主和游客。只有博主才能登录后台管理系统,进行博客发表。

1.首先要通过用户名和密码登录后台管理系统,才能发布博客。

2.博主和游客都可以阅读博客。

3.博主和游客都可以发表评论。

4.经过博主的评论审核,评论才可以发布。

5.此时博主和游客才可以观看到评论。

4.2 博主用例

图4-2博主用例图

博主的功能简介:

1.登入功能

登入后台管理系统:首先进入登录页面,需要输入账号和密码。它会使用Shiro进行安全管理,对前台输入的密码进行加密运算,然后与数据库中的进行比较。成功后才能登入后台系统。

  1. 博客管理功能

博客管理功能分为写博客和博客信息管理。写博客是博主用来发表编写博客的,需要博客标题,然后选择博客类型,最后将博客内容填入百度的富文本编辑器中,点击发布博客按钮即可发布博客。

  1. 博客类别管理系统

博主类别管理系统可以添加,修改和删除博客类型名称和排序序号。将会显示到首页的按日志类别区域。游客可以从这里查找相关的感兴趣的博客内容。

4.评论管理功能

评论管理功能分为评论审核和评论信息管理两部分。评论审核是当有游客或自己发表了评论之后,博主需要在后台管理系统中审核评论。若想将此评论显示在页面上则点击审核通过,否则点击审核不通过。

5.个人信息管理功能

在这里可以修改博主的个人信息,可以修改昵称,个性签名,可以添加个人头像,修改个人简介。

6.系统管理功能

这里的功能有友情链接管理,修改密码,刷新系统缓存和安全退出。

友情链接管理可以添加,修改,删除友情链接网址。

4.3 游客用例

图4-3游客用例图

用例一

用例名称:查询博客

参与者:游客

主要流程:

  1. 在查询搜索处填写所需的条件
  2. 点击查询
  3. 便会显示出符合条件的所有博客

用例二

用例名称:查看博客内容

参与者:游客

主要流程:

  1. 点击想要查看的博客,进入博客内容页面
  2. 观看博客内容信息

用例三

用例名称:查看博主个人信息

参与者:游客

主要流程:

  1. 点击关于博主,进入博主个人信息页面
  2. 可以看到博主的个人信息内容

用例四

用例名称:发表评论

参与者:游客

前置条件:首先要进入到博客内容页面

主要流程:

  1. 在发表评论的评论框中写入自己想要发表的评论
  2. 填入验证码
  3. 点击发表评论

用例五

用例名称:查看友情链接

参与者:游客

主要流程:

  1. 在每个页面的右下角可以看到友情链接
  2. 若想跳转到某个友情链接则点击相应的友情链接即可
  3. 观看友情链接内容

4.4 系统类

图4-4博客类图

本系统主要功能和模块的JavaBean主要集中博客、博客类型、评论、友情链接这四个类。

一、博客类

1.功能

用于存储博主发表的博客的一些信息

2.属性

id; // 编号                                                       

title; // 博客标题                                                    

summary; // 摘要                                                   

leaseDate; // 发布日期                                               

clickHit; // 查看次数                                               

replyHit; // 回复次数                                               

content; // 博客内容                                                 

contentNoTag; // 博客内容 无网页标签 Lucene分词用                            

blogType; // 博客类型                                              

blogCount; // 博客数量 非博客实际属性,主要是 根据发布日期归档查询博客数量用                  

releaseDateStr; // 发布日期字符串 只取年和月                                  keyWord; // 关键字                                             

3.方法

都是属性对应的setter,getter方法

二、博客类型类

1.功能:对博客进行分类,将博客分为几大类型

2.属性:

id; // 编号       

userName; // 用户名 

password; // 密码  

nickName; // 昵称  

sign; // 个性签名    

proFile; // 个人简介 

imageName; // 博主头像

3.方法:

对应的setter,getter方法

三,评论类:

1.功能:对博客评论数据保存。

2,。属性:

id; // 编号                          

userIp; // 用户IP                     

content; // 评论内容                    

blog; // 被评论的博客                       

commentDate; // 评论日期                  

state; // 审核状态  0 待审核 1 审核通过 2 审核未通过

3.方法:

对应的setter,getter方法

四.友情链接

1.功能:可以保存页面上的友情链接网址。

2.属性:

id; // 编号             

linkName; // 链接名称      

linkUrl; // 链接地址       

orderNo; // 排序序号 从小到大排序    

3.方法:

对应的setter,getter方法。

发布日期

椭圆​​: 发布日期4.5 E-R图

标题

博客

查看次数

摘要

关键字

 

博客内容

椭圆​​: 博客内容

发布日期

椭圆​​: 发布日期

博客类型

椭圆​​: 博客类型                                                                                                                                          

                                                                                                              

                                                                           

图4-5博客E-R图

博客类的关系模式如下(加下滑线的是主键):

博客(编号,博客标题,摘要,发布日期,查看次数,博客类型,关键字,博客内容)。

博主

用户名

个性签名

个人简介

博主头像

昵称

密码

 

图4-6博主E-R图

博主类的关系模式如下(加下滑线的是主键):

博主实体(编号,用户名,密码,昵称,个性签名,个人简介,博主头像)。

博客类型

博客类型名称

数量

排序

 

图4-7博客类型E-R图

博客类型类的关系模式如下(加下滑线的是主键):

博客类型实体(编号,博客类型名称,数量,排序)。

评论

用户IP

评论内容

被评论的博客

评论日期

审核状态

 

图4-8评论E-R图

评论类的关系模式如下(加下滑线的是主键):

评论实体(编号,用户IP,评论内容,被评论的博客,评论日期,审核状态)。

友情链接

链接名称

链接地址

排序

 

图4-9友情链接E-R图

友情链接类的关系模式如下(加下滑线的是主键):

友情链接实体(编号,链接名称,链接地址,排序序号)。

4.6 系统表设计

系统总共有五张表,分别是博客表,博主表,博客类型表,评论表,友情链接表。如下所示:

表4-1 t_blog表

字段名                  数据类型                    允许非空

id                       int(11)                     no

title                    varchar(200)                yes

summary                  varchar(400)                yes

releaseDate              datetime                    yes

clickHit                 int(11)                     yes

replyHit                 int(11)                     yes

content                  text                        yes

typeId                   int(11)                     yes

表4-2 t_blogger表

字段名                  数据类型                    允许非空

id                       int(11)                     no

userName                 varchar(50)                 yes

password                 varchar(100)                yes

profile                  text                        yes

nickName                 varchar(50)                 yes

sign                     varchar(100)                yes

imageName                varchar(100)                yes

表4-3 t_blogtye表

字段名                  数据类型                    允许非空

id                       int(11)                     no

typeName                 varchar(30)                 yes

orderNo                  int(11)                     yes

表4-4 t_comment表

字段名                  数据类型                    允许非空

id                       int(11)                     no

userIp                   varchar(50)                 yes

blogId                   int(11)                     yes

content                  varchar(1000)               yes

commentDate              datetime                    yes

state                    int(11)                     yes

表4-5 t_link表

字段名                  数据类型                    允许非空

id                       int(11)                     no

linkName                 varchar(100)                yes

linkUrl                  varchar(200)                yes

orderNo                  int(11)                     yes

第五章  系统实现

5.1 登录模块

5.1.1 博主登录

登入系统后台管理登录页面,博主首先输入用户名和密码,它回去调用Controller层代码,然后进入业务层调用数据库的一些操作确认是否用户名密码正确,然后返回到前台就会登进去。

登录首页模块主要代码:

JSP代码:

使用form表单提交到后台进行数据验证:

<form action="${pageContext.request.contextPath}/blogger/login.do" method="post" οnsubmit="return checkForm()">

       <DIV style="width: 165px; height: 96px; position: absolute;">

          <DIV class="tou">

          </DIV>

          <DIV class="initial_left_hand" id="left_hand">

          </DIV>

          <DIV class="initial_right_hand" id="right_hand">

          </DIV>

       </DIV>

       <P style="padding: 30px 0px 10px; position: relative;">

          <SPAN class="u_logo"></SPAN>

          <INPUT id="userName" name="userName" class="ipt" type="text" placeholder="请输入用户名" value="${blogger.userName }">

       </P>

       <P style="position: relative;">

          <SPAN class="p_logo"></SPAN>        

          <INPUT id="password" name="password" class="ipt"  type="password" placeholder="请输入密码" value="${blogger.password }">  

       </P>

       <DIV style="height: 50px; line-height: 50px; margin-top: 30px; border-top-color: rgb(231, 231, 231); border-top-width: 1px; border-top-style: solid;">

          <P style="margin: 0px 35px 20px 45px;">

          <SPAN style="float: left;"><a href="${pageContext.request.contextPath}/index.html">Java个人博客系统</a></SPAN>

          <span><font color="red" id="error">${errorInfo }</font></span>

           <SPAN style="float: right;">

                 <input type="submit" value="登录"/>

            </SPAN>        

            </P>

       </DIV>

   </DIV>

</form>

使用javascrip对输入的博主用户名和密码进行校验,若用户名或密码为空,提示错误信息来提醒用户, 用户再去查找错误。

function checkForm(){

   var userName=$("#userName").val();

   var password=$("#password").val();

   if(userName==null||userName==""){

       $("#error").html("用户名不能为空!");

       return false;

   }

   if(password==null||password==""){

       $("#error").html("密码不能为空!");

       return false;

   }

   return true;

}

java代码:使用MVC框架,对后台数据和前台form表单提交的数据进行交互                             

@Controller

@RequestMapping("/blogger")

public class BloggerController {

   @Resource

   private BloggerService bloggerService;

  

   /**

    * 用户登录

    * @param blogger

    * @param request

    * @return

    */

   @RequestMapping("/login")

   public String login(Blogger blogger,HttpServletRequest request){

       Subject subject=SecurityUtils.getSubject();

       UsernamePasswordToken token=new UsernamePasswordToken(blogger.getUserName(), CryptographyUtil.md5(blogger.getPassword(), "java1234"));

       try{

          subject.login(token); // 登录验证

          return "redirect:/admin/main.jsp";

       }catch(Exception e){

          e.printStackTrace();

          request.setAttribute("blogger", blogger);

          request.setAttribute("errorInfo", "用户名或密码错误!");

          return "login";

       }

5.2 博客管理模块:

博客管理管理模块为个人博客系统的用户(即博主)提供写博客和博客信息管理功能。在个人博客系统的首页上的博客就是从这里进行发布的。博客管理包含

新建:対博客的新建,博客可以含有图片,视频,音频附件。新建博客必须要有博客标题,博客类别自己选择所需要的博客类别,然后填入博客内容,最后发表文章。

搜索:在博客信息管理中,可以输入自己想要搜索的博客信息,系统会自动筛选出适合的博客展现给用户。

修改: 点击你想要修改的博客,系统会弹出修改博客页面,之后博客的标题,所属的博客类型,博客内容等都可以修改。

删除: 该系统支持单个删除和批量删除。

5.2.1 博客查询

图4-1查询博客时序图

步骤

系统行为描述

1

博客信息管理页面点查询按钮

2

页面表单提交调用控制层控制层的list方法

3

控制层list方法中调用服务层的list方法

4

服务层调用持久层list方法返回博客集合

 

按条件查询博客,调用控制层的list方法,在其中调用服务层list方法,返回  blog集合:List<Blog> list。获得集合后使用方法把查询到符要求的数据传到前台,在前台对数据进行处理。中心代码如下:                  

   @RequestMapping("/list")

   public String list(@RequestParam(value="page",required=false)String page,@RequestParam(value="rows",required=false)String rows,Blog s_blog,HttpServletResponse response)throws Exception{

       PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));

       Map<String,Object> map=new HashMap<String,Object>();

       map.put("title", StringUtil.formatLike(s_blog.getTitle()));

       map.put("start", pageBean.getStart());

       map.put("size", pageBean.getPageSize());

       List<Blog> blogList=blogService.list(map);

       Long total=blogService.getTotal(map);

       JSONObject result=new JSONObject();

       JsonConfig jsonConfig=new JsonConfig();

       jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd"));

       JSONArray jsonArray=JSONArray.fromObject(blogList,jsonConfig);

       result.put("rows", jsonArray);

       result.put("total", total);

       ResponseUtil.write(response, result);

       return null;

   }

5.2.2 博客新建

图4-2 新建博客时序图

步骤

系统行为描述

1

博主在后台页面填写博客信息点击发布博客按钮

2

Jsp表单提交调用控制层controller的save方法

3

控制层save方法中调用service层的add方法

4

调用blogMapper持久层保存博客信息

5

添加索引

点击写博客进入博客发布界面,填写博客内容信息,点击发布博客,提交到控制层的save方法,传入参数:Blog,该参数包含了该博客所有信息内容,在提交的时候使用javascript对博客的内容进行校验。校验成功后便会调用控制层的方法,在控制层的save()方法中调用服务层的add()方法,对该博客进行保存,持久到数据库中。部分代码如下

@RequestMapping("/save")

   public String save(Blog blog,HttpServletResponse response)throws Exception{

       int resultTotal=0; // 操作的记录条数

       if(blog.getId()==null){

          resultTotal=blogService.add(blog);

          blogIndex.addIndex(blog); // 添加博客索引

       }else{

          resultTotal=blogService.update(blog);

          blogIndex.updateIndex(blog); // 更新博客索引

       }

       JSONObject result=new JSONObject();

       if(resultTotal>0){

          result.put("success", true);

       }else{

          result.put("success", false);

       }

       ResponseUtil.write(response, result);

       return null;}

5.2.3 博客修改

   图4-3 修改博客时序图

步骤

系统行为描述

1

博主在博客信息管理页面选择需要修改的博客打开博客修改页面

2

Jsp表单提交调用控制层controller的save方法

3

控制层save方法中调用service层的update方法

4

调用blogMapper持久层保存修改后的博客信息

5

更新索引

进入博客修改页面,修改博客内容信息,点击发布博客,提交到控制层的save方法,传入参数:Blog,该参数包含了修改后的博客所有信息内容,在提交的时候使用javascript对博客的内容进行校验。校验成功后便会调用控制层的方法,在控制层的save()方法中调用服务层的update()方法,对该博客进行保存,持久到数据库中。部分代码如下

@RequestMapping("/save")

   public String save(Blog blog,HttpServletResponse response)throws Exception{

       int resultTotal=0; // 操作的记录条数

       if(blog.getId()==null){

          resultTotal=blogService.add(blog);

          blogIndex.addIndex(blog); // 添加博客索引

       }else{

          resultTotal=blogService.update(blog);

          blogIndex.updateIndex(blog); // 更新博客索引

       }

       JSONObject result=new JSONObject();

       if(resultTotal>0){

          result.put("success", true);

       }else{

          result.put("success", false);

       }

       ResponseUtil.write(response, result);

       return null;}

5.2.4 博客删除

图4-4 删除博客时序图

步骤

系统行为描述

1

博主在博客信息管理页面选择需要删除的博客(可以选择多条)

2

调用控制层controller的delete方法

3

控制层delete方法中调用service层的delete方法

4

调用blogMapper持久层将对应的博客信息删除

5

删除对应博客的索引

在博客管理页面选择需要删除的博客,点击删除按钮,提交到控制层的delete方法,传入参数:需要删除博客的id,调用控制层的方法,在控制层的delete()方法中调用服务层的delete()方法,对该博客或多个博客进行删除,持久到数据库中。部分代码如下:

@RequestMapping("/delete")

   public String delete(@RequestParam(value="ids")String ids,HttpServletResponse response)throws Exception{

       String []idsStr=ids.split(",");

       for(int i=0;i<idsStr.length;i++){

          blogService.delete(Integer.parseInt(idsStr[i]));

          blogIndex.deleteIndex(idsStr[i]); // 删除对应博客的索引

       }

       JSONObject result=new JSONObject();

       result.put("success", true);

       ResponseUtil.write(response, result);

       return null;

   }

5.3 博客类别管理模块

5.3.1 添加博客类别

图4-5 添加博客类型时序图

步骤

系统行为描述

1

博主在博客类别信息管理页面点击添加按钮打开添加博客类别弹窗

2

调用blogType控制层controller的save方法

3

控制层save方法中调用service层的add方法

4

调用blogTypeMapper持久层将对应的博客类别信息添加

5

返回成功添加信息

在博客类别管理页面打开添加博客类别弹窗,填写博客类别名称和排序,点击保存按钮,提交到控制层的save方法,传入参数:需要添加的博客类型blogType,调用控制层的方法,在控制层的save()方法中调用服务层的add()方法,添加博客类别的相关信息,持久到数据库中。部分代码如下:

@RequestMapping("/save")

   public String save(BlogType blogType,HttpServletResponse response)throws Exception{

       int resultTotal=0; // 操作的记录条数

       if(blogType.getId()==null){

          resultTotal=blogTypeService.add(blogType);

       }else{

          resultTotal=blogTypeService.update(blogType);

       }

       JSONObject result=new JSONObject();

       if(resultTotal>0){

          result.put("success", true);

       }else{

          result.put("success", false);

       }

       ResponseUtil.write(response, result);

       return null;

   }

5.3.2 修改博客类别

图4-6 修改博客类型时序图

步骤

系统行为描述

1

博主在博客类别信息管理页面选择要修改的博客类别点击修改按钮弹出弹窗

2

调用blogType控制层controller的save方法

3

控制层save方法中调用service层的update方法

4

调用blogTypeMapper持久层将对应的博客类别信息修改

5

返回成功系修改信息

在博客类别管理页面先选择要修改的数据,点击修改按钮,打开修改博客类别弹窗,填写修改后博客类别名称和排序,点击保存按钮,提交到控制层的save方法,传入参数:需要添加的博客类型blogType,调用控制层的方法,在控制层的save()方法中调用服务层的update()方法,修改博客类别的相关信息,持久到数据库中。部分代码如下:

@RequestMapping("/save")

   public String save(BlogType blogType,HttpServletResponse response)throws Exception{

       int resultTotal=0; // 操作的记录条数

       if(blogType.getId()==null){

          resultTotal=blogTypeService.add(blogType);

       }else{

          resultTotal=blogTypeService.update(blogType);

       }

       JSONObject result=new JSONObject();

       if(resultTotal>0){

          result.put("success", true);

       }else{

          result.put("success", false);

       }

       ResponseUtil.write(response, result);

       return null;

   }

5.3.3 删除博客类别

图4-7 删除博客类型时序图

步骤

系统行为描述

1

博主在博客类别信息管理页面勾选上要删除的博客类别,点击删除按钮

2

调用blogType控制层controller的delete方法

3

控制层delete方法中调用service层的delete方法

4

调用blogTypeMapper持久层将对应的博客类别信息删除

5

返回成功删除信息

在博客类别管理页面先勾选上要删除的数据,点击删除按钮,提交到控制层的delete方法,传入参数:需要删除的博客类型的id(可以是多个),调用控制层的方法,在控制层的delete()方法中调用服务层的delete()方法,删除博客类别的相关信息,持久到数据库中。部分代码如下:

/**

    * 删除博客类别信息

    * @param ids

    * @param response

    * @return

    * @throws Exception

    */

   @RequestMapping("/delete")

   public String delete(@RequestParam(value="ids")String ids,HttpServletResponse response)throws Exception{

       String []idsStr=ids.split(",");

       JSONObject result=new JSONObject();

       for(int i=0;i<idsStr.length;i++){

          if(blogService.getBlogByTypeId(Integer.parseInt(idsStr[i]))>0){

              result.put("exist", "博客类别下有博客,不能删除!");

          }else{

              blogTypeService.delete(Integer.parseInt(idsStr[i]));          

          }

       }

       result.put("success", true);

       ResponseUtil.write(response, result);

       return null;

   }

5.3.4 显示博客类别

图4-8显示博客类型时序图

步骤

系统行为描述

1

博主在后台系统打开博客类别信息管理页面就会调用查询方法

2

调用blogType控制层controller的list方法

3

控制层list方法中调用service层的list方法

4

调用blogTypeMapper持久层查询所有的博客类别信息

5

返回查询到的博客类别信息

在打开博客类别管理页面时,调用控制层的list方法,传入参数:当前页数和每页数量,调用控制层的方法,在控制层的list()方法中调用服务层的list()方法,从数据库中查询到博客类别信息,然后将博客类别的相关数据渲染页面上。部分代码如下:

@RequestMapping("/list")

   public String list(@RequestParam(value="page",required=false)String page,@RequestParam(value="rows",required=false)String rows,HttpServletResponse response)throws Exception{

       PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));

       Map<String,Object> map=new HashMap<String,Object>();

       map.put("start", pageBean.getStart());

       map.put("size", pageBean.getPageSize());

       List<BlogType> blogTypeList=blogTypeService.list(map);

       Long total=blogTypeService.getTotal(map);

       JSONObject result=new JSONObject();

       JSONArray jsonArray=JSONArray.fromObject(blogTypeList);

       result.put("rows", jsonArray);

       result.put("total", total);

       ResponseUtil.write(response, result);

       return null;

   }

5.4 评论管理模块

5.4.1 审核评论

图4-9审核评论时序图

博主在后台页面打开评论管理页面,选择需要审核的评论,点击审核通过按钮,调用controller层的review方法,controller层调用service层的update方法,将评论的状态字段改为对应的代表通过审核的1,如果点击不通过那就是2.然后调用dao层的update方法持久化到数据库中,相关的代码如下:

/**

    * 评论审核

    * @param comment

    * @param response

    * @return

    * @throws Exception

    */

   @RequestMapping("/review")

   public String review(@RequestParam(value="ids")String ids,@RequestParam(value="state")Integer state,HttpServletResponse response)throws Exception{

       String []idsStr=ids.split(",");

       for(int i=0;i<idsStr.length;i++){

          Comment comment=new Comment();

          comment.setState(state);

          comment.setId(Integer.parseInt(idsStr[i]));

          commentService.update(comment);

       }

       JSONObject result=new JSONObject();

       result.put("success", true);

       ResponseUtil.write(response, result);

       return null;

   }

5.4.2 删除评论

图4-10删除评论时序图

博主在后台打开评论管理页面,选择需要删除的评论,点击删除按钮。调用controller层的delete方法,在其中的方法中调用业务逻辑层的实现方法,然后调用dao层的方法,最后持久化到数据库中,相关的代码如下:

/**

    * 删除评论信息

    * @param ids

    * @param response

    * @return

    * @throws Exception

    */

   @RequestMapping("/delete")

   public String delete(@RequestParam(value="ids")String ids,HttpServletResponse response)throws Exception{

       String []idsStr=ids.split(",");

       for(int i=0;i<idsStr.length;i++){

          commentService.delete(Integer.parseInt(idsStr[i]));

       }

       JSONObject result=new JSONObject();

       result.put("success", true);

       ResponseUtil.write(response, result);

       return null;

   }

第六章  系统测试

6.1 前台模块测试

浏览器的网址输入框中输入正确的地址既可以看到系统前台页面:

图5-1前台展示页面

6.2 后台模块测试

在前台首页可以点击登录后台按钮可以登录到后台管理页面,在后台管理页面可以进行博客管理,博客类别管理,评论审核和个人信息管理还有系统管理。但是首先要获取用户名和密码,拥有博主权限才可以进入到后台管理页面,首先输入用户名:admin,然后输入密码: 123。结果有两种,一种是密码正确成功登录,另外一种是不成功,登录失败,若是失败,则会在页面上打出红色字体:用户名或密码错误。

       如下图所示:

 

图5-2后台登录页面

登录成功后,可以进入到后台管理页面,在这个页面,博主可以管理博客,可以新增博客,可以删除修改博客,也可以管理评论等等。

图5-2后台管理页面

测试写博客:

    

图5-3写博客页面

点击发布博客按钮,发布成功。

第七章 总结

经过了几个月的辛苦,个人博客系统基本完成。从最开始的束手无策,经过了老师和同学们的帮助下慢慢进入状态。历经了很多辛苦和难点,都一一针对性的去解决,一步一步脚踏实地慢慢对待,现在完成了毕业设计,我在这个过程中学习到了很多,发现了自己在技术上的不足和缺点。我在毕业设计中留下许多美好的回忆和感动。

首先,在选题上我的导师给予很大的帮助。还有在遇到难点的时候我的同学给予了我很多帮助。而在完成了毕业设计后,我还感觉到了许多的不足之处。例如我的博客系统还可以添加许多功能,可以添加多用户之类的。所以在接下来的日子里,我需要更加努力的学习。

 

参考文献

[1]李洋. SSM框架在Web应用开发中的设计与实现[J]. 计算机技术与发展,2016,(12):190-194.

[2]蒋启明,彭小宁,张文. “轻量级Java EE”课程的Spring框架教学改革探讨[J]. 科教文汇(中旬刊),2016,(11):57-58.

[3]马杰川. 基于JSP的企业Blog系统的设计与实现[D].电子科技大学,2013.

[4]韦耿,钟亮. 基于JSP的个人博客系统[J]. 电脑知识与技术,2013,(21):4865-4869+4876.

[5]杨嘉群. 基于JSP的博客系统[J]. 电子制作,2013,(09):68-69+32.

[6]祁新安,李凯. 基于JSP的多媒体博客系统的研究[J]. 电脑开发与应用,2013,(04):33-35.

[7]尚云龙. 关于网络博客系统的设计与实现[D].电子科技大学,2013.

[8]邬心云. 日志式个人博客的自我呈现心理研究[D].华中科技大学,2012.

[9]何发胜. 基于SSH模式架构的博客系统的设计与实现[D].湖南大学,2012.

[10]崔程,张钦. 一种基于JSP技术的博客系统设计[J]. 安阳师范学院学报,2011,(05):93-95.

[11]郭向阳,李红娟. 基于JSP技术的都市博客系统的设计与实现[J]. 软件导刊,2010,(10):151-152.

致  谢

大学生活一晃而过,回首走过的岁月,心中倍感充实,当我写完这篇毕业论文的时候,有一种如释重负的感觉,感慨良多。首先诚挚的感谢我的论文指导老师XX老师。在忙碌的教学工作中挤出时间来审查、修改我的论文。还有教过我的所有老师们,你们严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;他们循循善诱的教导和不拘一格的思路给予我无尽的启迪。感谢三年中陪伴在我身边的同学、朋友,感谢他们为我提出的有益的建议和意见,有了他们的支持、鼓励和帮助,我才能充实的度过了三年的学习生活。

 

个人博客系统设计与开发

摘  要:随着互联网的发展,博客在自由和共享的精神的影响下应运而生。博客的出现让我们有更多机会在日常生活中向他人展示自己的观点和信息。任何人都可以创建、发布和更新自己的个人网页。博客就是开放的私人空间,在互联网中,可以将个人生活琐事、思想感言、工作过程等及时的记录和发表,发挥个人的表达能力;还可以使用博客进行交友,进行深度交流。

关键词个人博客系统;B/S;JSP

Abstract: With the development of Internet, blog comes into being under the influence of the spirit of freedom and sharing. The advent of blogs gives us more opportunities to present our views and information to others in our daily lives. Anyone can create, publish and update their own personal web pages. The blog is open to the private space in the Internet, can record personal chores, ideological reflections and working procedure of timely publication, and develop the ability to express personal; you can also use the blog to make friends, communicate deeply

Keyword: Personal blog system;B/S;JSP

0.前言

 

个人博客是人们在网络上展现自己个性的一种方式。随着网络在人们的生活中扮演着越来越重要的角色,大家都喜欢通过网络来获取各种各样的信息。而在网络上,你也可以畅所欲言,而个人博客也是其中一种。在个人博客上,你可以发表自己的心路旅程,发表自己的工作经验,发表技术博客等等。

首先介绍一下什么是博客,博客是一个音译词,它的英文名字为Blogger ,它也被称为网络日志。通常人们对于它的定义就是一种通常有个人管理、不定期发布文章的网站。

博客是一个网页,它是由各种各样的帖子组成。这些帖子可以是你某一天观看电影的感慨,也可以是阅读到某篇书籍的读后感,更可以是你在自己技术领域的心得。它就是一个网页,但是大家可以在上面用文字或者图片分享自己的心情等,它提供的内容可以用来进行交流。主要用途是个人自由表达和知识过滤和积累。

1、可行性分析

此个人博客系统采用的后台技术是使用Spring4+Springmvc+Mybatis3架构,采用mysql数据库,使用maven3管理项目,使用Shiro作为项目管理框架。前台网页使用主流的Bootstrap3 UI 框架;数据库连接池使用的是阿里巴巴的Druid;在线编辑器使用了百度的UEditor,支持单图和多图上传,支持截图长传,支持代码高亮等特性。这些技术都是经过市场检验的,都已经十分成熟了,在安全性、可用性、可靠性等方面都是可以值得肯定的

二、系统设计

根据需求分析,系统设计应该包含登录模块,博客管理模块,博客类别管理模块,评论管理模块,个人信息管理模块,系统模块。

三、系统功能实现

1)登陆界面

在登录按钮添加监听事件,在博主输入账号密码点击登录后,终端首先执行login()方法,此方法是根据用户在前台界面输入的用户名、密码来到数据查找是否有匹配的数据,若有则返回所匹配的对象,若没有则返回空,接下来则是校验验证码是否正确,若不正确则前台提示错误信息,若正确则继续判断从数据库查找后返回的对象是否为空,若为空则前台提示错误信息,若不为空则登录成功,界面跳转到主页。

 图1 后台登录界面

2)管理员主界面

管理员界面,是将管理员的一些操作展现在主界面上,进行不同的页面跳转,进行业务转换,通过JDBC进行后台数据的操作,

  • 总结

历时几个多月的紧张学习和工作,我的毕业设计终于如期、顺利的完成了。

经过本次的毕业设计,使我学习到了有关JSP的知识和MySQL数据库的知识,使我了解脚本语言对JSP的重要,及应用JSP的JDBC驱动程序调用数据库。在这次设计过程中,培养了我的自学能力,在遇到技术困难的时候,能够认真的对待,永不放弃,无论是查看各种书籍还是到图书馆中查找各种资料,想尽一切办法将这个问题解决。我总结了很多的JSP编程经验,这将在以后的学习生活中有很大的帮助。

我设计的个人博客系统,虽然界面有点粗糙,但技术含量还算高,例如:可以实现各种信息的管理和查询浏览,当然,由于时间短,加上自己是初学,所以本系统还存在不足,这些都需要在以后的学习过程中加以改进。

 

参考文献

[1]李洋. SSM框架在Web应用开发中的设计与实现[J]. 计算机技术与发展,2016,(12):190-194.

[2]蒋启明,彭小宁,张文. “轻量级Java EE”课程的Spring框架教学改革探讨[J]. 科教文汇(中旬刊),2016,(11):57-58.

[3]马杰川. 基于JSP的企业Blog系统的设计与实现[D].电子科技大学,2013.

[4]韦耿,钟亮. 基于JSP的个人博客系统[J]. 电脑知识与技术,2013,(21):4865-4869+4876.

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PageAdmin个人博客系统,适合用于个人网站制作,个人博客的制作,采用响应式设计,在PC、iPad和手机上访问都有很好的浏览体验,功能强大,扩展灵活,支持后台和会员中心发布文章。主要功能:1、多语言、多站点:后台可以任意增加分站,每个分站可以任意设置语种,分站之间的信息可以灵活调用,可以灵活设置管理员单独管理分站。2、方便灵活的栏目管理:后台可以对栏目进行任意增加,修改和删除,并可以无限级增加子栏目。3、强大的信息发布功能:支持信息的发布,删除,修改,复制,转移,可自由设置置顶,最新,热门,审核等属性,管理员可以在后台发布信息,同时支持匿名投稿及会员中心投稿,会员可以在会员中心管理自己发布的信息。4、自定义表单 自定义字段 自定义模型:通过后台可以任意增加表单,如系统自带的文章,图片,下载,留言,招聘等板块都通过此功能来实现;字段可以任意 增加和修改,支持常用文本字段,下拉字段,图片及图片组字段,附件及附件组字段;用户可以通过此功能实现任何个性化的功能及展示需求。5、完善的SEO优化功能,后台可以生成静态,每个静态文件名,目录都可以自由设置,任意页面可以自定义标题,关键词,描述。6、工作流:可以自定义信息发布的流程,比如前台投稿,需要A用户审核后转给b用户审核,在转给c用户审核。7、计划任务功能:如果需要某个功能在特定时间定期执行就可以利用此功能,可以支持循环支持,可以按月,按天,按小时来设置执行时间。8、信息签收功能:比如我们发布一篇文章,需要特定用户或特定用户组签收就可以用此功能,支持单用户,用户组或按部门来签收。9、信息签发功能:信息审核员可以在后台或会员中心对信息进行签发和审核,支持按工作流来签发,签发后方通过审核、并显示在网站上。10、在线支付功能:支持支付宝,财务通,网银在线等接口,马上支付,即时入账。11、在线订购功能:用户可以对产品进行在线下单,支持订单删除,修改及支付等商务性功能。12、信息发送:支持站内信息,邮件,手机短信三种发送方式,可以进行单用户发送,会员组和指定用户群发。13、采集功能:采用ajax方式进行采集,可以远程图片保存到本地,可以过滤特定字符,特定url等。14、....只要足够熟练,您想到的,PageAdmin就能做到......
作为一种开源的JavaWeb开发框架,Spring Boot可以快速地构建出高效的web应用程序,因此非常适合作为一个个人博客系统实现框架。该系统的主要功能包括博客发布、博客浏览、评论和点赞等。 在设计实现系统时,首先需要考虑的是博客的存储。我们可以采用MySQL数据库存储博客的相关信息,如博客的编号、标题、内容、创建时间等等。可以考虑使用MyBatis来进行数据库操作,它能够很好地与Spring Boot进行整合。 其次,需要设计实现博客的发布和查看功能。用户可以通过输入博客的标题和内容来发布一篇新博客,博客页面可以按热度、时间、分类等方式进行排序和展示。可以使用Thymeleaf模板引擎来实现页面的渲染,同时可以通过使用Spring Security来实现登录验证和权限管理功能。 评论和点赞功能也是个人博客系统中不可或缺的一部分。对于评论功能,用户可以在博客页面下面进行评论,并且可以对评论进行回复,也可以对博客进行点赞。可以采用Spring Data JPA技术来实现评论和点赞功能,这可以大大简化代码实现过程,同时也可以提高开发效率。此外,还可以考虑使用ElasticSearch搜索引擎来实现博客的搜索和阅读记录等功能。 最后,需要考虑系统的部署和维护。可以使用Docker容器化技术来快速部署和管理应用程序,同时可以使用Spring Boot Actuator来进行系统监控和管理,以及快速地发现和解决系统问题。 总之,基于Spring Boot的个人博客系统设计实现,需要综合运用多种技术和工具,从博客的存储、发布、浏览、评论、点赞到部署和维护等多个方面进行设计实现,以达到相应的业务需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值