精通WEB2.0之第9章Blog.ppt
第9章 Blog l随着Blog(博客)的快速发展,Blog已经成为朋友、家庭之 间越来越盛行的沟通工具,是当今网络不可缺少的一部分。 同时,Blog也逐渐被应用在企业、公司或集团内部的网络( Intranet)中。本章将介绍如何创建一个Blog系统(或网络 应用程序)。 l用户可以在该系统中创建属于自己的Blog空间,从而发表自 己的文章和链接,以及文章和链接的评论等。Blog系统的前 台主页面的效果,后台主页面效果,本章系统(网络应用程 序)的名称为Blog。 9.1 什么是Blog l“博客”(Blog或Weblog)的全名为Web Log(网络日志), 后来缩写为Blog。起初,它是一种十分简易的傻瓜化个人信 息发布方式,使得任何人都可以创建个人主页,并且可以发 表和更新自己的文章和图片,或其他信息。如果把论坛(BBS )比喻为开放的广场,那么博客就是个人开放的私人房间。 9.1.1 Blog概述 l博客(Blogger)就是写Blog的人,即使用特定的软件,在网 络上出版、发表和张贴个人文章的人。简单地说,博客是一 类习惯于在网上写日记的人。Blog就是一种表达个人思想、 网络链接、内容,按照时间顺序排列,并且不断更新的出版 方式。Blog是继E-mail、BBS、ICQ之后出现的第4种网络交流 方式。它是网络时代的个人“读者文摘”。它是以超级链接 为武器的网络日记。它是代表着新的生活方式和新的工作方 式,更代表着新的学习方式。 9.1.2 Blog发展历史 lBlog经过10多年的发展,已经发展成为网络不可缺少的一部 分。下面根据时间对它的发展过程中一些重要纪事作简单介 绍。 l1993年6月,最古老的Blog原型NCSA的“What s New Page”网页( http//archive.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs /whats-new.html),该网页主要是罗列网络上新兴的网站索 引。该网页起始于1993年6月,一直更新到1996年6月。 9.2 总体功能设计和数据库设计 l本小节将介绍Blog系统的总体功能设计和数据库设计,以及 数据库中各个表之间的关系设计。 9.2.1 总体功能设计 lBlog系统实现的主要功能如下 l1.用户和角色管理功能 l2.文章分类管理功能 l3.文章发布及其管理功能 l4.链接收藏及其管理功能 l5.Blog前台功能 9.2.2 表设计 lBlog系统主要包括用户、角色、文章分类、文章、文章的评 论、文章的访问来源、链接地址,以及Blog系统前台的配置 参数等数据。在此,笔者共创建了9个表,具体说明如下。 l1.角色表Role 2.用户表User 3.分类表BlogCatalog 4.文章表BlogArticle 5.链接表BlogUrl 6.访问来源表 BlogArticleSource 7.文章评论表BlogComment 8.皮肤 表BlogSkin 9.收藏表BlogFavorite 9.2.3 表关系设计 lBlog系统的数据库比较简单,各个表之间的关系,其中,文 章表BlogArticle和链接表BlogUrl分别引用分类表 BlogCatalog的ID字段作为外键;皮肤表BlogSkin引用用户表 User的ID字段作为外键;访问来源表BlogArticleSource引用 文章表BlogArticle的ID字段作为外键;文章评论表 BlogComment分别引用用户表User、文章表BlogArticle的ID 字段作为外键。 9.3 应用程序Blog l本小节主要介绍应用程序Blog的组成,及其通用模块的设计 。其中,该应用程序由Web窗体页、类文件、主题文件、资源 文件等组成。通用模块包括一个名称为“模块标题”的用户 控件ModuleTitle.ascx。它存放在UserControl目录下。 9.3.1 应用程序Blog的组成 l应用程序Blog包含Admin、App_Code、App_Themes、Bin、 Face、Index、Portal、UserControl目录,以及页面 Default.aspx、配置文件Web.Config、全局文件Global.asax 等。展开Index和Portal目录,在【解决方案资源管理器】面 板中查看应用程序Blog,它的组成如图9.4和图9.5所示。 9.3.2 系统配置文件Web.Config l应用程序Blog的配置文件Web.Config放置在其的根目录下。 笔者在该文件中配置了访问数据库Web2ASPNET2DB的链接字符 串“data sourcelocalhost;useridsa;pwd123456; databaseWeb2ASPNET2DB”;同时还配置了应用程序Blog的 验证方式为“Windows”。 9.3.3 添加应用程序的引用 l笔者向应用程序Blog添加了3个引用文件(文件的后缀名为 .dll)。它们具体为 lWeb2ASPNET2.CommonOperation.dll; lWeb2ASPNET2.OperateSqlServer.dll; lWeb2ASPNET2.UserCommonOperation.dll。 9.3.4 主页Default.aspx l应用程序Blog的主页Default.aspx特别简单。该页面在 Page_Loadobject sender, EventArgs e事件中重定向到 Blog应用程序的前台首页Index.aspx(其中,该页面放置在 Index目录下)。程序代码如下所示。 lprotected void Page_Loadobject sender,EventArgs e l{ lResponse.Redirect“/Portal/Index.aspx“; ///Blog应 用程序的前台首页 l} 9.3.5 通用模块设计 l该应用程序中的通用模块和应用程序RSS的通用模块相同,它 们的具体实现请参见8.3.5小节。 9.3.6 应用程序初始化 l应用程序Blog在全局文件Global.asax中初始化系统。其中, 初始化操作由类WebBlog实现。它定义了用于系统初始化的静 态方法public static void SystemInitHttpContext context和两个属性BoardFilePath和Face。其中, BoardFilePath属性保存Blog前台配置文件的访问地址;Face 属性保存系统当前皮肤的名称。 9.3.7 数据访问层设计 l在应用程序Blog的数据访问层中,笔者定义了操作与Blog内 容(如文章、文章分类、回复、链接等)的类Blog。类Blog 定义的操作或方法可以分为以下4种类型 l与文章相关的操作。 l与链接相关的操作。 l与评论和访问来源相关的操作。 l与Blog前台皮肤相关的操作。 9.4 关键技术详解 l本小节主要介绍Blog系统中的关键技术。这些技术包括Blog 前台实现原理、Blog前台首页、Blog前台显示文章页面、动 态调整Blog前台皮肤、收集文章访问来源、读取Blog前台的 配置文件、评论文章等。 9.4.1 Blog前台组成 l应用程序Blog的前台主要由两个页面和7个用户控件组成。其 中,页面为Index.aspx和ShowArticle.aspx。用户控件为 AddCommentUC.ascx、ArticleUC.ascx、CalendarUC.ascx、 CatalogUC.ascx、SetSkinUC.ascx、ShowArticleUC.ascx和 ShowCommentUC.ascx。上述页面和用户控件都放置在Index文 件夹中, 9.4.2 文章分类用户控件 l文章分类用户控件CatalogUC.ascx显示文章的分类信息。 CatalogUC.ascx.cs文件为它的代码隐藏文件。该用户控件添 加了一个GridView控件,其ID属性的值为gvCatalog。该控件 显示系统中的文章分类信息。用户控件CatalogUC.ascx的设 计界面, 9.4.3 日历用户控件 l日历用户控件CalendarUC.ascx显示日历信息。 CalendarUC.ascx.cs文件为它的代码隐藏文件。该用户控件 添加了一个日历控件,其ID属性的值为cDate。用户控件 CalendarUC.ascx的设计界面, 9.4.4 文章列表用户控件 l文章列表用户控件ArticleUC.ascx以列表形式显示文章的信 息。ArticleUC.ascx.cs文件为它的代码隐藏文件。该用户控 件添加了一个GridView控件,其ID属性的值为gvArticle。该 控件以列表形式显示文章的信息,包括文章的标题、摘要、 评论数量、发布时间等。用户控件ArticleUC.ascx的设计界 面, 9.4.5 显示文章用户控件 l显示文章用户控件ShowArticleUC.ascx显示文章的具体信息 ,如文章的标题、评论次数、发表时间、发表用户等。 ShowArticleUC.ascx.cs文件为它的代码隐藏文件。该控件未 添加任何服务器端控件,它的设计界面, 9.4.6 显示评论用户控件 l显示评论用户控件ShowCommentUC.ascx显示文章的评论。 ShowCommentUC.ascx.cs文件为它的代码隐藏文件。该用户控 件添加一个GridView控件,ID属性的值为gvComment。该控件 显示当前文章的评论。用户控件ShowCommentUC.ascx的设计 界面, 9.4.7 评论用户控件 l评论用户控件AddCommentUC.ascx可以添加文章的评论。 AddCommentUC.ascx.cs文件为它的代码隐藏文件。该用户控 件添加3个TextBox控件、一个Button控件和两个非空验证控 件。它们的ID属性的值分别为tbName、tbUserName、tbBody 、btnAdd、rfBody和rfName。 ltbName和tbBody控件分别用来输入评论的标题和内容。 tbUserName控件用来显示用户的名称。btnAdd控件实现添加 评论的功能。rfName和rfBody控件分别对用户输入评论的标 题和内容进行非空验证。用户控件AddCommentUC.ascx的设计 界面 9.4.8 Blog前台页面的实现原理 lBlog前台页面的均由两部分组成左版面和右版面。每一个 版面包括其基本属性和模块列表, 9.4.9 Blog前台页面的配置文件 lBlog前台页面的配置文件为一个XML文件,名称为 Default.xml。它存放在Face文件夹下。该配置文件包括 、(为皮肤的名称,由具体皮肤的名称确 定)、(页面的版面)、(版面的模块) 、(具体模块)等5个级别的元素。 9.4.10 读取Blog前台配置文件 l读取Blog前台配置文件的功能由类OperateXmlFile实现。它 定义了3个静态方法,具体描述如下 l(1)public static ArrayList GetFaces,获取系统已经 定义的皮肤。 l(2)public static TableCellBase[]GetIndexPagestring face,获取Blog前台的首页的配置。 l(3)public static TableCellBase[]GetShowArticlePagestring face,获取 Blog前台的显示文章页面的配置。 9.4.11 动态加载Blog前台的首页 lBlog前台的首页由页面Index.aspx实现,它的代码隐藏文件 为Index.aspx.cs。该页面将显示文章分类、收藏日历、调整 皮肤下拉选择框、文章列表等内容。页面Index.aspx的最终 效果, 9.4.12 动态加载Blog前台的显示文章页面 lBlog前台的显示文章页面由页面ShowArticle.aspx实现, ShowArticle.aspx.cs文件为它的代码隐藏文件。该页面将显 示文章分类、收藏日历、文章具体信息、文章评论和提供评 论的内容输入框等。页面ShowArticle.aspx的最终效果, 9.4.13 动态调整Blog平台皮肤 l动态调整Blog平台皮肤功能由用户控件SetSkin.ascx实现, SetSkin.ascx.cs文件为它的代码隐藏文件。该用户控件添加 了一个DropDownList控件,ID属性的值为ddlSkin。它显示系 统中已经存在的皮肤。 l注意ddlSkin控件定义了SelectedIndexChanged事件,并且 设置AutoPostBack属性的值为true。若当用户改变ddlSkin控 件的选择项时,将触发SelectedIndexChanged事件,并提交 到服务器。 9.4.14 收集文章访问来源 l收集文章访问来源功能由函数CollectArticleSourceint articleID实现。它将用户的请求地址、IP地址等信息保存 到数据库。函数CollectArticleSourceint articleID的程 序代码如下所示。 9.5 用户登录和管理 l维护用户信息包括注册新用户、修改用户信息、修改用户密 码和用户管理等功能。实现这些功能的页面(如 AddUser.aspx、UpdateUser.aspx等)都保存在文件夹 “Admin”下。用户登录功能验证访问网站的用户是否为合法 用户,实现该功能的页面保存在文件夹“Portal”下。 9.6 文章分类及其管理 l本小节主要介绍应用程序Blog中与文章分类相关的功能,如 添加新的文章分类、文章分类管理和修改文章分类等。在此 ,笔者定义了类Catalog,它实现上述功能中的与数据库相关 的操作。类Catalog定义了5个与文章分类相关的数据访问层 的操作。这5个方法的具体说明如下 lpublic SqlDataReader GetCatalogs,获取所有文章分类 。 lpublic SqlDataReader GetSingleCatalogint catalogID ,获取单个文章分类。 9.6.1 添加新分类 l添加新分类由页面AddCatalog.aspx实现,它的代码隐藏文件 为AddCatalog.aspx.cs。该页面实现功能如下。 l输入新分类的名称。 l添加新分类,并把新分类的信息提交到数据库中。 l返回到分类管理页面CatalogManage.aspx。 9.6.2 修改文章分类 l修改分类由页面UpdateCatalog.aspx实现,它的代码隐藏文 件为UpdateCatalog.aspx.cs。该页面实现功能如下。 l修改分类的名称和公开程度。 l修改分类,并把修改后的分类信息提交到数据库中。 l返回到分类管理页面CatalogManage.aspx。 9.6.3 文章分类管理 l分类管理由页面CatalogManage.aspx实现,它的代码隐藏文 件为CatalogManage.aspx.cs。该页面实现功能如下。 l以列表形式显示分类的信息。 l提供重定向到添加和修改分类页面的按钮。 l提供删除分类的功能。 9.7 文章发布及其管理 l本小节主要介绍应用程序Blog中与文章相关的功能,如添加 新的文章、修改文章、文章管理、关联文章访问来源和评论 等。 9.7.1 添加新文章 l添加新文章由页面AddArticle.aspx实现,它的代码隐藏文件 为AddArticle.aspx.cs。该页面实现功能如下。 l输入新文章的标题和内容。 l设置新文章的所属分类,以及文章的公开程度。 l添加新文章,并把新文章的信息提交到数据库中。 l返回到文章管理页面ArticleManage.aspx。 9.7.2 修改文章 l修改文章由页面UpdateArticle.aspx实现,它的代码隐藏文 件为UpdateArticle.aspx.cs。该页面实现下面4个功能。 l编辑文章的标题和内容。 l修改文章的公开程度。 l修改文章,并把修改后的文章信息提交到数据库中。 l返回到文章管理页面ArticleManage.aspx。 9.7.3 文章管理 l文章管理由页面ArticleManage.aspx实现,它的代码隐藏文 件为ArticleManage.aspx.cs。该页面实现功能如下。 l以列表形式显示文章的信息。 l提供重定向到管理文章访问来源、管理文章评论、修改文章 等页面的按钮。 l提供删除文章的功能。 l提供重定向到添加新文章的页面的按钮。 9.7.4 管理文章访问来源 l访问来源管理由页面ArticleSourceManage.aspx实现, ArticleSourceManage.aspx.cs文件为它的代码隐藏文件。该 页面实现功能如下。 l以列表形式显示文章的访问来源信息。 l提供删除访问来源的功能。 l页面ArticleSourceManage.aspx以列表形式显示文章的访问 来源信息,如访问来源的URL、IP地址等。 9.7.5 管理文章评论 l文章评论管理由页面ArticleCommentManage.aspx实现 ArticleCommentManage.aspx.cs文件为它的代码隐藏文件。 该页面实现功能如下。 l以列表形式显示文章评论的信息。 l提供删除文章评论的功能。 9.8 链接及其管理 l本小节主要介绍应用程序Blog中与链接相关的功能,如添加 新的链接、链接管理和修改链接地址等。 9.8.1 链接管理 l链接管理由页面UrlManage.aspx实现,它的代码隐藏文件为 UrlManage.aspx.cs。该页面实现功能如下。 l以列表形式显示链接的信息。 l提供重定向到添加和修改链接页面的按钮。 l提供删除链接的功能。 9.8.2 添加新链接 l添加链接由页面AddUrl.aspx实现,它的代码隐藏文件为 AddUrl.aspx.cs。该页面实现功能如下。 l输入新链接的名称和地址。 l添加新链接,并把新链接的信息提交到数据库中。 l返回到链接管理页面UrlManage.aspx。 9.8.3 修改链接地址 l修改链接地址由页面UpdateUrl.aspx实现,它的代码隐藏文 件为UpdateUrl.aspx.cs。该页面实现功能如下。 l编辑链接的名称和地址。 l修改链接,并把修改后的链接信息提交到数据库中。 l返回到链接管理页面UrlManage.aspx。