博客系统的设计与实现(完整)

毕业设计

基于SSH构架的博客系统的设计和实现

English titleThe Design and Implementation for the blogs system based on SSH

名: xxxxx

号: xxxxxxx

专业名称: 计算机科学与技术

指导教师: xxxxx

二零一零

本文研究了当今博客系统的市场需求和种种的优势与不足,以及博客在中国发展迅速这一现状,提出了开发一个专业的博客管理系统的思想。本文对博客系统的运行机制、组成、相关可应用技术进行了深入的研究和分析,确定符合现在博客管理的需求,详细阐述了系统的总体设计和详细设计,并在此基础上,应用当前最流行的J2EE三层结构、JSP技术、数据库等与系统开发相关的技术完成系统主要功能的实现。

本博客系统致力为广大用户提供优质的互动交流平台,实现对博客发表文章、评论、图片、好友等数据的管理,同时实现了博客内容及时、快速更新的功能,系统不仅保留了传统博客系统的功能,还加上了一些人性化的界面设计,使用户对博客的操作更为的方便。

为了满足博客信息管理系统的要求,实现系统静态与动态页面的相互分离,本系统采用了SSH构架设计,从职责上分为三层:表示层、业务逻辑层、数据持久层。其中使用Struts2作为系统的整体基础架构,负责MVC的分离,在Struts2框架的模型部分,利用Hibernate框架对持久层提供支持,业务层用Spring支持。具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO接口,并给出HibernateDAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Spring完成业务逻辑。

关键词:表示层;业务逻辑层;数据持久层;StrutsHibernateSpring



Abstract

In this paper analyzes the market demand of blogging system and its advantages and inadequate, and the status of that blogs developed rapidly in china. Proposed to design a corporate ssh-based bolg systems thinking. Papers on the Blog System operation mechanism, composition, related techniques can be applied to in-depth research and analysis, detailed design of the system and detailed design, and on this basis, application of the most popular j2ee three-tier structure and jsp technology, databases and the systems development of technology to complete system of the main features.

This blog system is committed to offer high quality interactive exchange platform for customers. Implemente manage the data of publish articles, comments, pictures, companions and so on.

The system uses SSH framework design in order to meet the blog information management system requirements, and implement the static and dynamic pages separate. The system is divided into three layers based on the functions; there are Presentation Layer, Business Logic Layer and Data Persistence Layer. It uses Struts2 as overall infrastructure to separate the MVC. In the model part of the Struts2, it uses Hibernate framework to support persistence layer and uses Spring framework to support business layer. The specific approach is according to the demand to propose some models with the object-oriented analysis method, and realizes these models for basic object of Java, then compiles the basic DAO connection and realizes it in Hibernate. It uses the DAO which made by the Hibernate framework to achieve the conversion and access between Java and database, finally it completes the service logic by Spring framework.

Key words: Presentation Layer; Business Logic Layer; Data persistence layer; Struts; Hibernate; Spring



绪论

“博客”(BlogWeblog)一词源于“Web Log(网络日志)”的缩写,是一种十分简易的傻瓜化个人信息发布方式。任何人都可以像使用免费电子邮件一样,完成个人网页的创建、发布和更新。博客就是开放的私人空间,可以充分利用超文本链接、网络互动、动态更新等特点,在网络中,精选并链接全球互联网中最有价值的信息、知识与资源;也可以将个人工作过程、生活故事、思想历程、闪现的灵感等及时记录和发布,发挥个人无限的表达力;更可以以文会友,结识和汇聚朋友,进行深度交流沟通。

它目前是众多机构和媒体评为的最热门的互联网现象。其实博客并没有特别之处。但不经意间,博客竟如雨后春笋般冒出来,博得了越来越多网民的欢心,并引发了各种新的应用热潮。它最大的吸引力在于,只要你会发邮件,就可以轻松创建自己的网络媒体。

1.1 概述

博客是个人性和公共性的结合体,其精髓不是主要表达个人思想,不是主要记录个人日常经历;而是以个人的视角,以整个互联网为视野,精选和记录自己在互联网上看到的精彩内容,为他人提供帮助,使其具有更高的共享价值。

博客精神的核心并不是自娱自乐,甚至不是个人表达自由,相反,是体现一种利他的共享精神,为他人提供帮助。个人日记和个人网站主要表现的还是“小我”,而博客表现的是“大我”。也许形式上很接近,但内在有着本质的差异。所有优秀博客网站中,真正表达作者个人的内容非常有限,最多只是点缀,而不像个人网站那样是核心。

1.2 研究背景和发展趋势

1.2.1 研究背景

博客的精神是:自由表达,开放宽容,个性张扬,专业精神。

在没有自己的博客之前,人们会经常进出于论坛发表贴子或者通过即时通信软件聊天,来表达自已的想法,可是这些都是零散的和杂乱的。博客的出现,让人们可以不断的把自己以前的和每天激发的一些想法或者感受整理放在自己的博客上,每次在写文章的时候,可能又会产生新的想法。虽然一些想法一些思考只是皮毛,没有什么深度,但是当下笔去写的时候每次都会对某个小小的问题有了更多的一点点思考,再写博客的时候就感觉到了一种满足感,一种想法得以释放思考得以延伸的满足感。生活中每天的一个小小的事情都会引起人们的思考,甚至是和朋友的聊天中一个小小的火花迸发。督促自己努力、把一时的想法变成观点,争取在生命中的每天里留下点什么,这也是人们写博客的目的之一。这样就能督促自己每一天不要浑浑噩噩,时光流逝无痕无声无息,写博客也是在自己的每一天上留下了一道浅浅的思考和划痕。

