基于ssm的个人博客系统的设计与实现(含源文件)

欢迎添加微信互相交流学习哦!

二维码

项目源码:https://gitee.com/oklongmm/biye

进入二十一世纪,以Internet为核心的现代网络积水和通信技术已经得到了飞速的发展和广泛的应用,各种网络交流互动工具也应运而生。其中以论坛、博客、社区、空间最为受广大网民朋友的欢迎,也是目前为止发展的比较成熟的信息交流工具。在网络技术逐渐渗入社会生活各个层面的今天,传统的交流方式也面临着变革,而网络博客则是一个很重要的方向。基于Web技术的网络考试系统可以借助于遍布全球的Internet进行,因此交流既可以是本地进行,也可以是异地进行,大大拓展了沟通与交流的灵活性。博客在现如今这个飞速发展的网络时代已经成为人们不可或缺的一部分
博客,又译为网络日志、部落格或部落阁等,是一种通常由个人管理、不定期张贴新的文章的网站。博客它经常是由简短且经常更新的帖子构成,它可以发表有关个人构思,日记,或者诗歌,散文,小说等等。博客可以是你纯粹个人的想法和心得,包括你对时事新闻、国家大事的个人看法,或者你对一日三餐、服饰打扮的精心料理等,也可以是在基于某一主题的情况下或是在某一共同领域内由一群人集体创作的内容。写博客是为了把自己各种各样的想法在网上表达、释放出来,把一时的想法变成观点展示给大家。而浏览博客的用户,也可以对发表观点和看法的文章进行评论,博客就是这样一个平台。  博客最初的名称是Weblog,由web和log两个单词组成,按字面意思就为网络日记,后来喜欢新名词的人把这个词的发音故意改了一下,读成we blog,由此,blog这个词被创造出来。中文意思即网志或网络日志,不过,在中国大陆有人往往也将 Blog本身和 blogger(即博客作者)均音译为“博客”。“博客”有较深的涵义:“博”为“广博”;“客”不单是“blogger”更有“好客”之意。看Blog的人都是“客”。而在台湾,则分别音译成“部落格”(或“部落阁”)及“部落客”,认为Blog本身有社群群组的意含在内,借由Blog可以将网络上网友集结成一个大博客,成为另一个具有影响力的自由媒体
应用环境:
该系统的实现要求使用B/S架构,使用JSP进行实现,后台数据库的实现使用MySQL。

工作目的:
是通过该系统的设计及毕业论文的撰写,使同学掌握软件设计的一般过程,学会系统分析的基本方法,加强对以往学习知识的印象,掌握设计文档编制的基本要素和方法。


主要内容和要求:(包括设计(研究)内容、主要指标与技术参数,并根据课题性质对学生提出具体要求):
本系统为用户提供实现了以下功能:
1.登录功能:
系统为单用户系统,为用户分配了用户名和密码。用户必须先登录,进入操作界面。用户输入ID和密码,通过服务器验证方可运行,否则显示消息提示。 
2.网站前台功能:
浏览:博主个人信息、文章; 
发表:留言,评论 
3.网站后台功能:  
用户管理模块:实现用户信息及密码的修改  
博文的分类与管理模块:实现分类的增、删、改 
评论管理模块:实现删除评论功能 
留言管理模块:实现删除、回复评论功能 
系统管理模块:实现博客版面的定义与管理 博客的数据统计
主要技术指标与技术参数:
系统的研究使用B/S的体系结构,设计与开发使用JSP开发工具,数据库的实现用MySQL,Web服务器为Tomcat。研究过程采用传统的瀑布模型,以项目的阶段评审和文档控制为方法有效地对整个开发过程进行指导。
日程安排:


