1、毕 业 设 计 说 明 书学生姓名 参考 学 号 参考学院 计算机科学与技术学院专 业 计算机科学与技术题 目 个人博客系统的设计与实现(姓 名) (专业技术职称/学位)指导教师2012 年 5 月淮阴师范学院毕业论文(设计)1摘 要: 随着手机、平板等手持终端访问设备的普及,越来越多的用户希望通过网络平台进行互动交流,同时展现自己的个性,传播自己的思想,而通过个人博客发布信息是一个使用频率较高的方式。本课题建立一个交互简捷的博客系统,方便在校学生发布信息进行交流,可以将个人生活经验或学习笔记心得等发布到系统中,方便其他同学的查看讨论。这能极大地促进同学间思想交流和互动,扩大了同学的交际圈,并
2、且在扩大获取信息的渠道的同时,还能提高学习兴趣,增加生活情趣。系统使用 Java + JSP + Tomcat + MySQL技术实现。关键词: 个人博客,Blog,Web 应用,JSP,MySQL2Abstract:With the popularity of the mobile phone, tablet and handheld terminal access device, more and more users wanted to interact through the network platform to show their individuality and spread
3、 their ideology. It was frequently used to release information through a personal blog. The project established a simple blog system, which facilitated the students to exchange their information, such as personal life experience or study notes. And it greatly promoted the exchange of ideas and inter
4、action of the students, expanded the circle of communication, and increased students interest in learning and life. The system implemented by Java, JSP, Tomcat and MySQL technologies.Keywords:Blog,Web appli cation,JSP ,MySQL3目 录1 绪论 .11.1 课题背景 .11.2 目的和意义 .11.3 系统设计指 导思想 .12 系统需求论 述 23 系统分析与 设计 .53.
5、1 系统的总体 分析 .53.2 分析类的获 取 .63.3 系统关键抽 象概念的获 取与分析 .83.4 分析类交互 114 系统设计 144.1 系统运行平台的设计选 择 144.2 系统数据库的结构设计 144.3 数据库操作 的设计 154.4 用户界面设 计 165 系统实现 185.1 登录的实现 195.2 发帖的实现 215.3 查看帖子模 块 236 软件测试与 调试 256.1 软件测试的 必要性 256.2 调试 25结 论 27参考文献 28致 谢 .29淮阴师范学院毕业论文(设计)11 绪论1.1 课题背景随着手机、平板等手持终端访问设备的普及,普适计算越来越渗入人们
6、的生活。跟随发展的就是个性化服务,如网络发布、签名、预约等都被极大地赋予了个人特色,越来越多的用户希望通过网络平台进行互动交流,同时展现自己的个性,传播自己的思想。著名的网站包括 Facebook和人人网等。很多人对发生在自己身边的事以及对生活的一些感悟愿意用文字或图片的方式记录下来发到网络上与他人分享交流,其中通过个人博客发布是一个使用频率较高的方式。本课题拟建立一个交互简捷的博客系统,方便在校学生发布信息进行交流,可以将个人生活经验或学习笔记心得等发布到系统中,方便其他同学的查看讨论交流。1.2 目的和意义根据维基百科的定义 1,博客或网络日志(英语:Blog ,为 Web Log 的合成
7、词) ,台湾译作网志、部落格,港澳译作网志,马新译作部落格、博客、网志,是一种由个人管理、不定期张贴新的文章、图片或影片的网页或联机日记,用来抒发情感或分享信息。博客上的文章通常根据张贴时间,以倒序方式由新到旧排列。许多博客作者专注评论特定的课题或新闻,其他则作为个人日记。能够让读者以互动的方式留下意见,是许多博客的重要要素。从定义可以看出,Blog 一般包含了最新的个人私人信息或专题方向信息,因此开设blog 给在校学生使用,让同学不定期的更新记录自己的学 习生活状态,不仅可以用来及时相互交流,还可作为学习的笔记本使用,长时间的积累将成为一笔精神财富。建立系统的根本目的就是要促进学生的思想交
8、流和互动,扩大学生的交际圈,提升学生的综合能力。它不仅能扩大同学获取信息的渠道,还能提高学习兴趣,增加生活情趣。1.3 系统设计指导思想由于系统需要具有普适的特性,因此建立以Web 服务为中心的系统是最优的架构。使用传统的B/S 架构能接纳多种终端设备的访问,如使用笔记本电脑、台式计算机、手机、平板电脑等设备。其中以学生使用的实际情况看,PC 终端和手机终端将是访问的主要设备,因此在系统架构上必须容纳传统的浏览器访问和手机终端访问方式。结合实际的需要,技术实现上将以普通 Web结合 Wap的方式实现系统功能的访问,并且这两种技术架构相近,可以统一到Web 服务器中一起管理 2,3。2另外,从用
9、户操作的角度出发,使用系统应该感受到较好的便捷性,即通常所说的系统设计以人为本的思想。综合考虑,对系统设计提出如下几点要求:1.便捷性:系统以便捷的信息访问为首要目标,以方便用户使用为核心原则,需要充分考虑实际操作的各项细节,支持多种终端接入。这种追求近乎完美的操作体验正是著名的苹果公司创始人乔布斯先生所推崇的,当然本系统以这种指导思想为目标,努力做到尽善尽美,最终通过用户的不断反馈将及时调整,力争做到方便用户操作。在不需要查看操作帮助的情况下也能轻松直观的操作,并对操作流程有清晰的理解。2.实用性:包括系统功能和系统信息呈现以实用为目标,不添加华而不实的部件与功能,既不丢失必要的信息,又能简
10、单直观,以传达信息为核心,对文字记录和图片发布能提供较好的功能封装。另外通过系统能及时了解多方面多渠道的信息,体现系统的核心价值。3.可靠性:由于多用户的同时访问,因此系统要具备可靠的性能处理要求,能支持多用户并发访问和并发操作。同时所有的用户数据都存放在服务器上,要求数据存取可靠安全,尽量避免丢失用户创建的资料或数据状态不一致现象。4.可维护性:针对系统后期的功能调整或增删,应尽量减少维护的工作量。对用户来说,对系统中自己的资料的操作也应该方便查阅和维护。2 系统需求论述根据前面的 分析与定位 ,本博客系统 主要用于校 内同学的使 用,因此需求的 重点也反映 在同学平时 生活中的明 显的和一
11、些 潜在的期望 。就主要功能 来说,核心在于创 建自己的博 客空间,在博客空间 中方便的发 表博文,支持他人在 线评论互动 ,同时能方便 地查阅他人 的博文并添 加评论。同时由于潜 在的需求期 望增加获取 信息的渠道 ,单纯的博文 浏览显得过 于单薄,因此系统中 增加创建兴 趣小组的功 能,将小组的最 新消息自动 发布到组员 ,并提供小组 讨论的页面 空间。另外系统提 供站内信功 能,帮助简化互 发消息的管 理,这样系统能 自主控制所 有消息,并能保留消 息的历史信 息,方便消息维 护。这里为了方 便叙述,特预先约定 几个使用的 名词术语的 确切含义:博客空间:指网上由一 到多个页面 组成的、
12、由用户自己 管理发布的 、他人能访问 浏览的虚拟 空间。所有者可以 设置其基本 信息和呈现 方式,可以在空间 中发布自己 的文字或图 片信息供他 人访问并回 复。博文:发布在博客 空间的一条 信息,可能是文字 描述,可能是图片 ,也可能是混 合形式。一般由博客 空间的所有 者发布,他人只能回 复已有的博 文,不能发起一 条新的博文 。空间显示的 时候一般按 照时间由近 到远的顺序 进行显示。3博客:指登录进入 系统的一般 用户,可能是普通 的注册用户 ,并没有开通 自己的博客 空间,可能只对小 组感兴趣,因此只加入 了小组,也可能是具 有博客空间 的博主。这里泛指系 统中的正常 用户。博主:指
13、拥有博客 空间的系统 用户,可以登入自 己的博客空 间进行管理 ,也可以浏览 查看其它博 主的空间,并具有普通 博客具有的 一切操作功 能。综合上述,得到系统的 功能性需求 如下图。与与与与与与 与与与 与与与与与与 与与与与与与与与与与与与与与与与 与 与与与与与图 1 系统普通用 户的用例图其中各功能 性需求简要 说明如下:简单的系统 登入登出及 注册功能在 这里不再详 述。其他重要的 功能主要集 中在博客访 问和博主访 问这两个角 色上,其中博主角 色具有博客 角色具备的 所有的系统 功能。博客可以进 入系统浏览 查看某博主 的博文并回 复,或根据关键 字搜索得到 相关的博文 信息,另外
14、可以进 入小组空间 查看小组的 最新信息,同样可以利 用搜索功能 查询小组中 的相关信息 。如果没有找 到相关主题 的小组信息 ,则可以创建 新的小组并 接纳成员访问。在小组中可 以浏览发帖 信息并回帖 参与交流。博主角色能 操作的功能 主要集中于 自己的博客 空间方面,主要包括:发布博文管 理,4空间信息管 理,回复管理,空间模块管 理,外观方案管 理,设置头条或 置顶管理,分类管理,关键字管理 ,好友管理,常用链接管 理,背景音乐管 理。这几个模块 的访问一般是博客主人 身份才能操 作。对于系统管 理员角色的 操作,主要侧重于 系统的运营 与维护方面 的功能。主要包括系 统级别的用 户管理
15、、系统级别的 博客与小组 信息维护、系统属性设 置、系统状态检 查与监测、系统数据的 导出与导入 、系统的启动 与关闭,具体如下面 的用例图所 示。与与与与与与与与与与与与与与与与与与与与与与 与与与与图 2 系统管理员 用例图对系统的非 功能性需求 方面的要求 ,主要体现在 性能需求和 可靠性需求 两个主要方面,下面从这两 个核心的角 度加以说明 。性能需求:由于属于 Web 服务型 项目,这必然要求 系统能承受 大量的同时 在线用户访 问的问题。目前来看,只要系统结 构设计得当 ,只需要保障 硬件平台的 性能需求就 能将并发访 问需求控制 在合理的承 受范围。另外由于用 户很少集中 登录集
16、中处 理,实时状况下 多用户处理 需求没有想 象的高,但遇到一些 特殊情况时 ,可能会表现 出来,比如学校举 办运动会或 大型活动如 歌手比赛等 ,此时系统内 会有较大量 的发布、评论等活动 ,但这些活动 相互间关联 性不大,没有严格串 行化操作的 要求。因此虽然访 问量和发布 量大,但相对独立 ,运用软件架 构可以很好 的处理,同时使用应 用服务器自 身提供的集 群特性可以 很好地解决 压力承受的 性能要求。 4,5,6可靠性需求 :由于不是重 要的支撑平 台,即使系统停 机较长时间 ,也不会带来 太大的损失 ,但可能会给 用户造成很 大的困扰,因此可以将 可靠性需求 映射到底层 的支撑软件
17、 平台上,如使用 Java 应用服 务器和 Oracle 数 据库服务器 ,其本身较高 的可靠性要 求可以大体 上实现本系 统对整体可 靠性的要求 ,同时结合软 件架构内合 理的辅助型 框架应该能 较好的满足 可靠性要求 。 4,653 系统分析与 设计基于系统的 需求,这个章节主 要陈述分析 得出系统的 分析模型和 设计模型,从逻辑上理 解系统的实 现方式和操 作方式。下面叙述中 没有严格按 分析和设计 划分小节,而是大体按 照几个主题 进行了陈述 ,将分析结果 与设计结果 大体连贯起 来,后续的章节 将介绍具体 的实现。3.1 系统的总体 分析针对 B/S 结构来说 ,整个系统服 务都集中
18、于 服务器端,对服务器的 架构设计一 般使用 3 层 架构或多层 架构,这在 Java 体系结构 设计中非常 普遍。本系统使用 常见的三层 架构,即界面表示 层、业务逻辑层 、数据持久层 。图 3 整个系统的 总体结构系统总体布 局如上图,客户端如需 求所述,可能是 PC机上的浏览 器,也可能是基 于手机的客 户端,通过使用 Web 和 Wap 访问协议 来协调这两 者。如果将 Web 接口包装成 Web Service 接口,则可以接入 更多类型的 访问设备。下图显示了 整个系统的 架构图。与与与与与与与与图 4 系统体系架 构6其中表示层 的职责主要 集中于处理 Web 页面 的数据显示
19、、接收用户输 入和各类操 作,属于整个系 统的最前端 ,但其中没有 系统的操作 逻辑,仅仅包含简 单的页面交 互方面的处 理逻辑,一般使用 JavaScript 脚 本来生成浏 览器端的交 互逻辑,并使用脚本 将输入数据 或操作结果 反馈到后台 业务逻辑层 。这部分内容 借鉴了课程 Web 程序 设计和Java 高 级编程中的知识,使用了其中 的介绍的脚 本交互组件 CKEditor。这个组件功能强大,只要简单配 置就可以很 好的完成文 字和图片的 发布工作,这极大地减 轻了表示层 开发的工作 量。在毕业设计 的过程中,深深体会到 了封装以及 基于组件开 发带来的好处,具体地体会 到了软件工程
20、课程中的原 来较为抽象 的思想。3.2 分析类的获 取确定了主要 的系统用例 ,接下来需要 得出分析类 模型,用于评估整 个系统,也起到了承 接分析与启 下设计的作 用。归纳一下系 统的功能,并综合操作 特性,得到如下几 个综合的操 作界面类型 (这里统一以 UI 为后缀 ,表示用户界 面):主页面(MainU I):是系统的首 页面,主要呈现登 录模块、搜索模块、所有博客空间最新更新 情况统计、所有小组更 新情况统计 、推荐的博客 与小组的内 容展示、讨论热烈的 话题汇总、博客和小组 排行榜、广告模块等 信息。个人主页面 (UserM ainUI):用于用于个 人有关的信 息设置与管 理,包
21、括个人博 客汇总信息 (一个用户可 以有多个博 客空间) 、创建小组管 理、参与小组的 最新情况、书签管理( 用于记录一 些常用链接 )、个人信息管 理模块、搜索模块、登录模块。博客主页面 (BlogU I):即个人博客 空间,包括个人信 息模块、搜索模块、登录模块、标题模块、书签模块、访客模块、发帖信息模 块、近况模块、推荐小组模 块、推荐博客模 块、通告模块、广告模块(系统内用户 发布、非商业广告 )。博客管理主 页面(BlogM gmtUI):用于对当前 博客空间进 行设置,包括标题设 置、界面设置、模块设置、访问性设置 、发帖设置、回复设置、访客信息管 理模块。小组主页面 (Group
22、 UI):主要呈现某 小组的信息 ,包括标题、简介、空间发帖、成员、搜索模块、登录模块、提示栏个人 信息显示模 块、近况模块、推荐小组模 块、推荐博客模 块、通告模块、广告模块(系统内用户 发布、非商业广告 )。小组管理主 页面(Group MgmtUI):用于小组内 的信息管理 。包括标题设 置、界面设置、成员及访问 性设置、发帖设置、回复设置。搜索页面(Searc hUI):主要用于站 内的信息搜 索,包括用户、博客空间、小组、主题、关键字、一般包含信 息的搜索及 其结果。系统管理页 面(Admin UI):汇总了系统 的管理功能 ,包括系统开 关机模块、系统属7性设 置模块、系统数据管
23、理模块、系统用户管 理模块、状态显示模 块、统计信息模 块。控制类的作 用集中体现 了系统的业 务逻辑,因此最终的 控制类大部 分都映射到 了业务逻辑 层,根据用例模 型中的系统 功能性描述 ,经过统筹安 排,得出系统中 的控制类如下:登录控制类 (Login Workflow):专门负责登 录的控制逻 辑。登出控制类 (Logou tWorkflow):针对登出系 统专门进行 处理。虽然网页型 访问一般设 有 30 分钟 会话有效期 ,但这里还是 单独进行处 理,保证数据的 一致性。注册控制类 (Regis terWorkflow):专门处理新 用户注册的 问题。查找功能在 各个对象上 都有
24、体现,最终界面将 分类显示,因此查找功 能这样组织 :综合查找控 制类(FindW orkflow):用于统一各 类查询及汇 总各查询结 果。小组查询(FindG roupWorkflow):针对小组进 行筛选查询 的控制类。用户查询(FindU serWorkflow):用于对用户 进行各类信 息进行筛选 查询。博客空间查 询(FindB logWorkflow):基于输入值 查询满足条 件的博客空 间。发帖查询(FindI temWorkflow):针对发帖回 帖进行筛查 ,可以对博客 空间和小组内的发帖同 时筛选。针对发帖管 理的控制类 组织为发帖 、显示、回复三个控 制类。创建新帖控
25、制类(Creat eItemWorkflow):博客空间和 小组空间里 面使用相同 的控制逻辑 ,因此统一为 CreateItemWorkflow控制 类,不同的就是 发往的空间 不同而已。显示发帖控 制类(ListI temWorkflow):针对显示自 定义的要求 较多,因此单独设计显示控制 逻辑,在博客空间 和小组空间 中使用相同 的控制类,最终显示在 界面类中加工生成不同 的页面风格 。回帖控制类 (Reply ItemWorkflow):用于管理回 帖的过程控 制,与创建新帖 很相近,但地位不同 。另外几个控 制类集中于 管理功能,包括:发帖条目的 管理控制类 (ItemM gmtW
26、orkflow):对空间中所 有的发帖进 行管理的控制类,体现在对条 目的增删改 查,对回复的管 理,附加信息以 及状态的管 理。博客管理控 制类(BlogM gmtWorkflow):对博客空间 的信息进行 配置,对各模块进行配置与显 示,以及置顶发 帖、管理链接关 键字、背景音乐处 理等。小组管理控 制类(Group MgmtWorkflow):针对小组的 各管理功能 ,包括设置小 组状态、批复加入请 求、任命管理者 、发帖管理等 。用户管理控 制类(UserM gmtWorkflow):针对用户自 身进行管理 ,包括更改信 息,8管理好友等 操作。系统管理控 制类(SysMg mtWor
27、kflow):所有针对系 统的管理和 操作都纳入 这个控制类 中,当然设计阶 段可以对设 计类进行调 整,划分出分角 色的管理类 实现。3.3 系统关键抽 象概念的获 取与分析下面分析系 统的领域模 型。在这个系统 中领域模型 的重要作用 是显而易见 的,所有用户都 围绕着这个 模型在工作 。匿名用户可 以浏览系统 中的各种信 息,包括浏览博 客空间和小 组空间的信 息;普通博客可 以查看其它 博客空间的 信息,并能够进入 小组进行讨论;而博主则可 以在自己的 博客空间发 布博文并进 入小组讨论 ,所有人都在 围绕领域模型浏览信息 或操作信息 。因此根据前 面的假设和 扩展,初步得出下 面的领
28、域模 型结构。图 5 系统的关键 抽象根据前述需 求,一个用户可 以创建多个 博客空间,并可以发布 多条博文,每条博文具 有一个特定 的主题,并且可以具 有多个分类 关系,可以包含多 条回复的评 论,并且具有一 个特定的状 态。用户可以创 建一个小组 ,并且小组可 以加入多个 用户,小组中可以发帖、回帖。由于博客空 间和小组内 的消息发布 在操作和结 构的性质上 是一致的,不同之处在 于小组内任 何人都可以 发帖,而博客空间 内只允许博 主发帖,这在设计实 现中只要检 查当9前是博 客还是小组 ,操作者是否 拥有当前博 客空间即可 解决权限问 题,因此在系统 设计中将两 者统一处理 ,将消息发
29、布 对象统称为 发帖条目(PostI tem),回复统一为 回帖条目(ReplyItem)。每个发帖条 目关联一个 主题(Subje ct),并具有零到 多个关键字 (分类)(Keyword)。当然发帖条 目有不同的 状态(Statu s),如草稿、扣留发布、正常发布、置顶发布、隐藏、删除、允许回复、禁止回复。另外博客博 主仅仅在检 查操作时有 区分权限的 关系,因此将两者 统一为用户 (User)。重新整理系 统模型如下 图。图 6 博客空间与 小组内的发 文及回复的 模型对于发帖条 目的状态变 迁可以建立 下面的模型 进行建模。10与与与与与/与与 /与/与 /与 /与/与 /与 /与与图
30、 7 发帖条目的 状态变迁图用户新建发 帖后,键入的内容 自动保存,此时发帖属 于草稿状态 ;编辑完成点 击发布后,发帖进入待 发布状态;进入待发布 状态的帖子 由系统自动 判断是否有 违规定的地方,进入审批状 态,结果若通过 则进入发布 状态,若未通过则 进入待发布 状态,此时用户可 以继续编辑 或丢弃帖子 ,因此在待发 布状态下的 帖子都是没 有审核通过 的帖子;处于发布状 态的帖子是 可以显示在 空间里面的 ,当然如果用 户选择隐藏 则不显示在 空间内;超过时限的 帖子则进入 存档状态,存档状态下 的帖子都将 被移到到备 份库中压缩 存储。3.4 分析类交互下面选取一 个简单的登 录过程
31、和发 布帖子这两 个用例来说 明分析类的 交互过程分 析。登录过程在 所有系统中 都有体现,功能也简单 直观。一般在操作 的设计中,首次登录的 时候只需要 输入用户标 识和密码即 可登录,当用户名或 密码不正确 时,在后续的界面上加入验 证码来防止 破解攻击,多次无效后 (一般控制在 10 次)账户便被锁 定。本系统中由 于没有太大 的安全性需 求,因此即使多 次登录失败 账户也不需 要锁定,只需加入验 证码即可。11与与 : MainUI与 与与 : LoginUI 与与 : Sesion与与与与CokieURL与与与与与与9: setupSecurityContext( ) login s
32、ucesful 13: displayOperationalPanel( )1: start( ) 2: open( )3: enterUserName( )4: enterPasword( )5: logInUser( ) 6: validateUserIDPasword( )7: setupSecurityContext( ) login sucesful 10: getUserContext( )1: getUserName( )12: close( )8: new(UserID)与与与.图 8 登录的交互 流程其中的协作 关系如下,其中用户类 不属于系统 内部,只是用来交 互做输入的
33、,因此可以看 出用户需要 打开主界面 ,在登录模块 中输入用户 名、密码,点击登录即 可,成功后在会 话中记录用 户信息,在系统主页 面中记录安 全信息,这样在各个 页面间跳转 的时候就可 以共享安全 状态和安全 凭据了。下面分析发 布帖子的交 互过程。界面中使用 CKEditor 控件 可以完成文 字修饰、上传图片及 编排版式的 功能,最终在浏览 器上生成一 个 HTML的描述文本 ,提交后服务 器端接收这 个 HTML描述文本,设计中将这 个描述文本 直接存入数 据库中即可 。浏览帖子的时候只要取 出此描述文 本放入页面 中即可显示 原先编辑好 的效果。提交此数据 后,首先确认并 检查用户
34、权 限,是否可以发 帖,通过后将发 帖内容交给 系统检查,这里由ItemChecker 接 口来完成检 查工作,最终设计中 只要实现这 个接口就可 以完成多种 检查方法。检查通过后 ,发帖内容存 入数据库,同时用户可 以浏览最终 的效果。12:与与 :BlogUI :CreatItemUI :CreatItemWorkflow :Sesion :UserMgmtWorkflow :ItemCheckrDBHelpr6: entrInfo()7: publish() 8: publish()9: getCurentPrincipal()10: isUerInRole()1: isUerInRol
35、e()12: submitForValidtin()1: newItem5: creatUI()2: geturntPrincipal()3: isUerInRole() 4: isUerInRole()13: sveItm()14: refrsh()15: displayNewItems()图 9 发帖交互流 程图对应的协作 图如下所示 ,其中为了保 险起见,将用户验证 做了两次,防止恶意信 息被用重播 的方式插入 到系统中,即创建帖子 时验证身份 和发布帖子 时也验证身 份,因此中间可 能隔了较长 的时间,如果用户被 禁用,则这时可以 重新检查权 限状态。4 系统设计系统设计中需要综合考虑
36、功能性需求和非功能性需求,而且非功能性需求更重要。一些部分需要软件设计模式的加入,但本人对设计模式了解还不很透彻,因此设计中只是完成了功能操作,没有再细致地考虑调整其结构,让它满足设计模式的要求,当然过多运用设计模式也会带来一些负面的影响,比如其结构复杂,不太容易立即理解,因此后面的设计暂时以满足功能要求为第一目标,然后重点考虑实现非功能需求的便捷操作的要求。4.1 系统运行平台的设计选择整个系统使用 Java语言作为开发的基础语言,Web 界面部分搭配使用HTML、CSS、Javascript以及 JSP技术来实现。最终发布的系统对平台没有特别大的强制要求,因为基于 Java开发的 Web型
37、服务项目,可以选用流行的 Tomcat服务器或者 JBoss服务器或者 GlassFish服务器来搭建,这些都是开源免费的平台。数据库可以使用 MySQL数据库,它也是免费使用的数据库,很多大型网站都选用了MySQL作为自己的数据库支持平台。开发过程中,选择平台搭建于 Windows XP系统下,当然发布时可以选择 Windows平台或 Linux平台,两者的环境下都有上述的开源软件。对于硬件平台,基本上没有强制性要求,只要是可用的服务器硬件平台都能完成正常13部署和使用,当然性能高的服务器对多用户支持的效果会更好。4.2 系统数据库的结构设计根据前面的需求描述及领域模型的系统关键数据抽象,分
38、析得出系统的数据库表结构如下面的关系图所示,其中基本表(Table)用于记录底层的核心的信息。另外,必须基于基本表在其上层创建一些视图(View)以方便某些角度的数据的操作。整体的逻辑结构如图所示:图 10 数据库表的总体关系图单独表的建模信息不再详细列举,可以参阅上述的总图中的描述信息。4.3 数据库操作的设计为了简化数据库操作的代码,防止过度的重复数据库常规执行的初始代码,将数据库操作进行封装是很必要的,这也为后期数据库升级和系统功能升级提供便利。数据库操作的封装还能有效隔离软件对具体数据库的依赖。现在实际项目开发中可以用的框架较多,比如 JPA框架、Hibernate 框架、JDO 访问
39、、TopLink框架等,这些框架支持强大,但使用起来需要配置和编程传递接口等,因此在大中型项目中使用是较为合理的,本系统针对数据查询和更新操作较为简单,没有过多的14附加操作,因此使用 Apache的开源项目Common DbUtils可以很好的实现数据库的访问和操作。在项目中定义 DbHelper访问数据源封装信息。import javax.naming.Context;import javax.naming.InitialContext;import javax.sql.DataSource;import mons.dbutils.QueryRunner;public class DbHe
40、lper public static QueryRunner getQueryRunner() /数据源对象可以理解为连接池的管理者,通过他可以获取数据库的连接DataSource ds = null;try /通过在 context.xml文件,设定的数据源对象的名字,获取数据源对象Context context = new InitialContext();ds = (DataSource) context.lookup(“java:/comp/env/jdbc/mysqlds“); catch (Exception e) System.out.println(“获取数据源时出错“);Qu
41、eryRunner qr = new QueryRunner(ds);return qr;使用 DbUtils中的类进行操作,简化了大量的数据库访问代码。比如要查阅回复情况,定义查询条件,通过 QueryRunner执行就可以得到结果即 List集合,将得到的集合可以发给页面继续处理。String sql = “select id,username,content,createdtime from comment order by id desc“;QueryRunner qr = DbHelper.getQueryRunner();List list = null;try list = (L
42、ist) qr.query(sql, new BeanListHandler(Comment.class); catch (SQLException e) e.printStackTrace();request.setAttribute(“list“, list);request.getRequestDispatcher(“/adminCommentList.jsp“).forward(request, response);从上述代码执行情况看,比起常规的JDBC 操作有了极大的简化。因此使用 Apache的组件可以极大的提高开发的效率。4.4 用户界面设计用户界面部分总体上划分为以下几个方面
43、:主页面、博客页面、小组页面、管理页面。15下面介绍博客页面部分。因为实现的过程中没有完全按照原先设计的思想来做,并且功能上也有所裁剪,所以页面中包含的内容没有原先设计的丰富,基本上实现了博客空间的功能,具体如下所示。登录界面设计:图 11 登录页面博客页面设计:图 12 博客主页发帖子及其他操作的页面设计:16图 13 发贴的界面图 14 帖子管理图 15 帖子更改5 系统实现系统实现中,主要是根据设计模式实现其中定义的方法和功能即可。在软件项目中实现的工作量比设计要轻很多,这也是软件工程课程中重点提醒的要重设计、轻实现的思想。这里选取之前的介绍的登录实现与发帖相关部分的实现来介绍具体实现过
44、程。175.1 登录的实现登录页面的实现首先是判断登录名和密码是否为空,如果都不为空,提交给UserServlet处理,并且连接数据库并判断post 传过来的数值内容是否与数据库中的内容一致,如果一致就允许用户登录相应界面。页面组件 HTML代码组织如下:用户登录“ + message + “);%用户名密码后台操作代码为:public class UserServlet extends HttpServlet private static final long serialVersionUID = 2796904463414937664L;public void doGet(HttpServ
45、letRequest request, HttpServletResponse response)throws ServletException, IOException doPost(request,response);public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String method = request.getParameter(“method“);if(method = null)18method = “
46、;else if(method.equals(“login“)login(request,response);else if(method.equals(“logout“)logout(request,response);else if(method.equals(“change“)changePassword(request,response);/ 登录public void login(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException request.s
47、etCharacterEncoding(“utf-8“);String username = request.getParameter(“username“);String password = request.getParameter(“password“);String sql=“select id,username,password from t_user where “ + “username=? and password=?“;String params = username, password;QueryRunner qr = DbHelper.getQueryRunner();U
48、ser user = null;List list = null;trylist = (List)qr.query(sql, new BeanListHandler(User.class),params);catch(SQLException e)e.printStackTrace();If (list.size() 0)user=(User)list.get(0);HttpSession session = request.getSession();session.setAttribute(“user“, user);request.getRequestDispatcher(“/main.j
49、sp“).forward(request, response);elserequest.setAttribute(“message“, “用户名或密码不正确“);request.getRequestDispatcher(“/login.jsp“).forward(request, response);/ 退出public void logout(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException HttpSession session=request.getSession();session.invalidate();response.sendRedirect(“/main.jsp“);19/修改密码public void changePassword(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String oldP