1.2.2 发展趋势

趋势一:博客现在正在形成个人的信誉机制,有了博客之后就确立了一个个人虚拟身份,简单的来讲就是个人在互联网上是有名有姓的,而不再是一种匿名的行为,网民从流浪汉变成了一个定居者。以前在互联网上的各种行为都是在匿名状态中,相互之间是不认识的,但有了博客之后可以天天关注,而别的人也可以通过博客找到这个人。这样随着时间的积累就会产生一个新的东西,概括叫做“个人的信誉”,个人的信誉就是博客和博客之间发展各种关系的组合,这种信誉对每个人来讲可能是不同的,但对每个博客来讲就产生了新的评价机制,这个机制将是博客商业化的一个前提条件。

趋势二:博客越来越呈现出富媒体化,早期的博客是以文字为主,但随着多媒体发展博客相册、博客图片已经成为博客的基本配置,而现在许多博客网站已经提供了博客音频和博客视频。

趋势三:博客现在正在形成并完善精选机制,博客作为自媒体和个人媒体,产生的信息非常巨大。其中难免产生信息垃圾,随着博客的发展,博客通过精选机制精选出大家喜闻乐见的信息,像国内网摘、博客的评价系统等。

1.3 研究的目的和意义

随着计算机及网络技术的飞速发展,Internet/Intranet应用在全球范围内日益普及,人们对Internet应用的需求也越来越多,其中网上交友或利用网络和朋友家人联系,在线管理自己的相片等已经成为广大网民的共同需求,在这个背景下,我们的博客系统应需而出。

一般一个博客就是一个页面,它通常由简短而且经常更新的帖子构成,所有的文章都是按照年份和日期排列,有些类似斑竹的日记。看上去平淡,但它可以让每个人零成本、零维护地创建自己的网络媒体,每个人都可以随时把自己的思想和灵感更新到博客站点上。

博客的人性化和平民视角使得它提供的消息更贴近人们的生活,极大的丰富了人们业余生活,同时也给人与人之间的沟通架起一座桥梁。

1.4 本文工作概述

本论文对基于SSH结构的博客管理系统进行了深入的研究,并对系统的关键技术和分析设计进行了详细的分析阐述。利用该系统,网友可以在网络上发表日志、修改和删除日志、上传照片、查询博文、浏览博文、对日志发表评论、给博主留言。其中涉及到的主要内容有:

(1) 对系统的可行性及发展趋势进行分析,完成整个博客管理系统的需求分析和总体设计。

(2) 对系统体系结构及设计实现中使用的相关技术进行分析。

(3) 完成系统主要功能的详细设计与实现,包括:前台模块、后台模块,其中前台模块包括:日志浏览模块、相册浏览模块、留言模块、浏览博主好友模块,后台模块包括:登陆、注册功能模块、日志管理模块、日志类型管理模块、好友管理功能、相册管理模块、留言管理模块。

(4) 关于系统权限和安全性问题的探讨。

1.5 本文结构

本文分为七部分。第一部分首先介绍博客系统的研究背景及发展现状,提出运用网络技术开发博客管理系统的目的和意义。第二部分分析与系统设计及实现相关的技术和数据库技术,明确系统的操作流程。第三部分对博客管理系统进行需求分析,包括对系统进行可行性分析,确定在目前的条件下,开发博客系统是可行的。第四部分对系统数据库的分析设计,对系统中的数据库进行模型设计,包括数据流图、实体联系图及数据表结构。第五部分对系统的总体设计进行了全面说明,确定系统的开发思想以及开发环境,并对系统中的代码进行设计。第六部分阐述基于SSH结构博客管理系统主要功能的详细设计与实现。第七部分对博客系统的研究与设计工作进行总结,指出系统建设中存在的不足及解决方案,为将来系统的设计改进打下基础。



2 系统相关理论基础

本系统的开发采用的是当下最流行的SSH构架Struts2+Hibernate+Spring框架,在该框架中,JavaEE3层结构:表示层、业务逻辑层、数据持久层完美结合在一起。实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率

2.1 体系结构

SSH框架是典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。

表现层是传统的JSP技术,自1999年问世以来,经过多年的发展,其广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。

中间层采用的是流行的Spring+Hibernate,为了将控制层与业务逻辑层分离,又细分为以下几种。

Web层,就是MVC模式里面的“C”(controller),负责控制业务逻辑层与表现层的交互,调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC框架采用Struts

Service层(就是业务逻辑层),负责实现业务逻辑。业务逻辑层以DAO层为基础,通过对DAO组件的正面模式包装,完成系统所要求的业务逻辑。

DAO层,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。

PO,持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,该系统采用Hibernate作为ORM框架。

Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合,其数据服务层用来存放数据。