主要参考文献和书目:
[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.

指导教师(签字):        
 年     月     日

注:本表可自主延伸,各专业根据需要调整。
 

本 科 毕 业 设 计(论文)开 题 报 告


题  目:个人博客系统
专题题目(若无专题则不填):
本课题来源及研究现状:  
关于博客的未来:在创办了博客中国(blogchina)、被誉为“博客教父”的方兴东接受了记者的专访。他认为,博客这一事物在中国的发展大致经过以下三个阶段:第一阶段是2002年至2003年,少数人写博;第二阶段是2003年至2005年,博客爱好者写博;第三阶段是2005年至2006年以及接下来的两年,博客进入大众化前期。“如果说第一阶段和第二阶段博客的发展还是理想主义和浪漫主义的话,那从第三阶段开始,博客已经向现实主义转变。再过两年,即将进入大众化晚期,也就是说,那些网络保守主义者也将加入到博客大军中来”。  在我国,已经有十几万个博客网站,博客数量达到100多万个,并且呈现40%的年增长进度,着实让国人刮目相看。因此,博客经济引起了专家学者和行业官员的普遍关 注。博客现象,能给中国带来什么?网络博客,能成为每个网民的网络生活方式吗?从互联网的兴起到现在,网民由上网浏览网络文章和查找资料以及上论坛发帖子,发展到建网站、建个人网站论坛主页,再发展成现在的建博客,一路走来,网民在网络一直打拼着建造着一个属于自己的地盘,不知从何时起,建博客、写博客成为了众多网民网络生活的重要组成部分,与网络聊天成了并驾齐驱的热点,共同成为网民上网最关心的事情。
博客在中国的发展始于1998年,但直到2000年,它开始流行。2000年,博客开始进入中国和快速发展。直到2004年“木子美”事件,中国人民了解了博客和使用它。2005年,国内门户网站,如新浪、搜狐、原始的博客业务并不乐观,但也加入博客阵营,开始进入春秋时期。首先,博客记录日常访问网站的观点和意见,并开放给别人参考和遵循。但随着博客的迅速扩张,已经远离最初的目的。有许多差异成千上万的博客在互联网上发布和张贴在博客。然而,由于通信比电子邮件、讨论组更加简单和容易,博客已经成为家庭、公司、部门和团队越来越流行的通信工具,因为它已逐渐被应用在企业内部网络。


课题研究目标、内容、方法和手段:
本系统为用户提供实现了以下功能:
1.登录功能:
系统为单用户系统,为用户分配了用户名和密码。用户必须先登录,进入操作界面。用户输入ID和密码,通过服务器验证方可运行,否则显示消息提示。 
2.网站前台功能:
浏览:博主个人信息、文章; 
发表:留言,评论 
3.网站后台功能:  
用户管理模块:实现用户信息及密码的修改  
博文的分类与管理模块:实现分类的增、删、改 
评论管理模块:实现删除评论功能 
留言管理模块:实现删除、回复评论功能 
系统管理模块:实现博客版面的定义与管理 博客的数据统计

本项目是采用了springmvc,spring,mybatis框架进行设计与实现的。项目采用了jdk1.8的版本,web服务器采用tomcat 8,数据库服务器采用了mysql,前台页面的显示使用了JavaScript,CSS,jquery等技术进行编写。使用java面向对象的思想对类和接口进行设计,使网站具有可扩展性,便于维护等优点。


设计(论文)提纲及进度安排:

主要参考文献和书目:
[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.

指导教师审核意见:


指导教师(签字):       

  年     月     日

注:本表可自主延伸
 
摘  要

随着互联网的发展,博客在自由和共享的精神的影响下应运而生。博客的出现让我们有更多机会在日常生活中向他人展示自己的观点和信息。博客就是开放的私人空间。在互联网中,你可以尽情的发表自己的思想和言论。可以在网络上结交各式各样的人。
互联网在大家的方方面面都提供了极大的帮助。所以很明显的趋势就是网站的出现。个人博客系统为树立个人在网络上的形象提供了一个良好的平台。
JAVA作为目前最盛行的技术之一,J2EE(JAVA企业版本)十分适合于Web应用程序的设计和实现。此外,目前基于J2EE的开源框架在市场上久经考验,java社区也是十分活跃。本文的目的就是利用J2EE技术设计和实现个人博客系统。

关键词:个人博客系统;B/S结构;SpringMVC;Spring ;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 System;B / S structure;SpringMVC;Spring ;MyBati 
目  录

第一章    绪论    1
第二章  相关技术介绍    2
2.1 B/S 简介    2
2.2 JAVA 简介    2
2.3 JSP 简介    3
2.4 springMVC简介    3
第三章  可行性分析    4
3.1 技术可行性分析    4
3.2 经济可行性分析    4
3.3 操作可行性    4
3.4 法律可行性    4
第四章  系统设计    5
4.1 系统总流程    5
4.2 博主用例    6
4.3 游客用例    7
4.4 系统类    9
4.5 E-R图    11
4.6 系统表设计    14
第五章  系统实现    16
5.1 登录模块    16
5.1.1 博主登录    16
5.2 博客管理模块:    19
5.2.1 博客查询    19
5.2.2 博客新建    21
5.2.3 博客修改    23
5.2.4 博客删除    25
5.3 博客类别管理模块    26
5.3.1 添加博客类别    26
5.3.2 修改博客类别    28
5.3.3 删除博客类别    30
5.3.4 显示博客类别    32
5.4 评论管理模块    34
5.4.1 审核评论    34
5.4.2 删除评论    36
第六章  系统测试    38
6.1 前台模块测试    38
6.2 后台模块测试    38
参考文献    41
致  谢    42

 
第一章    绪论

个人博客是人们在网络上展现自己个性的一种方式。自从互联网走进千家万户,大受人们喜爱。大家都喜欢通过网络来获取各种各样的信息。而在网络上,你也可以畅所欲言,而个人博客也是其中一种。在个人博客上,你可以发表自己的心路旅程,发表自己的工作经验,发表技术博客等等。
首先介绍一下什么是博客,它也被称为网络日志。博客其实就是一个网页,它是由各种各样的帖子组成。这些帖子可以是你某一天观看电影的感慨,也可以是阅读到某篇书籍的读后感,更可以是你在自己技术领域的心得。它就是一个网页,但是大家可以在上面用文字或者图片分享自己的心情等,它提供的内容可以用来进行交流。
博客最开始的时候是论坛下的一个子系统。最早参与博客的都是一些信息技术的一些专家和学者,讨论的都是专业技能。直到发现了博客的商业价值,一些开放了自发式的博客,大家也都发现了博客分享和讨论的趣味。越来越多的人参与进来,博客也越来越风靡盛行。
博客与论坛有许多的相似之处,许多朋友都分不清他们两的区别。首先,论坛和博客都可以进行交友和交流等。而其中论坛注重的是集体讨论,博客注重的是个人分享。它们两者的核心点就有着很大的区别。论坛的创建的用户是基于为众人服务,而博客是为了博主服务。它们的不同点还有在形式上的不同。博客是独立存在的。而论坛并不是。总结起来,论坛是多人一起交流的地方,互动性强,社交性强。博客是发表个人文章的地方,虽然也可以交流,但更多的还是自娱自乐。

第二章  相关技术介绍
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进行安全管理,对前台输入的密码进行加密运算,然后与数据库中的进行比较。成功后才能登入后台系统。
2.博客管理功能
博客管理功能分为写博客和博客信息管理。写博客是博主用来发表编写博客的,需要博客标题,然后选择博客类型,最后将博客内容填入百度的富文本编辑器中,点击发布博客按钮即可发布博客。
3.博客类别管理系统
博主类别管理系统可以添加,修改和删除博客类型名称和排序序号。将会显示到首页的按日志类别区域。游客可以从这里查找相关的感兴趣的博客内容。
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图

博客类型类的关系模式如下(加下滑线的是主键):
博客类型实体(编号,博客类型名称,数量,排序)。


图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.
 

猜你喜欢

转载自blog.csdn.net/weixin_55459367/article/details/114149091