技 能 训 练
课程名称: 项目名称: 姓 名: 专 业: 班 级: 学 号: 指导教师:
技能训练 个人博客 苏坤 计算机科学与技术 计算机11-03班 1104010318 李松
计算机科学与技术学院
2014年 12 月 28 日
1 引言
“博客”(Blog或Weblog)一词源于“Web Log(网络日志)”的缩写,是一种十分简易的傻瓜化个人信息发布方式。任何人都可以像使用免费电子邮件一样,完成个人网页的创建、发布和更新。博客就是开放的私人空间,可以充分利用超文本链接、网络互动、动态更新等特点,在网络中,精选并链接全球互联网中最有价值的信息、知识与资源;也可以将个人工作过程、生活故事、思想历程、闪现的灵感等及时记录和发布,发挥个人无限的表达力;更可以以文会友,结识和汇聚朋友,进行深度交流沟通[1]。
“博客”当然是个大家都陌生的名词,博客的英文名词就是“Blog或Weblog”(指人时对应于Blogger),是一个典型的网络新事物,查阅最新的英文词典也不可能查到。该词来源于“Web Log(网络日志)”的缩写,特指一种特别的网络个人出版形式,内容按照时间顺序排列,并且不断更新。
博客是一种零编辑、零技术、零成本、零形式的网上个人出版方式。 博客概念一般包含了三个要素(当然,也不需要局限这些定义): a)网页主体内容由不断更新的、个性化的众多日志组成。
b)按时间顺序排列,而且是倒序方式,也就是最新的放在最上面,最旧的
放在最下面。
c)内容可以是各种主题、各种外观布局和各种写作风格,但是文章内容以
“超链接”作为重要的表达方式。
因此,博客是个人性和公共性的结合体,其精髓不是主要表达个人思想,不是主要记录个人日常经历;而是以个人的视角,以整个互联网为视野,精选和记录自己在互联网上看到的精彩内容,为他人提供帮助,使其具有更高的共享价值。
博客精神的核心并不是自娱自乐,甚至不是个人表达自由,相反,是体现一
种利他的共享精神,为他人提供帮助。个人日记和个人网站主要表现的还是“小我”,而博客表现的是“大我”。也许形式上很接近,但内在有着本质的差异。所有优秀博客网站中,真正表达作者个人的内容非常有限,最多只是点缀,而不像个人网站那样是核心。
1.1 系统开发的背景
博客的精神是:自由表达,开放宽容,个性张扬,专业精神。
在没有自己的博客之前,人们会经常进出于论坛发表贴子或者通过即时通信软件聊天,来表达自已的想法,可是这些都是零散的和杂乱的。博客的出现,让人们可以不断的把自己以前的和每天激发的一些想法或者感受整理放在自己的博客上,每次在写文章的时候,可能又会产生新的想法。虽然一些想法一些思考只是皮毛,没有什么深度,但是当下笔去写的时候每次都会对某个小小的问题有了更多的一点点思考,再写博客的时候就感觉到了一种满足感,一种想法得以释放思考得以延伸的满足感。生活中每天的一个小小的事情都会引起人们的思考,甚至是和朋友的聊天中一个小小的火花迸发。督促自己努力、把一时的想法变成观点,争取在生命中的每天里留下点什么,这也是人们写博客的目的之一。这样就能督促自己每一天不要浑浑噩噩,时光流逝无痕无声无息,写博客也是在自己的每一天上留下了一道浅浅的思考和划痕。
不仅如此,通过写博客、记录自己的想法可以帮助实现如下这些目的: a)记录生活,在自己的每一天上留下思考的划痕。 b)整理思路,固化知识,获得更多更好的想法。 c)分享,将自己的想法、经验与人分享。
d)交流、提高,通过交流产生更多的思维火花,相互提高。 e)交友,互相鼓励,一路同行。
如果说博客网站是一个舞台,那么所有的博客都是其中的舞者,把自己有价值的真实的一面展示在网络世界中,相互交流沟通; 如果博客仅仅为了写日志,那么博客是一面镜子,镜子中展现的是真实的自己;如果博客是一个自由媒体,可以把自身感觉有价值的信息通过博客这个工具发布,与网友共享[2]。
1.2国内外现状
据不完全统计,到今天,全世界博客总量已超过一亿.其中中国的博客达到
1600万。博客数量大约6个月翻一番,2006年4月份每天新增博客7万5千人。每天发贴120万篇,平均一小时5万贴。博客的影响力,早已超出了他作为个人,甚至作为自己所在行业的原有范围。开始引起主流媒体的强烈关注。自2006年以后,博客迎来了它的飞速发展时期,作为专业领域的知识传播模式,博客成为了该领域最具影响力的方式之一,博客的影响力也将超越传统媒体。它将成为一种全新的信息组织和传播方式,发挥更大的作用。
1.3博客发展趋势
趋势一:博客现在正在形成个人的信誉机制,有了博客之后就确立了一个个人虚拟身份,简单的来讲就是个人在互联网上是有名有姓的,而不再是一种匿名的行为,网民从流浪汉变成了一个定居者。以前在互联网上的各种行为都是在匿名状态中,相互之间是不认识的,但有了博客之后可以天天关注,而别的人也可以通过博客找到这个人。这样随着时间的积累就会产生一个新的东西,概括叫做“个人的信誉”,个人的信誉就是博客和博客之间发展各种关系的组合,这种信誉对每个人来讲可能是不同的,但对每个博客来讲就产生了新的评价机制,这个机制将是博客商业化的一个前提条件。
趋势二:博客越来越呈现出富媒体化,早期的博客是以文字为主,但随着多媒体发展博客相册、博客图片已经成为博客的基本配置,而现在许多博客网站已经提供了博客音频和博客视频。
趋势三:博客现在正在形成并完善精选机制,博客作为自媒体和个人媒体,产生的信息非常巨大。其中难免产生信息垃圾,随着博客的发展,博客通过精选机制精选出大家喜闻乐见的信息,像国内网摘、博客的评价系统等。
1.4课题研究的意义
随着Blog人数的增加,Blog作为一种新的生活方式、新的工作方式和新的学习方式已经被越来越多的人所接受,并且在改变传统的网络和社会结构。它使交流和沟通更有明确的选择和方向性;单一的思想和群体的智慧结合变得更加有效;个人出版变成人人都可以实现的梦想。Blog正在影响和改变着我们的生活。
本系统采用MVC模式设计实现了一个简单的博客系统。MVC模式极大地提高了系统的灵活性、复用性、开发效率、适应性和可维护性,充分发挥了JSP、Servlet等J2EE组件的特点[3]。从而,使更多的人们通过文字、图片、声音、视
频、无线等,尽情展示自我、分享感受、参与交流,美好你我生活。Show you, share me,人人都可以博客,人人都需要博客。
1.5 系统设计目标分析
本系统是用JSP实现的一个完全基于浏览器的博客系统,任何注册个人博客的人都拥有以下功能:
a)登录博客系统的后台管理平台。 b)更改博客账号的基本信息。 c)撰写日志。 d)日志管理。 e)评论管理。 f)留言管理。
博客访问者具有以下功能:
a)浏览博客系统中的日志、留言、评论。 b)发表评论及留言。 c)检索日志。
2 基本技术方案
2.1 JSP中的各种技术
2.1.1 JSP概述
JSP即Java Server Pages,是由Sun Microsystem公司于1996年6月推出的新技术,是基于Java Servlet以及整个Java体系的Web开发技术[4]。JSP已经成为开发Web动态网页重要、快速和有效的工具,是全新的网络服务器编程环境。JSP充分利用了Java的强大功能,是一种优秀的服务器端技术。随着Java技术的日益成熟和流行,JSP在网络编程中也变得越来越重要。JSP基于强大的Java语言,具有极强的扩展能力,良好的缩收性,以及与平台无关的开发特性,成为构建动态网站的主流技术之一,JSP有着其他技术所不具备的优势[3]。其优势在于:可以将内容的生成和显示进行分离、生成可重用的组件、采用标识简化页面开发。JSP能提供所有Servlet的功能[5] 2.1.2 Servlet概述
Servlet是Java编写的服务器端程序,是由服务器端执行和调用的Java类。Servlet是采用Java技术来实现CGI功能的一种技术,能够像CGI一样动态地
扩展Web服务器的功能,并采用请求——响应模式提供Web服务。Servlet和CGI一样都是运行在Web服务器上,用来生成Web页面。Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容。其工作流程图如图2.1所示。
Servlet工作流程:
a)客户端发送请求信息至服务器。 b)服务器将请求信息发送至Servlet。
c)Servlet生成响应内容并将其传给Servlet。响应内容动态生成,通常取
决于客户端的请求。
Web ServerHTTP Servlet requestWeb ClientHTTP Servlet responseWeb ComponentDateBase 图2.1 Servlet工作流程图
d)服务器将响应信息返回至客户端 2.1.3 JavaBean概述
JavaBean是Sun公司为了进入因特网、企业网以及万维网上进行分布式计算的组件结构入口。按照Sun公司的定义,JavaBean是一个可重复使用的软件部件。JavaBean体系结构是第一个全面地基于组件的标准模型之一,该组件是Java类,这些类遵循一个接口格式,以便于使方法命名、底层行为以及继承或实现的行为能够把类看做标准的JavaBean组件的方式进行构造[7]。
在Java模型中,通过JavaBean可以无限扩充Java程序的功能,通过JavaBean的组合可以快速生成新的应用程序。JavaBean具有以下特点:
a)可以实现代码的重复利用。 b)易维护性、易使用性、易编写性。
c)可以在Java的任何平台上工作,不需要重新编译。 d)可以在内部网或者网络之间进行传输。
e)可以以其它部件的模式进行工作。
JavaBean在JSP程序中常用来封装事务逻辑、数据库操作等,可以很好的实现业务逻辑和前台程序的分离,使得系统具有更好的健壮性和灵活性。
2.2 基于B/S的WEB应用体系结构
2.2.1 传统的两层体系结构
在Web发展的初期,Web应用主要是通过静态页面在Internet上发布信息。用户通过浏览器向服务器发送请求,服务器接收用户端的请求,向客户端浏览器发送所请求的页面。在这种结构下,网站上的页面是静态的,无法根据用户的实际使用情况做动态的变化。网站的信息提供者通过更新服务器上的网页来向用户提供最新的信息。用户和浏览器之间只有有限的交互,而网站和用户之间几乎没有交互。
2.2.2 三层体系结构
三层体系结构图如图2.2所示。
CGI,ASP,PHP等技术的出现,使得开发动态交互式的Web应用得以实现。用户通过浏览器向服务器发送请求,Web服务器接收客户端发送来的请求,对请
请求浏览器响应Web服务器数据库
图2.2 三层体系结构图
求进行分析,如果请求是静态页面,那么就将所请求的页面发送到客户端;如果请求的是动态页面,那么就执行此动态页面,并将执行结果发送给客户端。动态页面中的脚本程序可以和数据库服务器进行交互。
Web服务器可以根据用户的请求动态更新页面上的信息,Web信息提供者可以通过改变数据库中的数据向用户提供最新信息,而不需要逐个更改页面。用户可以通过这些动态页面向数据库中输入信息,从而增强了用户和服务器之间的交互性。
2.2.3 JSP网站开发模式
目前,JSP技术已经成为一种受大多数大型企业或中小型企业喜爱的动态网页开发技术。越来越多的技术人员也逐步成为JSP技术的推崇者。JSP技术正是
利用了Java的“一次开发,处处使用”的性能,成为了网站开发技术人员的首选技术。当然,JSP技术的最大优势在于能够将页面的表现形式和页面的商业逻辑分开。
JSP网站开发技术标准提供了两种开发模式:一种是JSP+JavaBean开发模式;一种是JSP+Servlet+JavaBean开发模式[8,9]。
JSP+JavaBean模型图如图2.3所示。
浏览器JSPJavaBeanDataBase
图2.3 JSP+JavaBean模型图
在这种模型中,JSP页面独自响应请求并将处理结果返回给客户,所有的数据通过JavaBean来处理,JSP实现页面的显示。此模型常常会导致页面被嵌入大量的脚本语言或者Java代码段,当处理大型业务时,页面程序将变得异常复杂给开发和维护带来困难。
JSP+Servlet+JavaBean模型图如图2.4所示。
浏览器ServletJavaBeanJSPDataBase 图2.4 JSP+Servlet+JavaBean模型图
Servlet技术是一种采用Java技术来实现CGI功能的一种技术。Servlet是运行在Web服务器上,用来生成Web页面。Servlet技术非常适于服务器端的处理和编程。
在此种开发模式中,JSP技术用来显示页面,该页面中没有任何的商业处理逻辑,通过Servlet技术来完成大量的事物处理工作。Servlet用来处理事务的请求,充当着一个控制者的角色,并负责向客户发送请求,创建JSP需要的Bean和对象,根据用户的请求行为,决定将哪个JSP页面发送给用户。
从上面两种开发模式来说:第二种模式要好些,更适合于团队开发,速度相对较慢,但是可维护性高[6]。
2.3 Eclipse简介
Eclipse最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。IBM提供了最初的Eclipse代码基础,包括Platform、JDT和PDE。
Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成[10]。
2.4 Tomcat简介
如今,基于Web的应用越来越多,传统的Html已经满足不了如今的需求。因此需要一个交互式的Web,于是便诞生了各种Web语言。如Asp,Jsp,Php等。当然,这些语言与传统的语言有着密切的联系,如Php基于C和C++语言,Jsp基于Java语言。Tomcat即是一个Jsp和Servlet的运行平台。
Tomcat是一个免费的开源的Serlvet容器,是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成[11]。
2.5 SQL Server简介
Microsoft SQL Server 2000是微软所推出的一套在Windows平台上执行的功能强大的关系型数据库管理系统,用以作为应用程序的数据来源,存放各种数据,并可以让用户很容易地达成所要进行的数据存取操作。同时,也提供了一些可视化的管理工具,协助数据库系统管理者更方便快速地管理及设计数据库的内容,以及对数据库进行维护。SQL Server 2000不仅可以实现个人数据库的管理,更适合企业级数据库的应用[12,13]。
2.6 MVC设计模式
MVC模式的基本形式图如图2.5所示。
输入用户显示视图控制器模型 图2.5 MVC模式的基本形式图
MVC(Model-View-Controller)模式并不是J2EE行业人士标新立异的。MVC的核心就是要做到三级甚至多级的松散耦合,MVC模式将系统分为三个部分,分别是数据模型、视图和控制器,并定义了这三个部分之间实现通信的一种模式,使每个部分不必
卷入到其他部分的状态表示和方法实现的细节中去。每个部分有自己的数据管理规则,各个对象之间的通信只能使用自己定义的一个受限连接集合进行。保持这种分离性通常是面向对象编程和设计要追求的目标,让各个对象只需专注于自己的事务。
模型部分代表了商业数据的访问及修改数据的操作。当数据发生改变时,要负责通知视图部分,并且提供视图查询状态的能力。另外,还向控制部分提供应用功能。
视图部分以自己的方式显示模型的内容。访问模型的数据,并且当模型的数据发生变化时更新模型的显示。视图还把从用户那里得到的信息传给控制部分。
控制部分定义了应用的行为。分发用户请求和选择表现视图,还负责解释用户输入,进而调用模型的功能。在Web应用中,用户输入包括对Web级资源的HTTP、GET和POST请求。控制部分根据用户交互和模型的状态选择要显示的视图。一个应用程序一般为相关的功能选择一个控制部分[14,15]。
3 系统分析与总体设计
博客信息系统包括:前台信息显示系统、后台信息管理系统。前者是面向公众的一个窗口,通过前台信息显示系统方便访问者浏览日志、评论和留言;发表评论和留言。后者是后台信息管理系统,方便博客管理员发表日志;回复评论和留言;管理日志、评论、留言及个人信息 [12]。
3.1 系统需求分析 3.1.1 用户需求分析
用例图用来描述系统与参与者之间的相互作用,与用例图相关的几个概念: a)角色:代表了某一事件发生的参与者,用一个小人表示。
b)用例:代表系统可以实现的功能,通常一个用例代表一组功能,实质上
规定了系统实现功能的范围。
c)用例图:当角色和用例发生某种关系时,就可以用一个图将它们关联起
来,这就是用例图。
博客信息管理系统允许用户有三种身份:博客访问者、博客管理员及系统管理员。
博客系统参与者中每种身份操作起来都很方便、快捷。博客访问者无需登陆就可以浏览信息、发表评论或留言;博客管理员注册后再登陆,就可以发布日志、管理个人主页;而博客管理员的基本信息都由系统管理员对其统一管理。
博客信息管理系统用例图如图3.1所示。
用户登录修改账号信息管理博客账号删除博客内容系统管理员浏览博客内容用户管理博客内容博客管理员发表留言发表评论
图3.1 博客信息管理系统用例图
3.2 数据分析
系统的用户主要是博客访问者和博客管理员,下面以博客前台展示系统中的用户查询日志为例进行说明。该过程的数据流程图如图3.2所示。
提交事物存储文件事物处理程序博客展示系统显示结果 图3.2 用户查询日志的数据流程图
用户查询日志的数据流程:首先,用户输入需查找的关键字,然后提交表单数据,服务器接收到关键字后,根据关键字对日志标题进行模糊查询,处理后将结果以日志标题链接的形式显示给该用户,用户点击相应的链接就可以浏览日志内容。
3.3 系统流程
根据博客信息管理系统的特点,将其分为两大模块:前台用户浏览模块和后台用户管理模块。前台用户浏览模块主要用于用户浏览日志信息;后台用户管理模块主要用于博客管理员对个人博客网站的管理,如日志管理、留言管理及评论管理等。
博客系统平台的前台用户浏览模块流程图如图3.3所示。
前台用户浏览模块主要用于用户浏览日志信息,用户浏览日志有三种浏览方式可以选择:一是直接点击日志标题链接进入日志显示页面浏览日志;二是点击博客主题链接进入该个人博客的首页,然后在该首页中选择所需的日志标题链接进入日志显示页面浏览日志;三是通过首页提供的搜索功能,搜索所需要的日志,然后在结果列表中选择所需的日志标题链接进入日志显示页面浏览日志。浏览日志的同时用户可以查看别人对该日志的评论,然后用户也可以对该日志发表自已的评论。
用户进入后台管理平台,首先必需进行权限验证,防止未授权的用户非法登
录。若未通过验证,则显示出错提示,并跳转到登录界面。若通过验证,则进入个人博客后台管理平台。用户可以浏览已发表的日志,并对其进行相应的操作如修改日志和删除日志;可以查看日志的评论信息并对其进行回复或者删除操作;可以发表新的日志;可以新建日志分类;可以浏览个人博客的留言信息并对其进行相应的操作如回复留言
用户进入浏览浏览方式直接选择日志选择博客检索日志在博客中选择日志在检索结果中选择日志将日志数据按照预先的组织形式展现给浏览者评论YN将日志评论保存到数据库结束 图3.3 前台用户浏览模块流程图
用户进入管理权限验证YN管理中心日志管理评论管理留言管理出错提示结束 图3.4 后台用户管理模块流程图
和删除留言;还可以对个人信息进行修改。
博客系统平台的后台用户管理模块流程图如图3.4所示。
3.4 功能模块划分
前台模块功能结构如图3.5所示。
博客信息管理系统前台博客展示日志展示评论展示留言展示用户管理查询管理最新博客热点博客博客列表最新日志精华日志日志列表最新评论发表评论最新留言发表留言用户登陆用户注册日志查询博客查询
图3.5 博客信息系统前台功能结构图
后台模块功能结构如图3.6所示。
博客管理员个人信息管理日志管理评论管理留言管理分类管理登陆修改个人信息3.5功能模块设计
博客信息管理系统分为面向网络用户的前台及面向个人博客维护管理的后台,依据博客网站中所要实现的基本功能的设定,将所有功能分解为如下四个主要的功能模块来加以实现。用户以合法的用户名及密码登录,系统即可按该登录用户的权限分配操作模块。 3.5.1博客注册登录管理模块
博客注册登录管理模块用于建立博客网站固定的客户群体,通过记录对应的博客档案,实现对博客信息的后台维护及管理,同时也便于通过博客档案库将网站最新动态及相关企业的信息方便地传达给每一位潜在的客户。
该功能模块实现了以下几个子功能。 a)新博客在线注册。 b)博客登录管理。 c)跳转到博客主页。
只有进行登录并通过身份验证的用户,才可以在个人博客页面发表日志,并借助个人设置实现对个人博客相关信息的管理维护。对于没有经过身份验证的网络用户不允许在博客页面中发表日志,更不允许对博客页面信息进行管理维护。
该模块实现新博客的注册及登录验证功能。其中,注册新博客时会对用户输入的注册信息进行有效性验证,包括基本数据格式的有效性以及逻辑有效性,例如,用户名被占用时将及时给出提示。注册成功的博客登录时,会随时根据博客
注册撰写日志修改日志删除日志回复评论删除评论回复留言删除留言添加分类修改分类删除分类 图3.6 博客信息系统后台功能结构图
输入的登录信息进行提示,如用户名错误或者密码错误。 3.5.2博客及文章检索查询模块
博客及文章检索查询模块为网络用户提供便捷的搜索,以及日志阅读浏览等功能,同时对日志的评论信息、博客推荐也能够及时反馈给网络用户。
该功能模块实现了以下几个子功能。 a)热门博客页面推荐。 b)最新博客日志推荐。 c)日志信息关键字搜索。
该模块能够在网页中随时提供在线的最新日志信息。该信息需要定期更新,网络用户可以随时获得最新日志以及最热门的博客推荐。在客户选择了某个博客或者某个感兴趣的日志后,可以方便地跳转到对应博客页面进行日志的阅读,并和博客进行交流互动。
为了使网络用户尽快定位到所需的博客资料及日志信息,本模块提供了搜索功能,用户可以对所关注的日志信息按照标题进行关键字搜索,以避免用户浏览多个页面来寻找所需的日志信息。 3.5.3博客页面显示模块
当网络用户进入某个人博客主页后,在该页面中将提供博客日志列表的显示,同时为了方便用户浏览,在该模块中提供根据分类名进行日志列表的显示,也提供日志评论的浏览,此外还允许用户在博客页面中发表评论及留言。
该功能模块实现了如下几个子功能。
a)用户可以分页查看对应的日志内容及评论信息。 b)用户可以针对日志内容发表评论。 c)用户可以针对博客进行留言。 d)用户可以分类查看日志内容。
在该模块中还提供了博客页面统计信息,日志、评论及留言信息分页显示等方便用户的显示效果。 3.5.4博客个人管理维护模块
博客个人维护管理模块用于实现用户对博客个人主页及相关信息的动态管理。
该功能模块实现了如下几个子功能: a)日志及日志分类管理。 b)评论及留言管理。 c)个人基本信息维护管理。
借助该模块,用户可以随时对个人博客主页中的内容进行增加或修改,包括日志分类信息的更新、评论及留言管理等功能,也允许用户对博客的个人信息进行维护及其管理。
4 系统分析设计
4.1数据库分析
数据库是当前应用软件系统的重要组成部分,如何使基于数据库的应用系统安全、可靠、高效的运行一直是软件开发技术研究的难题。所以本系统的数据库设计基于以下几点来考虑:
a)数据库规范化与非规范化的考虑。 b)数据查询优化与索引的建立。 c)存储过程与视图。 4.1.1数据库设计E-R图
为了把用户的数据要求清晰明确地表达出来,通常要建立一个概念性的数据模型。概念性数据模型是一种面向问题的数据模型,是按照用户的观点来对数据和信息建模。描述了从用户角度看到的数据,反映了用户的现实环境。
最常用的表示概念性数据模型的方法,是实体—联系方法(Entity—Relationship Approach)。这种方法用ER图描述现实世界中的实体,而不涉及这些实体在系统中的实现方法。用这种方法表示的概念性数据模型又称为ER模型。ER模型中包含“实体”,“联系”和“属性”。
博客信息管理系统涉及的实体包括:
a)用户:用户ID、用户名称、用户密码、博客主题、说明、E-mail、注册
日期、发表日志数。
b)类别:类别编号、类别名、类别描述、用户ID。
c)日志:日志编号、日志标题、日志内容、类别编号、发表日期、最后修
改日期、用户ID、浏览次数、评论数。
d)评论:评论编号、评论标题、评论内容、发表日期、最后回复日期、评
论人、日志编号。
e)留言:留言编号、留言标题、留言内容、发表日期、最后回复日期、留
言人、用户ID。
综合本系统各子模块要实现的功能,通过前面对博客信息系统数据的分析可以得到:用户表、类别表、日志表、日志评论表、留言表的数据库概念模型(E-R图)。
用户E-R图如图4.1所示。
主题密码用户名ID说明E-mail注册日期发表日志数博客管理员 图4.1 用户E-R图
日志类别E-R图如图4.2所示。
类别名ID类别描述所属博客ID日志类别 图4.2 日志类别E-R图
日志E-R图如图4.3所示。
发表时间类别ID日志内容日志标题ID最后修改时间所属博客ID评论数浏览次数日志
图4.3 日志E-R图
日志评论E-R图如图4.4所示。
发表时间评论内容评论标题ID日志评论最后回复时间评论者名字评论日志ID 图4.4 日志评论E-R图
留言E-R图如图4.5所示。
发表时间留言内容留言标题ID日志评论最后回复时间留言者名字博客ID 图4.5 留言E-R图
4.2 系统数据表设计
a)用户表,此表主要用于保存用户的基本信息。其结构如表4.1所示。
表4.1 用户表
列名 BlogID
含义 用户编号
类型 Int
长度 4
缺省值 无
允许空 否
UserName Password NickName Description Email RegisterTime ArticleNum
用户名 用户密码 博客主题 博客描述 电子邮件 注册日期 发表的日志数
Varchar Varchar Varchar Varchar Email Datetime Int
20 20 50 100 50 8 4
无 无 无 无 无 无 0
否 否 否 是 否 否 否
b)日志表,此表主要用于保存日志的基本信息。其结构如表4.2所示。
表4.2 日志表
列名 ArticleID Title Content CategoryID PublishTime LastModifyTime
BlogID
含义 日志编号 日志标题 日志内容 类别ID 日志发表时间 日志最后修改时间
用户ID
类型 Int Varchar text int Datetime Datetime Int
长度 4 50 8 4 8 8 4
缺省值 无 无 无 无 无 无 无
允许空 否 否 否 否 否 否 否 否 否
ReadTimes FeedBackNum
日志浏览次数 日志评论数
Int Int
4 4
0 0
c)日志评论表,此表主要用于保存日志评论的基本信息。其结构如表4.3所示。
表4.3 日志评论表
列名 FeedBackID Title
含义 评论编号 评论标题
类型 Int Varchar
长度 4 20
缺省值 无 无
允许空 否 否
Content PublishTime UserName ArticleID
评论内容 发表时间 用户名 日志ID
Text Datetime Varchar Int
8 8 20 4
无 无 无 无
否 否 否 否
d)留言表,此表主要用于保存留言的基本信息。其结构如表4.4所示。
表4.4 留言表
列名 MessageID Title Content PublishTime LastModifyTime UserName BlogID
含义 留言编号 留言标题 留言内容 发表时间 最后回复时间 用户名 用户ID
类型 Int Varchar text Datetime Datetime Varchar Int
长度 4 20 8 8 8 20 4
缺省值 无 无 无 无 无 无 无
允许空 否 否 否 否 否 否 否
e)类别表,此表用于保存日志类别的基本信息。其结构如表4.5所示。
表4.5 类别表
列名 CategoryID Name Description BlogID
含义 类别编号 类别名 类别描述 用户编号
类型 Int Varchar Varchar Int
长度 4 20 100 4
缺省值 无 无 无 无
允许空 否 否 是 否
4.3数据连接
目前流行的数据库连接技术主要有:JDBC-ODBC桥、JDBC和数据连接池技术。该系统采用数据连接池技术,使用连接池的优点主要体现在两个方面:对数据库
的连接统一进行配置、管理、监控,以及对数据库连接池的参数进行优化调整,同时对应用程序中没有关闭或其他原因造成没有关闭的数据库连接由连接池统一进行管理。便于程序的移植和后端数据库的切换,因为在应用中通过统一的JNDI获得数据库的连接,而具体连接的是哪一台机器上的数据库与程序无关。
数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vector对象中,一旦数据库连接建立后,不同的数据库访问请求就可以共享这些连接。这样,通过复用这些已经建立的数据库连接,可以克服上述缺点,极大地节省系统资源和时间。
数据库连接池的主要操作如下:
a)建立数据库连接池对象(服务器启动)。
b)按照事先指定的参数创建初始数量的数据库连接(即:空闲连接数)。 c)对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库
连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的数据库连接。 d)存取数据库。
e)关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正
关闭,而是将其放入空闲队列中。如实际空闲连接数大于初始空闲连接数则释放连接)。
f)释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对
象,并释放所有连接)。
5 系统功能的具体实现
5.1系统的主窗口
系统的界面按照常规的WEB界面进行设计,设计的原则是界面友好,易于操作,容易上手,尽可能的贴切用户实际。
所有的网络用户都可以进入该首页进行登录、注册、浏览等相关的操作。在页面的上方是博客系统的导航列表,图中显示的导航条包括登录、注册、博客随笔以及站务公告。在页面的左侧用户可以根据随笔标题进行搜索;搜索的下方是系统对博客、随笔、文章及评论的统计信息。最新文章则显示在博客首页的主要中心位置上。
博客系统首页图如图5.1所示。
图5.1 博客系统首页图
所有的网络用户都可以进入某个人的博客主页进行浏览、留言等相关的操作。在后台管理页面的上方分别显示博客首页、随笔、日志、链接、相册、帐户修改、密码修改等表单。在这里博客用户经过身份认证进入,可以对自己的日志或者随笔进行删除、添加、分类等管理。同时可以修改自己的用户名和密码。
博客后台管理界面图如图5.2所示。
图5.2 博客后台管理界面图
5.2公共核心类的设计
5.2.1数据库相关 访问数据库相关类如下:
a)获取数据源,其代码如下:
public static Connection getConnection(){
try {
Context ctx=(Context)new InitialContext().lookup(Contants.ENV);
DataSource ds=(DataSource)ctx.lookup(Constants.JDBC);
getConnection()方法:该方法通过Context类提供的lookup()方法查找数据源,从而获得jdbc/blog数据源的引用,得到DataSource对象的引用后,就可以通过DataSource的getConnection()方法获得数据库连接对象。
b)连接数据库和操作数据库;代码如下: // 构造数据库的连接和访问类 {
}
public void setInt(int index, int value) throws SQLException { }
prepstmt.setInt(index, value); prepstmt.setString(index, value); public DBConnect() throws Exception {
// 获得数据库连接对象 conn=DB.getConnection(); // 创建一个JDBC声明
stmt = conn.createStatement();
// 预设SQL语句
public void prepareStatement(String sql) throws SQLException { }
// 设置索引值位置的对应值
public void setString(int index, String value) throws SQLException
prepstmt = conn.prepareStatement(sql);
// 执行SQL语句并返回字段集
public ResultSet executeQuery() throws SQLException { }
DBConnect()方法:该方法主要负责获得数据库连接对象。
prepareStatement(String sql)方法:该方法主要完成预设SQL语句,只有
if (prepstmt != null) {
return prepstmt.executeQuery();
} else
return null;
一个用来接收SQL语句的参数,如果SQL语句有误将抛出异常。
setString(int index, String value)方法:该方法用于设置预设SQL语句中的相应字段值,index表示索引位置,value表示需设置字符串类型的值。
setInt(int index, int value)方法:该方法用于预设SQL语句中的相应字段值,index表示索引位置,value表示需设置整型类型的值。
executeQuery()方法:该方法用于执行预设的SQL语句。 5.2.2编写JavaBean类
为每一个数据库表建一个JavaBean类,完成对该表字段的获取和设置。 博客信息管理系统所用的JavaBean类列表如表5.1所示。
表5.1 JavaBean类列表
JavaBean类 Blog类 Article类 CateGory类 FeedBack类 Essay类
说明
博客管理员表对应的JavaBean类 日志表对应的JavaBean类 类别表对应的JavaBean类 评论表对应的JavaBean类 随笔表对应的JavaBean类
Feedback类的代码如下: public class Feedback { // 属性,对应数据表中的字段名
private int feedbackid; private String title;
// 字段的访问和设置方法
public int getFeedbackid() { }
public void setFeedbackid (int feedbackid) { }
Feedback类:通过getFeedbackid()方法获取feedbackid属性的值,通过setFeedbackid (int feedbackid)方法设置feedbackid属性的值。 5.2.3管理类设计
上面每一个JavaBean类都有一个相对应的管理类,是在JavaBean类及数据库相关类的基础上完成对数据库表的访问、更新、统计操作。
博客信息管理系统所用的管理类列表如表5.2所示。
表5.2 管理类列表
管理类 BlogMgr类 Article类 FeedBack类 Essay类
说明
完成对博客管理员表的查询、更新及统计 完成对日志表的查询、更新及统计 完成对评论表的查询、更新及统计 完成对随笔表的查询、更新及统计
return feedbackid;
this. feedbackid = feedbackid;
FeedbackMgr类的部分代码如下: public class FeedbackMgr {
/*
* 添加评论 */
public void add(Feedback feedback){
DBConnect dbc = null;
ResultSet rs = null; try {
// 新建数据库连接和访问对象 dbc = new DBConnect(); // 预设sql语句
dbc.prepareStatement(\"INSERT INTO
feedback
(title,content,publishtime,lastmodifytime,username,articleid) VALUES ( ?,?,?,?,?,?)\");
// 设置对应值
dbc.setString(1, feedback.getTitle()); dbc.setString(2, feedback.getContent()); dbc.setDate(3, new java.sql.Date(new
java.util.Date().getTime()));
dbc.setDate(4, new java.sql.Date(new
java.util.Date().getTime()));
/*
* 查询所有评论(按最后修改时间) */
public Collection getAllByLastModifyTime() {
DBConnect dbc = null;
Collection c = new ArrayList(); ResultSet rs = null; try {
// 新建数据库连接和访问对象
dbc.setString(5, feedback.getUsername()); dbc.setInt(6, feedback.getArticleid()); // 执行该更新语句 dbc.executeUpdate();
dbc = new DBConnect(); // 执行SQL语句,返回字段集
rs=dbc.executeQuery(\"SELECT * FROM feedback order by lastmodifytime desc\");
Feedback feedback = null; while (rs.next()) {
// 新建评论对象
feedback = new Feedback(); // 设置评论对象相关的属性
feedback.setFeedbackid(rs.getInt(\"feedbackid\")); feedback.setTitle(rs.getString(\"title\")); feedback.setContent(rs.getString(\"content\"));
feedback.setStrpublishtime(rs.getString(\"publishtime\"));
feedback.setStrlastmodifytime(rs.getString(\"lastmodifytime\")); }
FeedbackMgr类:封装了对评论表的所有操作,包括添加评论、回复评论、删除评论、查询某日志的所有评论(按最后修改时间排序)和查询某用户的所有评论(按最后修改时间排序)等。
feedback.setUsername(rs.getString(\"username\")); feedback.setArticleid(rs.getInt(\"articleid\")); }
// 将该评论对象存入集合对象中 c.add(feedback); // 将该评论对象置为null feedback = null;
// 如果结果集不会空,则循环添加该评论对象
5.3系统主要功能模块详述
5.3.1登录模块
当用户需发表新日志或者是对博客进行管理时,就必须先进行登录验证操作,然后进入博客系统后台。用户登录界面图如图5.3所示。 5.3.2日志管理模块
日志管理显示模块列出了日志编号、日志标题以及相应的操作:编辑日志和删除日志。根据选择的分类显示当前分类下的日志列表。当然,对日志进行操作的前提条件是当前登录用户具备相应的管理权限。
日志显示界面图如图5.4所示。
图5.3 用户登录界面图
图5.4 日志显示界面图
当用户需要添加新的日志时,可单击日志管理显示界面中的添加日志链接,进入添加新日志的界面。在日志标题、内容输入域内输入相应的文字,以及选择分类后,单击“确定”按钮进行表单提交,完成添加新日志的操作[14]。 5.3.3撰写日志模块
撰写日志界面图如图5.5所示。 5.3.4删除日志模块
如果需要删除已发表的日志,可单击日志管理显示界面中的删除日志链接,将弹出删除日志确认对话框图如图5.6所示。
图5.5 撰写日志界面图
图5.6 删除日志确认对话框图
再次确认用户是否真的要进行该日志的删除操作,而不是误操作。点击确定按钮完成日志删除操作,点击取消按钮取消该删除操作。
完成日志删除操作的核心代码如下: try{
conn=DB.getConnetion(); //禁止自动提交,设置回滚点 conn.setAutoCommit(false); stmt=conn.createStatement(); //删除该日志的所有评论
stmt.prepareStatement(“delete from feedback where articleid=?”); stmt.setInt(1,articleid); stmt.executeUpdate(); //删除该日志
stmt.prepareStatement(“delete from article where articleid=?”); stmt.setInt(1,articleid); stmt.executeUpdate(); conn.commit(); //事务提交 }
catch(Exception ex){ ex.printStackTrace(); try{
conn.rollback(); //操作不成功则回滚 }
catrch(Exception e){ e.printStackTrace(); } } finally{ try{
stmt.close(); conn.close();
}catch(Exception e){ e.printStackTrace(); } }
由于每一篇日志允许用户进行评论,日志可能有相应的日志评论,在进行日志删除操作时,得先删除该日志的所有评论,然后删除该日志。为了保持数据库中的数据一致性,本系统采用事务来完成该删除操作。在数据库操作中,一项事务是指由一条或多条数据库更新的SQL语句所组成的一个不可分割的工作单元。只有当事务中所有操作都正常完成,整个事务才能被提交到数据库;如果有一项操作没有完成,就必须撤销整个事务。 5.3.5修改帐户模块 修改帐户界面图如图5.7所示
图5.7 修改帐户界面图
博客用户可以依照自己的需求在帐户修改信息这个模块对自己的帐号、博客名称等进行修改。 5.3.6修改密码模块 修改密码界面图如图5.8所示
图5.8 修改密码界面图
在此模块博客用户可以根据自己的需要对旧的密码进行修改,从而设置新的密码。
结论
作为一个完整的博客系统,本系统的主要结构有:阅读博客,后台管理,系统管理。其中,后台包括随笔管理,文章管理,评论管理,链接管理,图片管理,密码管理。系统管理包括帐户管理和密码管理。从而使得博客用户能够更好地展现自我和互相交流。
在详细设计和编码中,运用JSP最基本的开发技术,代码简单易懂,系统里间跳转比较清晰。完成了普通用户和系统管理员两者的功能分离,而且各自的功能操作都能得到正确数据并存入数据库中保存。另外系统利用MVC模式极大地提高了系统的灵活性、复用性、开发效率、适应性和可维护性。
系统的开发以及论文的研究由于时间的关系,有一些地方做的还不是很完美。对MVC设计模式的研究时间不长,所以在写代码的时候还没有做到真正的得
心应手,是在查询一些帮助文档的情况下才完成的。
但是,通过这次设计我意识到将旧知识和新知识结合的必要性,学会了如何思考和解决问题的方法。在今后的学习和工作当中,我会再接再厉,做出更好的软件系统。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务