一个良好的框架可以让开发人员减轻重新建立解决复杂问题方案的负担和精力;它可以被扩展以进行内部的定制化;并且有强大的用户社区来支持它。框架通常能很好的解决这个问题。

2.2 JSP简介 

JSPJava Server Pages,是基于Java Servlet以及整个Java体系的Web开发技术。JSP已经成为开发Web动态网页重要、快速和有效的工具,是全新的网络服务器编程环境。JSP充分利用了Java的强大功能,是一种优秀的服务器端技术。随着Java技术的日益成熟和流行,JSP在网络编程中也变得越来越重要。JSP基于强大的Java语言,具有极强的扩展能力,良好的缩收性,与平台无关的开发特性,成为构建动态网站的主流技术之一,JSP有着其他技术所不具备的优势。其优势在于:可以将内容的生成和显示进行分离、生成可重用的组件、采用标识简化页面开发。

2.3 ECLIPSE简介

MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate

在结构上,MyEclipse的特征可以被分为7类:JavaEE模型WEB开发工具EJB开发工具应用程序服务器的连接器JavaEE项目部署服务数据库服务MyEclipse整合帮助

2.4 TOMCAT简介

Tomcat运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。当在一台机器上配置好Apache 服务器,可利用它响应对HTML 页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

配置正确时,Apache HTML页面服务,而Tomcat 实际上运行JSP 页面和ServletTomcatIISApacheWeb服务器一样,具有处理HTML页面的功能,它还是一个ServletJSP容器,独立的Servlet容器是Tomcat的默认模式。

2.5 MYSQL简介

(1) MySQL是一种数据库管理系统。计算机是处理大量数据的理想工具,因此,数据库管理系统在计算方面扮演着关键的中心角色,或是作为独立的实用工具,或是作为其他应用程序的组成部分。

(2) MySQL是一种关联数据库管理系统。关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大的仓库内。这样就增加了速度并提高了灵活性。

(3) MySQL软件是一种开放源码软件。

(4) MySQL数据库服务器具有快速、可靠和易于使用的特点。MySQL服务器有一套实用的特性集合,这些特性是通过与我们用户的密切合作而开发的。在我们的基准测试主页上,给出了MySQL服务器和其他数据库管理器的比较结果。

(5) MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中。MySQL数据库软件是一种客户端/服务器系统,由支持不同后端的1个多线程SQL服务器,数种不同的客户端程序和库,众多管理工具和广泛的应用编程接口API组成。

2.6 Struts2简介

Struts2是一个优秀的,可扩展的企业级Java WEB应用程序框架。是一个MVC(Model View Controller,模型,视图,控制)框架,Struts2提供控制和视图组件,并通过集成其它的技术来提高模型。框架的控制功能表现在连接应用程序的模型和WEB视图。

当接收到一个请求,控制层调用一个Action类。Action类检查或更新应用程序的状态通过模型层。传递数据在模型层和视图层之间,属性可以被放在Action类,或是一个古老又普通的JAVA类中。

通常,模型代表一个JavaBean对象图。模型用来做“持久性”的工作,同时 Action将扮演一个“交通警察”或适配器,框架会提供复杂的,自动类型转换到简单的传输数据,在域对象和文本的HTTP请求之间。

2.7 Spring简介

Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。模块的功能如下:

核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 IOC 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

Spring DAOJDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术

Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。

2.8 Hibernate简介

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSPWeb应用中使用,最具革命意义的是,Hibernate可以在应用EJBJ2EE架构中取代CMP,完成数据持久化的重任。

Hibernate的核心接口一共有5个,分别为:SessionSessionFactoryTransactionQueryConfiguration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。

3 系统分析

3.1 系统可行性分析:

可行性分析也称为可行性研究,是在系统调查的基础上,针对新系统的开发是否具备必要性和可能性,对新系统的开发从技术、经济、社会的方面进行分析和调查,以避免投资失误,保证新系统的开发成功。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。为了确定开发具有可行性,对本系统主要进行了一下三个方面的分析。

(1) 经济可行性。经济可行性主要是对项目的经济效益进行评价。本系统对系统开发者来说并不需要太高的成本支出,只是对系统的管理者付出管理报酬饥渴,而且开发周期不需要太长,节省了人力、物力、财力资源,所以本系统在经济上是可行的。

(2) 技术可行性。技术上的可行性分析主要是分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需求等。在软件方面,本系统采用的是JSPJ2EE三层结构的SSH构架进行开发,数据库采用了MYSQL;在硬件方面,本系统对机器本身没有太高要求,一般个人电脑完全满足。通过分析,具有技术上的可行性。

(3) 操作可行性。界面设计时充分考虑用户的习惯,使得操作简单。

综上所述,本系统开发目标已明确,在技术和经济等方面具备可行性,并且投入少、见效快,因此系统的开发时完全可行的。

3.2 系统需求分析:

3.2.1 功能需求分析

本博客系统分为前台和后台两个大模块,其中后台为博客管理页面,前台为用户界面。

(1) 后台主要包括以下几个功能:

登陆、注册功能:用户可以注册,注册时用户输入注册信息,同时向数据库中保存用户注册信息。进入后台时要登录,输入用户名和密码。

日志管理:用户可以发表日志,对日志信息查看、修改和删除。日志信息包括标题、发表时间、所属类型、日志描述信息等。

日志类型管理:用户可以添加、删除、修改日志类型。

好友管理功能:用户可以添加、删除、查看好友,访问好友的博客

相册管理:上传图片到自己的相册,删除相册中的照片,查看上传的照片。

留言管理:用户可以对访问者给自己的留言查看和删除。

(2) 前台主要包括以下功能:

日志查看功能:访问者可以查看博主的日志,并可以按照日志分类来查看。还可以对博主的日志发表评论。

相册查看功能:查看博主上传的图片。

留言板功能:给博主留言。

查看博主的好友:查看博主的好友。

3.2.2 系统的业务需求及流程

注册用户可以注册、登录本系统,对文章、相册、好友、留言等进行管理,其中包括对各个模块的信息的增、删、改、查操作。

网友可以访问博主的博客,浏览博主的文章、相册、好友等信息,还可以对文章进行评论,给博主留言。

系统业务流程如图3-1所示

3-1 博客系统总体业务流程图

3.2.3 系统数据分析及数据流图

博客系统中,主要是注册用户管理文章、留言、相册、好友等数据,数据的类型决定了程序对数据的处理方式也就是算法,因此,数据是实现分析的起点。现通过数据流图的方式分析系统中的数据的流动和处理。

对注册用户,登陆博客系统后,系统接收用户的添加、修改、删除请求,通过分析将这种请求转化为相应的HQL或者SQL语句执行对数据库的相关的操作,并将执行的相应结果送回系统中。系统接收到数据库返回的结果集,经过一定得分析处理,将其转换为JSP页面,返回到客户端显示给用户。

系统运行过程中,主要涉及到两部分的数据流向,一部分是博客注册用户在系统后台管理界面发出对数据库操作的数据流,另一部分是用户在应用前台使用系统时所产生的数据流。

3-2 博客管理系统数据流图

对每一个注册用户,可以细分为添加、修改、删除、浏览等操作,现以文章管理为例,其具体细节数据流图如图3-3所示:

3-3 文章管理详细数据流图

3.2.4 系统数据字典

网站中的数据元素:



4 系统数据库设计

“数据库设计是建立数据库及其应用系统的技术,是信息系统开发和建设中的核心技术”。数据库的模式是整个企业管理信息系统的基础,合理的数据库模式设计能够有效地存储数据,直接影响到系统功能的有效实现。

4.1 概念设计

将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计。E-R数据模型是常用的概念设计表示模型。根据需求分析,对系统规划设计出的实体有:用户实体、文章实体、文章类型实体、照片实体、好友实体、留言实体、评论实体,分析各个实体之间的关系得出系统的数据库设计E-R图如图4-1所示:

4-1 各个实体E-R关系图

4.2 数据表结构

开发系统之前,必须对系统所用到的数据进行大致的分类和具体的结构设计,既要做到清晰明了,又要能适应系统各项功能的调用,而不至于产生结构上的逻辑混乱,保证关键数据在意外情况下不会被破坏数据库是系统的重中之重。

数据库设计要遵循一些规则,一个好的数据库满足一些严格的约束和要求。尽量分离各实体对应的表,一个实体对应一个表,分析该实体有哪些属性,对应有些什么字段,以及各实体之间的联系。实体、属性与联系是进行概念设计时要考虑的三个元素,也是一个好的数据库设计的核心。

从实际出发,经过仔细地设计,得到各表的设计如下表所示:

4-1 用户表

字段名

类型

长度

主键

外键

可否为空

特殊操作

说明

user_id

INT

4

自增

用户ID

user_name

varchar

50

用户名

user_password

varchar

30

密码

user_sex

varchar

4

性别

user_email

varchar

100

邮箱

user_qq

varchar

30

QQ

4-2 文章表

字段名

类型

长度

主键

外键

可否为空

特殊操作

说明

article_id

INT

4

自增

文章ID

user_id

INT

4

用户名

Article_typeId

INT

4

类型

article_title

varchar

100

标题

article_content

varchar

4000

内容

article_sendTime

varchar

30

时间

article_create

varchar

100

来源

article_info

varchar

100

描述

4-3 文章类型表

字段名

类型

长度

主键

外键

可否为空

特殊操作

说明

type_id

INT

4

自增

类型ID

type_name

varchar

20

类型名

type_info

varchar

100

类型说明

4-4 好友表

字段名

类型

长度

主键

外键

可否为空

特殊操作

说明

friend_id

INT

4

自增

好友ID

user_id

INT

4

用户ID

friend_name

varchar

30

好友名

friend_sex

varchar

4

性别

friend_qq

varchar

30

QQ

friend_blog

varchar

100

好友博客

4-5 留言表

字段名

类型

长度

主键

外键

可否为空

特殊操作

说明

message_id

INT

4

自增

留言ID

user_id

INT

4

用户ID

message_title

varchar

30

标题

message_author

varchar

30

留言者

message_content

varchar

500

留言内容

message_time

varchar

30

留言时间

4-6 相册表

字段名

类型

长度

主键

外键

可否为空

特殊操作

说明

photo_id

INT

4

自增

相册ID

user_id

INT

4

用户ID

photo_name

varchar

30

相册名

photo_addr

varchar

100

相册地址

photo_info

varchar

100

描述

photo_time

varchar

30

时间

4-7 评论表

字段名

类型

长度

主键

外键

可否为空

特殊操作

说明

review_id

INT

4

自增

用户ID

reArticle_id

INT

4

文章ID

review_author

varchar

30

回复者

p

< class=' _15'>

review_content

varchar

500

回复内容

创建好的七个数据库表如下图:

4-3 文章表

4-2 用户表

4-4 文章类型表

4-5 好友表

4-6 留言表

4-7 相册表

4-8 评论表

4.3 数据表结构关系

通过数据库设计器可以建立数据库关系图,可以对表、索引、键、关系等进行创建、编辑、删除等。创建可视化的关系图,可以直观的显示数据库中各数据之间的关系。系统数据表整体关系图如图4-13所示:

4-9 系统数据表整体关系图

5 系统总体设计

5.1 系统的总体设计原则

根据系统的需求分析,博客管理系统是一个集网络、数据库于一体的综合系统,因此系统在总体设计时应遵循以下原则:

(1) 稳定性、实用性、良好的可扩充性和安全性,提供良好的人机界面,界面简洁,操作简单。

(2) 系统的功能设计完善,能够有效解决用户使用中出现的问题,满足各个方面的使用需要。

(3) 数据库结构设计合理,字段属性要准确,字段长度要满足实际需要。

(4) 系统流程合理,能够符合博客管理及使用的基本操作流程。

5.2系统功能设计

5.2.1 总体功能描述

本系统主要功能分为两部分,一部分为后台注册用户对博客内容的管理,一部分为前台网友对博客的访问。

(1) 用户管理博客

登陆、注册功能:网友注册成为博客用户,进入后台需要验证会员信息。

日志管理:对日志进行增、删、改、查。

日志类型管理:对日志类型进行增、删、改、查。

好友管理功能:对好友进行增、删、改、查,访问好友博客。

相册管理:上传图片到自己的相册,删除相册中的照片,查看上传的照片。

留言管理:用户可以对访问者给自己的留言查看和删除。

(2) 网友访问博客

日志查看功能:查看博主的日志,按照日志分类来查看,对日志发表评论。

相册查看功能:查看上传的图片。

留言板功能:给博主留言。

查看博主的好友:查看博主的好友。

5.2.2 功能模块设计

软件所实现的功能强弱是衡量一个软件的最根本的标准。通过对系统的全面分析并结合调研的情况,确定了本系统的功能模块图。

本系统划分为两个大的功能模块:前台(用户界面)和后台(博客管理)。前台和后台又分别划分为几个小的模块,如图5-2所示为博客系统的功能模块划分图:

5-1 系统模块



6 系统详细设计与实现

6.1 SSH构架的搭建及配置文件

(1) 创建一个WEB工程,命名为Blog

(2) 导入struts2的核心jar包,就是在WEB-INF下的lib文件夹中放入jar包文件:freemaker-2.3.8.jarognl-2.6.11.jarstruts2-core-2.0.14.jarxwork-2.0.7.jar struts2-spring-plugin-2.0.14.jar

(3) 加载spring,选中工程名,右击并选择【MyEclipse】选项下的【Add Spring Capabilities...】(或者在工具栏中选择【MyEclipse】下的【Add Spring Capabilities...】),在弹出的对话框中进行如下选择:Spring 2.5 AOP LibrariesSpring 2.5 Core LibrariesSpring 2.5 Persistence Core LibrariesSpring 2.5 Web LibrariesSpring 2.5 PersistenceJDBC Libraries

点击【Next】,点击Folder文本框后的【Browse】,在弹出对话框中选择spring配置文件存储位置为WEB-INF文件夹:

点击【OK】后,再点击【Finish】完成。至此,已经完成加载spring,在WEB-INF文件夹下已经生成了配置文件applicationContext.xml

(4) 加载Hibernate,选择【MyEclipse】下的【Add Hibernate Capabilities...】,在弹出对话框中进行如下所示操作:

全选 MyEclipse Libraries, 然后选择 Copy checked Library.......

点击【Next】后,选择Existing Spring configuration file单选框,在SessionFactory Id文本框中填入"sessionFactory",如下所示

选择 Existing Spring configuration file,选择前面的 applicationContext.xml

SessionFactory Id : sessionFactory

点击【Next】,进行如下所示操作:这里需要选择一个之前在 MyEclipse 中配置好的一个数据库链接

该操作中,只需在Bean Id文本框中输入一个Id名,作为数据库源的代用名,意义不大。然后在DB Driver下拉列表中,选择MyEclipse中创建好的数据库源xiaoqi,其他信息将自动填写。点击【Next】,在弹出对话框中去掉Create SessionFactory class?复选框,不创建该类,点击【Finish】完成(创建过程中,加载的jar包文件可能有重复,所以这个时候如果提示有某些jar包重复,问全部保存【Keep Exiting】,还是替换掉【Replace】,可以选择替换掉【Replace】)。

(5) 配置web.xml文件,其内容如下:

(6) 反向生成实体类文件src包下新建一个entity包,将前面数据源所示的数据库中的各个表反向生成Hibernate实体类文件。

(7) 创建数据操作文件src包下创建dao包。

(8) 创建Actionsrc包下新建一个包actions

(9) 创建jsp页面。

6.2 系统编码设计

6.2.1 编写持久对象层类

该层由若干实现类即普通的JAVA类(PO)组成,这些需要在相应的映射文件中配置,可以在数据访问层的实现类中通过Hibernate框架来访问持久对象层。

本系统共有七个数据库表,分别有七个实体类和它们映射。每个Java类又对应一个.hbm.xml映射文件,来将java类的实体变量与数据库的字段映射在一起。以文章表为例:

(1) Article.java文件:

package entity;

import java.io.Serializable;

public class Article implements Serializable{

private int articleId; // 文章的ID

private int articleTypeId; // 文章类型的ID

private int userId; // 注册用户的ID

private String articleTitle=""; // 文章标题

private String articleContent=""; // 文章内容

private String articleSendTime=""; // 发表文章的时间

private String articleCreate=""; // 文章的来源

private String articleInfo=""; // 文章的描述信息

// 每个属性的getter setter方法

public int getArticleId() {

return articleId;

}

public int getUserId() {

return userId;

}

public void setUserId(int userId) {

this.userId = userId;

}

public void setArticleId(int articleId) {

this.articleId = articleId;

}

public int getArticleTypeId() {

return articleTypeId;

}

public void setArticleTypeId(int articleTypeId) {

this.articleTypeId = articleTypeId;

}

public String getArticleTitle() {

return articleTitle;

}

public void setArticleTitle(String articleTitle) {

this.articleTitle = articleTitle;

}

public String getArticleContent() {

return articleContent;

}

public void setArticleContent(String articleContent) {

this.articleContent = articleContent;

}

public String getArticleSendTime() {

return articleSendTime;

}

public void setArticleSendTime(String articleSendTime) {

this.articleSendTime = articleSendTime;

}

public String getArticleCreate() {

return articleCreate;

}

public void setArticleCreate(String articleCreate) {

this.articleCreate = articleCreate;

}

public String getArticleInfo() {

return articleInfo;

}

public void setArticleInfo(String articleInfo) {

this.articleInfo = articleInfo;

}

}

(2) Article.hbm.xml文件:

6.2.2 编写数据访问层类

数据访问层类即DAO层的类,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。本节以与好友表交互为例:

FriendDao.java文件:

package dao;

import java.util.List;

import org.springframework.orm.hibernate3.HibernateTemplate;

import entity.Friend;

public class FriendDao extends DAOSupport {

public FriendDao(HibernateTemplate template) {

super(template);

}

//功能 修改好友信息

public boolean operationFriend(String operation, Friend single){

if(operation == null)

operation="";

if(operation.equals("add"))

template.save(single);

if(operation.equals("modify"))

template.update(single);

if(operation.equals("delete"))

template.delete(single);

return true;

}

//功能 查询所有好友

public List queryFriend(int id) {

String hql = "FROM Friend where userId=" + id + "ORDER BY friendName";

return template.find(hql);

}

//功能 根据ID 查询某个好友的详细信息

public Friend queryFriendSingle(int id) {

return (Friend)template.get(Friend.class, id);

}

}

6.2.3 编写业务逻辑层类

业务逻辑层即Service层,负责实现业务逻辑。业务逻辑层以DAO层为基础,通过对DAO组件的正面模式包装,完成系统所要求的业务逻辑。以好友表为例:

FriendService.java文件:

package services;

import java.util.List;

import dao.FriendDao;

import entity.Friend;

public class FriendService {

private FriendDao friendDao;

public FriendService(FriendDao friendDao) {

this.friendDao = friendDao;

}

// 添加好友

public boolean addFriend(Friend single) {

return friendDao.operationFriend("add", single);

}

// 删除好友

public boolean deleteFriend(Friend single) {

return friendDao.operationFriend("delete", single);

}

// 修改好友

public boolean updateFriend(Friend single) {

return friendDao.operationFriend("modify", single);

}

// 获取指定id的好友

public Friend getFriendInfo(int id) {

return friendDao.queryFriendSingle(id);

}

// 列出好友

public List queryFriendList(int id){

return friendDao.queryFriend(id);

}

}

6.2.4 编写WEB层类

该层主要包括JSP页面、MVC中的“C”Control),其中“C”就是Struts2中的Aciton类。在Action类中主要负责调用业务逻辑层的组件,并返回相应的结果(result)。

(1) Action类的编写

LoginAction.java文件:

package actions;

import services.UserService;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

import entity.User;

public class LoginAction extends ActionSupport {

private User user;

private UserService userService;

public User getUser() {

return user;

}

public void setUser(User user) {

this.user = user;

}

public UserService getUserService() {

return userService;

}

public void setUserService(UserService userService) {

this.userService = userService;

}

public String execute() throws Exception {

int id = this.userService.verifyUser(user);

if (id > 0) {

ActionContext.getContext().getSession().put("userID", id);

ActionContext.getContext().getSession().put("USER", user);

return SUCCESS;

} else {

return "input";

}

}

}

(2) sJsp页面的编写

JSP页面主要用来显示后台的信息,呈现给用户的界面。以后台文章显示为例:

添加文章的JSP页面Admin_ArticleAdd.jsp文件:

</span><span class='_24'>博客后台管理</span><span class='_24'>-</span><span class='_24'>发表文章</span><span class='_24'>

bgcolor="#FFFFFF" style="word-break: break-all">

<%@ include file="../view/AdminTop.jsp" %>

【发表文章】
文章类别:

文章标题:

文章来源:

文章描述:

文章内容:

<%@ include file="../view/AdminEnd.jsp" %>

6.3 系统主要功能模块详述

6.3.1 后台:博客管理模块

(1) 网民可以注册为博客会员,拥有自己的博客,用户在登录时系统具有输入有效性检测功能,如果用户名和密码任何一项为空,则提示用户,实现该功能使用了过滤器:

LoginAction-validation.xml文件

true

请输入用户名!

true

请输入密码!

如图6-1是登陆模块的界面显示:

6-1 登陆模块

(2) 日志管理模块,开博的网民可以在博客系统上进行撰写日志、查看日志、删除日志、修改日志等操作。

1.如图6-2为查看日志的界面显示

6-2 查看日志

2.删除日志时,系统要弹出确认对话框,确认用户是否确定要删除文章,【确定】则文章被删除,同时刷新文章列表的显示,【取消】停在当前页面,不做任何改变。

如图6-3为删除日志的界面显示

6-3 删除日志

3.日志列表按时间顺序显示博主的文章,同时还可以查看某一类型的全部文章,实现这功能的方法是在DAO层查询数据时,按文章类型进行条件查询,hql查询语句如下:

hql = "FROM Article where articleTypeId=" + typeId + " and userId="+userId+"order by articleSendTime DESC";

如图6-4日志列表显示界面:

6-4 日志列表

4.如图6-5修改日志界面显示:

6-5 修改日志

(3) 日志类别管理

日志类别管理模块基本实现了对日志类别的增、删、改、查功能,实现方法类似与文章管理模块。

如图6-6日志类别列表显示:

6-6为日志类别列表

(4) 相册管理模块

相册管理模块博主可以上传照片、查看照片、删除照片,其中上传照片使用了Struts2标签,同时在相应的action类中进行上传处理,PhotoAction.java中关键代码如下:

// 设置两个变量分别接受上传过来的文件的属性

private File picture; //上传的文件

private String pictureFileName; //文件名称

// 由于上传到服务器上的图片文件为临时文件,所以要将临时文件保存到服务器上的指定文件夹中,以便读取。

private void upLoad() {

String parent = ServletActionContext.

getServletContext().getRealPath("upload");

String path = parent + "\\" + pictureFileName;

photo.setPhotoAddr(path); // 将上传的路径存储在数据库中

File saved = new File(parent, pictureFileName);

InputStream ins = null;

OutputStream ous = null;

try {saved.getParentFile().mkdirs();

ins = new FileInputStream(picture);

ous = new FileOutputStream(saved);

byte[] b = new byte[1024];

int len = 0;

while ((len = ins.read(b)) != -1) {

ous.write(b, 0, len); }

} catch (Exception e) {

e.printStackTrace();

} finally {

if(ous != null)

try {

ous.close();

} catch (IOException e) {

e.printStackTrace();

}

if(ins != null)

try {

ins.close();

} catch (IOException e) {

e.printStackTrace();

} } }

// 上传照片

public String uploadPhoto() {

this.upLoad();

Date date = new Date(); // 上传时间

String str_date = new String(new SimpleDateFormat

("yyyy-MM-dd.HH:mm:ss").format(date));

photo.setPhotoTime(str_date);

photo.setPhotoName(pictureFileName);

int user = (Integer)ActionContext.getContext()

.getSession().get("userID");

photo.setUserId(user);

if(photoService.uploadPhoto(photo)) {

return SUCCESS;

} else {

return "fail"; } }

如图6-7上传相片的界面显示

6-7为上传相片

(5) 好友管理模块

好友管理模块同样实现了对好友的增、删、改、查功能,实现方法和文章模块类似,在此不多做说明。

如图6-8好友列表的界面显示

6-8为好友列表

六.留言管理模块

留言管理模块实现了对好友的删、查功能,实现方法和文章模块类似,在此不多做说明。

如图6-9为留言列表的界面显示

6-9 留言列表

6.3.2 前台:用户界面模块

该模块是针对所有网民设计的,所有的注册和非注册用户均可以浏览博主的博客,拥有查看博文、查看相册、留言、评论、查看好友等权限。

(1) 博文欣赏

在数据库中取出对应用户的文章,并在前台显示。

1. 如图6-10为浏览博文界面显示:

6-10 博文欣赏

2. 6-11查看博文界面显示

6-11 查看博文界面

3. 6-12给博文添加评论界面显示

6-12 评论日志

(2) 相册

1. 如图6-13浏览相册界面显示

6-13 浏览相册

2. 如图6-14查看相片界面显示

6-14 查看相片

(3) 如图6-15为查看博主好友界面

6-15 查看博主好友

(4) 如图6-16留言板界面显示:

6-8 留言板



总结与展望

7.1 博客系统的主要特点

本系统综合运用JSP、数据库等技术,详细阐述了基于SSH构架的博客系统的分析与实现过程,采用了SSH构架设计,从职责上分为三层:表示层、业务逻辑层、数据持久层。其中使用Struts2作为系统的整体基础架构,负责MVC的分离,在Struts2框架的模型部分,利用Hibernate框架对持久层提供支持,业务层用Spring支持。

主要特点有:

(1) 利用SSH构架的Struts2的组件实现了图片的快速上传功能,使得用户对相册的管理更加的快捷方便。

(2) 用户可以根据文章所属的类别查看同一类别下的所有文章。

(3) 链接好友的博客,点击即可以进入好友的博客,使得社区的互动性更强、交流更方便。

7.2 系统的不足之处

本系统在整体上基本实现了博客的功能需求,但是由于博客系统设计的方面比较广,市面上成熟的博客系统也很多,并且由于知识和时间的限制,系统仍存在着局限和不足之处,有待于进一步的研究和改进。系统设计中的不足主要表现在以下几个方面:

(1) 由于对页面布局知识的局限,系统的界面相对不够专业,美观度有待提高。

(2) 在编写的过程中,前期的代码设计不够完善,虽然实现了相同的效果,但代码量相对多了许多,不够简洁明了

(3) 由于时间的限制,后期的测试相对粗糙,可能会存在不同程度的BUG,在以后的设计中要进行相应的改进和修正。

7.3 前景展望

全球化的过程,对于互联网就是一个无国界的传播过程。博客就是适应了这种传播的需要而产生。每一个人,都可以在全球化的过程中建构一个自由发布个性化信息平台,这就是互联网给人们带来的革命性变革力量。

博客的发展是一个必然的过程,全球化的传播,也是一个能够给人们带来更多信息的社会。互动的网络社会突破了地域之间人们的阻碍,它给人们带来了更多的机会和把握未来的机遇。这个开放的世界更加注重个性化的人们,追求多样文化精神创造性,也将人们的注意力吸引到全球化的背景中来。

所以说研究与开发出一套完整的博客系统是未来网络交流和互动更加便捷的一个必然趋势。



本论文从立题到论文撰写整个过程都是在我的指导老师的悉心指导下完成的,老师在传授我知识的同时,更注重培养我解决问题的思路和方法及创新能力,为我今后学习和工作打下了坚实的基础并开阔了我的视野,渊博的知识、严谨的治学态度、忘我的工作精神以及对新知识不懈追求的精神,令我们佩服,使我们受益匪浅.我将最诚挚的谢意奉献给我的导师。

同时,我还要感谢我实习单位开发组的所有同事,在他们的帮助和不厌烦的讲解下,我顺利的完成了我的毕业论文,学到了很多的实践动手编码的能力。

其次,我还要感谢我大学四年的所有任课老师,是他们的精心教诲与辛勤劳动,使我能顺利完成大学四年的的学业。

另外,我要感谢我的同班同学,他们给予我很多的关心和帮助,他们中间不少人给我学习和生活上带来了很多的乐趣。

最后,我要特别感谢我的父母,在我漫长的求学生涯中,他们的无私关爱、鼓励和支持,是我不断前进的力量源泉,致此十几年的寒窗苦读即将结束之时,谨向他们致以衷心的感谢!



参考文献

[1] 俞传正.基于博客的个人知识管理平台研究[D].天津:天津师范大学,2006

[2] 陈明.BlogWiki在协作学习中的应用研究[D].武汉:华中师范大学,2006

[3] 郭华伟.基于内容聚合BLOG学习平台的辅助教学研究与实践[D].北京:首都师范大学,2006

[4] 柳永坡 刘雪梅 赵长海.JSP应用开发技术[M].北京:人民邮电出版社,200530-32

[5] 王夕宁.王晓平.JSP通用模块及典型系统开发实例导航[M].北京:人民邮电出版社,2006: 288-296

[6] 陈刚.Eclipse从入门到精通[M].北京:清华大学出版社, 2005416-417.

[7] (美)格罗夫 著.章小莉 等译. SQL完全手册(第二版)[M].北京:电子工业出版社.200612-14

[8] 高洪岩至简SSH:精通Java Web实用开发技术(Struts+Spring+Hibernate.北京:电子工业出版社,200911-18

[9] 李刚.整合STRUTS+HIBERNATE+SPRING应用开发详解.北京:清华大学出版社,200711-23

[10] 徐明华.Java Web整合开发与项目实战——JSPAjaxStrutsHibernateSpring.人民邮电出版社,20092-9

[11] Roger S. PressmanSoftware Engineering A Practitioners Approach,5th ed(影印版)北京:清华大学出版社,2001

《博客系统的设计与实现(完整).doc》
将本文的Word文档下载,方便收藏和打印
推荐:
下载文档
热门推荐
相关推荐