聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> 个人博客系统的设计与实现

个人博客系统的设计与实现

时间:2017-12-24 22:04:05    下载该word文档

个人博客

随着Internet的广泛应用,动态网页技术也应运而生。本文介绍了应用ASP动态网页技术开发博客系统的设计与实现。该系统以ASP.NET为开发技术,使用C#为开发语言,实现Blog网站的动态管理,使得对Blog信息的管理更加及时、高效,提高了工作效率。

本文对博客系统进行整体分析,明确了系统的可行性和用户需求;根据模块化原理,规划设计了系统功能模块;在数据库设计部分,详细说明了系统数据库的结构和数据库的完整性、安全性措施;程序设计则采用面向对象的程序设计思想,提出系统的程序设计思路,对前台与后台功能的程序实现进行了详细论述;系统测试部分,具体分析测试过程中出现的主要问题,并提出了解决方案,实现系统功能。

关键词 BlogASP.NETC#SQLserver

Personal Blog

Abstract

With the extensive application of the Internet, dynamic web technology has emerged. This text describes the application of ASP dynamic web technology and development the blog system.

This system take ASP.NET as the development technology, uses C# is the development language, realizes the Blog website dynamic management, causes to be even more prompt to the Blog information management, highly effective, raised the working efficiency. In this textit analysis the blog system by feasibility and the demand of the user. Under the modular theory, planning and design of the system functional modules; In the database design, a detailed description of the database structure and database integrity, security measures; Programming is used object-oriented programming design, system design ideas, background for the future and function of the program in detail; System testing, Analysis of the specific course of testing the key issues and proposed solutions to achieve system function.

Key word BlogASP.NET C#SQLserver


第一章 绪论

1.1 引言

Blog,是Weblog的简称。Weblog,其实是WebLog的组合词。Web,指World Wide Web,当然是指互连网了;Log的原义则是“航海日志”,后指任何类型的流水记录。合在一起来理解,Weblog就是在网络上的一种流水记录形式或者简称“网络日志”。BloggerWeblogger,是指习惯于日常记录并使用Weblog工具的人。虽然在大陆早些时候或者台湾等地,对此概念的译名不尽相同(有的称为“网志”,有的称之为“网录”等等),但目前已基本统一到“博客”一词上来。该词最早是在200288日由著名的网络评论家王俊秀和方兴东共同撰文提出来的。博客也好,网志也罢,仅仅是一种名称而已,它的本义还是逃不过Weblog的范围。只是,通常我们所说的“博客”,既可用作名词Bloggerweblogger——指具有博客行为的一类人;也可以作动词用(相当于英文中的Weblogblog),指博客采取的具有博客行为反映、是第三方可以用视觉感受到的行为,即博客们所撰写的Blog。因此,“他/她是一位博客,他/她天天在博客”及“博客博什么客?”在中文语法与逻辑上都是正确。只是不同场合的用法不同罢了。本系统由福州远行者信息技术有限公司开发,更多内容请参阅公司官网。

Blog究竟是什么?说了半天,其实一个Blog就是一个网页,它通常是由简短且经常更新的帖子(Post)所构成,这些张贴的文章都按照年份和日期倒序排列。Blog的内容和目的有很大的不同,Blog的内容和目的有很大的不同,从对其他网站的超级链接和评论,有关公司、个人、构想的新闻到日记、照片、诗歌、散文,甚至科幻小说的发表或张贴都有。许多Blogs记录着blog个人所见、所闻、所想,还有一些Blogs则是一群人基于某个特定主题或共同利益领域的集体创作。撰写这些WeblogBlog的人就叫做BloggerBlog writer

博客存在的方式,一般分为三种类型:一是托管博客,无须自己注册域名、租用空间和编制网页,博客们只要去免费注册申请即可拥有自己的博客空间,是最“多快好省”的方式。如英文的www.blogger.comwordpress.com及多种语言的博客室(blogates.com)等都提供这样的服务;二是自建独立网站的博客,有自己的域名、空间和页面风格,需要一定的条件。如方兴东建立的“博客中国”站(www.blogchina.com);三是附属博客,将自己的博客作为某一个网站的一部分(如一个栏目、一个频道或者一个地址)。这三类之间可以演变,甚至可以兼得,一人拥有多种博客网站。

目前进行网站开发的语言很多,如ASPPHPJSPASP.NET等。究竟应该选择什么语言来开发一个BLOG网站呢,对于一个中小型的网站来说,ASP无疑是最好的选择,利用简单的HTML代码与脚本融合而成的ASP技术可以开发强大的Web应用程序。ASPActive Sever Pages)是Microsoft推出的一种服务器端脚本环境,ASP内嵌于IIS中,让用户可以轻松的结合HTML Web页面、脚本和ActiveX组件建立或执行动态的、交互的Web服务器应用程序。ASP并不单指某一种编程语言,而是一门把HTML代码与VBScriptJavaScript等脚本语言融合在一起的技术,ASP技术的诞生,应该说是一项成功的技术,它开创了非专业人员开发高水平网站的历史。

1.2 课题研究的意义

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

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

如果说博客网站是一个舞台,那么所有的博客都是其中的舞者,把自己有价值的真实的一面展示在网络世界中,相互交流沟通; 如果博客仅仅为了写日志,那么博客是一面镜子,镜子中展现的是真实的自己;如果博客是一个自由媒体,可以把自身感觉有价值的信息通过博客这个工具发布,与网友共享

随着Blog人数的增加,Blog作为一种新的生活方式、新的工作方式和新的学习方式已经被越来越多的人所接受,并且在改变传统的网络和社会结构。它使交流和沟通更有明确的选择和方向性;单一的思想和群体的智慧结合变得更加有效;个人出版变成人人都可以实现的梦想。Blog正在影响和改变着我们的生活。

Blog是以网络作为载体,简易迅速便捷地发布自己的心得,及时有效轻松地与他人进行交流,再集丰富多彩的个性化展示于一体的综合性平台。展示丰富的个性化,对Blog功能的要求自然更高,新一代具有更多、更新、更全功能的Blog急需走进舞台。系统加入聊天功能可以更加方便大家的交流。

博客有以下用途:

1)促进学习。写blog可以促进学习,想写出文章来,自然不能是泛泛的了解就可以的,要理解了才能写得出来的。这就促进了对某些领域的不断学习和思考。

2)记录收获。blog中,常常是记录下来都是瞬间的灵感,对事物的感悟,经过多日思考和实践的结果,对某个问题的解决方案等等,这些都是财富,要记录下来。

3)反映成长。写blog,可以反映出人的思考过程,而不仅仅是思考结果。对一个问题或领域,从不了解到了解,从了解到熟悉,从熟悉到精通。这纪录了一个人思考和解决问题的成长过程。很久之后,看到自己之前的文章,你将会觉得自己进步了。

4)结交朋友。写了blog,自然会有许多志趣相同的朋友来阅读,这可以认识许多朋友。大家有共同的兴趣爱好,自然谈得来。

5)共享知识。blog给大家看,大家的blog也给你看。这个问题我解决了,那个问题他解决了。大家互通有无,建立起一个社群。

6)交流看法。回复的人对blog的观点或赞同,或反对,大家一起讨论,听听别人的思想,可以促进双方的共同进步。

7)包装自己。看到一篇篇用心写出的文章,自然是对自己知识技能的最好宣传。

1.3 系统概述

一个博客其实就是由一序列网页组成的,它通常是由简短且经常更新的帖子所构成的,这些张贴的文章都按照年份和日期倒序列排列,能按照日期和主题检索。博客的内容和目的有很大的不同,有到其他网站的超级链接;有对其他网站的评论;有个人的日记,日常所思所想;有个人照片、诗歌、散文,甚至科幻小说的发表。正是由于博客能收容这些不拘于个人思想的表达,使博客这种交流和表达方式日益红火起来,博客秉承了个人网站的自由精神,也开拓了激发创造的新模式,能张扬人的个性,从这个意义上说,博客将会变得越来越普及,越来越为更多的人接受。

本系统主要完成以下功能。

1.客户界面部分

我的文章

给我留言

用户注册/登录

首页:文章分类,最新评论,最新文章,最新加入

2.管理界面部分

添加分类

分类管理

文章管理

留言管理

基本设置

第二章 相关技术介绍

2.1 ASP.NET技术概论

本系统采用ASP.NET开发技术进行开发。ASP.NET不仅仅是ASP的一个新版本,更是Web应用程序编程方面的一个全新的概念和方法。ASP.NET中的新功能并不是对ASP的改进,设计它的初衷是为用户入境提供最佳的应用程序架构。它相比于ASP有着以下几个方面的优点:

1)多语言

ASP曾在脚本引擎方面受到了限制,特别是VBScriptJscript。而ASP.NET则支持多种语言,默认情况下为Visual Basic.NETC#Jscript.NET,另外还支持一些第三方语言。

2)服务器处理

ASP在服务器处理上不管页面的内容是纯HTML还是ASP生成的HTML,它都是按照实现,形成所谓3-tier页面顺序显示的。因此逻辑代码依赖于它在页面中的位置,并且无法将HTML控件作为目标,除非将它们作为流的一部分进行显示。而ASP.NET就解决了这个问题,方法是为控件引入一个声明的基于服务器的模型,因为控件在服务器上有,可以在服务器上编程,也可以是客户端驱动的事件。

3Web Form控件

将现有的HTML控件转换为服务器端的控件是比较容易的,但是也存在一些不方便,例如比较难于区分HTML控件和服务器端的控件。于是Microsoft公司就创建了一组专门的服务器控件,它们都用asp:前缀标识。

4)代码与内容分离

一个网站的设计与开发往往由不同的人来实现的,而ASP中就是存在着这样一个问题,代码(ASP脚本)和内容(HTML)混合在一起。这样就使得同时进行设计和开发变得很困难。而ASP.NET则采用了代码内联和后台编码两种方法实现了代码与内容的分离。

2.2 ASP.NET工作原理

在多数场合下,能够将ASP.NET版面容易地当做等闲的HTML版面,版面包括符号有特异处理措施的一些代码段。当安装.NET时,本地的IIS Web服务器积极搭配成查找伸展名为.aspx的文件,且用ASP.NET模块(名为aspnet_isapi.dll的文件)处理这些文件。

从技巧上讲,ASP.NET模块分析ASPX文件的内容,并将文件内容分解成独自的号召以发生代码的大局构造。告终此工作后,ASP.NET模块将各号召放置到预定义的类定义中(无须要放在同时,也无须要按编写次序放置)。然后利用这个类定义一个特异的ASP.NET对象Page。该对象要告终的任务之一即便生成HTML流,这些HTML流能够归来到IIS,再从IIS归来到客户。简言之,在用户哀求IIS服务器供给一个版面时,IIS服务器就依据版面上的文本、HTML和代码(这对我们来说是最重要的)发生该版面。

2.3 数据库选择

数据库(Database),是按照数据结构来组织、存储和管理数据的仓库,是用于查询的大量数据的存储区域。使用数据库可以带来许多好处:如减少了数据的冗余度,从而大大地节省了数据的存储空间,实现数据资源的充分共享等等。近年来推出的计算机关系数据库管理系统,还具有操作直观,使用灵活,编程方便,功能强大,环境适应广泛,数据处理能力极强等诸多优点。

总的来说,数据库的设计对系统的经济性、功能性和效率有很大的影响,一个好的数据库,要求在设计时尽量避免数据的多余,另外,还要尽可能提高数据的存取速度。数据库设计时速度与空间在范式上是相互矛盾的。一方面按规范化理论的要求,关系模式应尽量取高级范式,尤其对记录数较多的关系,低级范式将会造成存储的大量重复,是空间遭受严重浪费;另一方面从存取速度上考虑,应该尽量做到一个模式涉及的属性越多越好,相互运算越少越好,这样,又应取低级范式。因此我们在设计数据库时要严格地探讨它的使用环境,充分了解用户的需求,清楚地掌握数据库系统的特点。经过综合的评价和分析后设计出的数据库应满足以下要求:

(1) 数据库信息要能充分体现出用户使用系统的需求。

(2) 能够支持用户对数据进行的所有处理。

(3) 能够容易被数据库管理系统运行维护。

(4) 数据一致性、完整性好,无更新异常。

本系统采用SQL SERVER2005做为后台数据库,使用ADO.NET技术对数据进行操作。

2.3.1 数据分析

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

对系统的管理员,在登录系统后,本系统接受管理员的修改、添加、删除请求,通过分析将这种请求转化成相应的SQL语句执行对数据库的相关的操作,并将执行的相应结果送回系统中。系统接收到数据库返回的结果集,经过一定的分析处理,将其转化成ASP页面,返回到客户端显示给用户。

2.3.2 SQL SERVER 2005

SQL SERVER2005是可以在WEB上运行的数据库服务产品。它既可适用于桌面系统的单用户数据库,也可适用于企业的网络数据库,甚至适用于专业的WEB站点数据库,具有很强的可伸缩性。并且具有很高的可靠性、可用性和可管理性。从经济和开发效率上适合中小型网站。它和ASP.NET同属于微软公司开发,在开发接口有一致性,能更好的协调工作。同时,SQL SERVER2005对数据的安全性也有一定的保障,它对用户的访问进行了两个阶段的检查:一是认证阶段,二是许可确认阶段。数据库使用ADO.NET来处理数据。

2.3.3 ADO.NET

ADO.NET是基于.NET框架结构、面向分布式和以XML数据格式为核心的数据访问技术,它提供了一组数据访问服务的类,可用于对Microsoft SQL ServerOracle等数据源及通过OLEDBXML公开的数据远源的一致访问。ADO.NET统一了数据容器类编程接口,无论编写何种应用程序(Windows窗体、Web窗体、Web服务)都可以通过同一组类来处理数据。为使用方便,ADO.NET还提供了一组丰富的控件,利用可视化方式来开发数据库应用。

ADO.NET体系结构如下图2-1所示

2-1 ADO.NET体系结构

ADO.NET体系结构的两大核心控件是.NET Framework数据提供程序和Dataset. NET Framework数据提供程序用于连接到数据库、执行命令和检索结果。Dataset是一个功能丰富、比较复杂的数据集,它是支持ADO.NET的断开式、分布式数据方案的核心对象。Dataset专门用来处理从数据源获得的数据,无论数据来自什么数据源,它都使用相同的方式操作数据。

2.4 ASP.NET配置

Asp.net的配置文件都是XML格式的文件,XML格式文件易于书写和定制,采用这种方法进行asp.net配置方便灵活。另外,asp.net的配置都是可以随时更改的,即应用程序运行期间,可以随时增加和删除asp.net配置文件中的项目,修改后可以立刻激活使用比当配置发生变化时需要服务重新启动配置才生效的方法有很大的优势。

第三章 需求分析

3.1 需求分析

任何一个软件项目的开发都是从需求调查开始,博客管理系统也不例外。系统管理员通过前台页面进入后台管理模块后,可以对注册的博客用户进行管理,包括对注册用户的添加、查找、修改和删除等操作;而博客用户通过前台登陆后,可以对自己的博客空间进行管理,包括发布自己的网络日志、收藏个人图片、与相关人员进行交流和沟通以及删除访问者的评论等。

针对博客管理系统的一些需求,总结出如下信息:

1.用户分普通用户、管理用户和超级管理用户。

2.超级管理用户员可以对博客管理员进行管理和设置权限。

3.博客管理员涉及对博客的类型管理、文章管理、图片管理、评论管理、留言管理和通信管理。

4.普通用户可一阅读文章、发表回应、留言和评论。

5.一种文章类型有多篇文章。

6.一种文章有多篇评论。

3.2 可行性分析

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

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

(2) 技术上的可行性。技术上的可行性分析主要是分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。在软件方面,本系统采用的是ASPActive Sever Pages)进行开发,前台网页设计使用的是Dreamweaver MX,而数据库系统采用的是Microsoft Access 2000。通过分析,在软、硬件方面现有工具与环境完全可以实现系统的开发,因此具有技术上的可行性。

(3) 时机可行性。时机可行性是分析系统开发时机是否成熟。目前越来越多的应用程序都已经是转向基于Web的开发,并且Internet已经广泛使用,因此系统的设计具有时机可行性。

(4) 管理上的可行性:主要是管理人员是否支持,现有的管理制度和方法是否科学,规章制度是否齐全,原始数据是否正确等。系统的开发主要就是为了方便校友信息的管理,补充现在传统管理方式的不足,因此具备了管理上的可行性。

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

第四章 概要设计

4.1 系统设计方案

本系统是面向个人用户和小型集体用户开发的系统,完成用户在Blog上进行预定操作,实现用户和来宾之间的双向沟通。具体设计方案为:

1 系统服务器为IIS,数据库为SQLSERVER2005,整个系统界面采用Microsoft visual Studio 2008开发。

2 C#语言实现。

3 服务器与数据库的连接使用OLEDB编程接口的OleDbConnection对象进行连接。

4 系统分成两部分,前台为普通用户操作界面,功能包括:阅读文章,发表留言,发表评论,在线聊天。后台为管理员操作界面,管理员通过登录进入管理界面,功能包括:分类管理,文章管理,添加文章,评论管理,链接管理,留言管理。

4.2 系统功能模块

系统功能模块包括两大块:管理界面功能模块和普通用户界面功能模块。其具体功能如下所示:本系统由福州远行者信息技术有限公司开发,更多内容请参阅公司官网。

博客系统文章实体E-R图如图4-1所示。

4-1 文章资源E-R

管理员用户功能模块图4-2如下:

4-2 管理员功能模块

普通用户功能模块图4-3如下:

4-3 普通用户功能模块

4.3 数据库需求分析

■用户分为普通用户和管理员用户

■管理员涉及类型管理、文章管理、添加文章、评论管理、链接管理、留言管理。

■普通用户可以阅读文章、发表回应、留言、评论和在线聊天。

■一种文章类型有多篇文章。

■一篇文章有多篇评论、回复。

对上面系统功能分析,设计如下数据项:

管理员信息:用户名、密码。

类型信息:类型编号、类型名称。

链接:链接编号、链接名称、链接地址。

留言:留言编号、留言人呢称、留言标题、个人主页、留言内容、留言时间、留言回复。

文章信息:文章序号、文章作者、文章标题、摘要、文章内容、文章发表日期、文章人气、回复、文章类型编号、文章类型名称、文章回复数。

评论:评论序号、评论用户呢称、评论标题、评论内容、评论时间、评论的文章序号。

4.4 系统操作流程

分析传统Blog系统这一环节所应具有的功能,可以得到Blog系统应具有以下功能:

高级系统用户(管理员)通过浏览器,可以实现文章的管理(对文章的各种信息进行浏览、增加、删除、修改等)、普通系统用户对文章信息只能阅读和留言。

由此得到的系统的流程图如图4-4所示

4-4 系统操作流程

4.5 数据表设计

数据库的概念结构设计完毕后,现在可以将上面的数据库概念结构转化为某种数据库系统所支持的实际数据模型,也就是数据库逻辑结构。

博客系统中的数据管理形式采用数据库,根据系统需要与数据规范化分为博客文章类型表,博客友情链接表,留言信息列表,博客文章信息列表,评论信息列表,系统管理员列表,博客管理员列表,联系人信息列表,图片信息列表这9张表,在此只给出比较重要的数据表。

4-1 ST_news(文章信息列表)

4-2 ST_replay(评论信息列表)

4-3 ST_class(博客文章类型表)

4-4 ST_message(留言信息列表)

4.6 数据库的完整性和安全性

4.6.1 数据库的完整性约束

数据库的完整性是指数据的正确性和相容性。数据库管理系统(DBMS)用一定的机制来检查数据库中的数据是否满足规定的条件——完整性约束条件,数据的约束条件是语义的体现,将作为模式的一部分存入数据库中。数据库的完整性约束主要包括以下三方面要求:

(1) 实体完整性

实体完整性是指若属性A是基本关系R的主属性,则属性A不能取空值。对于每个表来说,主键都不可以为空。在用户提交信息时,系统会对用户所填写的信息进行验证,对于其中的关键信息没有填写或者数据非法时,系统会提示用户更改后再提交。这样保证了系统实体完整性。

(2) 参照完整性

由于表和表之间会存在某些联系,当关系R和关系S之间是一对多关系时(R的主键是AS的主键是bcs中的外码),在插入数据时就要保证外码c的值或者为空或者等于R中某个元组的主码值。在对被参照表进行删除操作时应同时进行及联删除。

(3) 用户定义完整性

任何关系数据库系统都应该支持实体完整性和参照完整性。除此之外,不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件,用户定义的完整性就是针对某一具体关系数据库的约束条件。它反映某一具体应用所涉及的数据必须满足的语义要求。例如某个属性必须取唯一值、某个属性的取值范围等。

4.6.2 数据库的安全性

数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄漏、更改或破坏。在数据库系统中,大量的数据集中存放,同时又为许多用户直接共享,是宝贵的信息资源,因此系统的安全保护措施就显得更为重要。键全的数据库安全机制可以防止数据库被恶意的破坏和非法的存取。

本系统的安全设计包括服务器和数据库两方面设计。当用户使用系统时,系统首先会检查用户是否登录,如果用户还没有登录,系统将会弹出警告窗口提醒用户,并将相应的页面跳转至用户登录。在用户提交登录信息后,系统会对用户的身份进行核对,如果在数据库中查找到了相关记录,打开用户页面,表明用户登录成功。对于数据库的安全,主要是通过对授权用户的身份验证实现的。在的系统管理页面,提示用户使用管理员帐号在此登录,没有管理权限的系统注册用户无法登录到数据库管理的后台。系统确认了管理员身份之后统会打开管理页面,系统管理者可在此对整个系统的数据库进行管理和维护。

第五章 详细设计

5.1 后台功能模块详细设计

通过此功能用户可以对主页中的许多功能和数据进行操作控制。

5.1.1 用户注册模块设计

页面Register.asp主要完成引导用户进行注册,首先会提供注册表让用户输入用户名和密码等,让用户输入注册信息,输入完成后,当用户单击[注册]按钮的时候,要对用户输入的注册信息简单认证,看用户信息是否验证,如果验证进行数据库验证,查看用户之前是否已经注册过,如果没有注册则插入一条新记录到数据库,完成注册。本系统由福州远行者信息技术有限公司开发,更多内容请参阅公司官网。

5-1 博客注册资料

实现此功能的关键代码为:protected void btnOK_Click(object sender, EventArgs e)

{

SqlData da = new SqlData();

SqlDataReader read = da.ExceRead("select * from tb_Admin where UserName='" + this.txtName.Text + "'");

read.Read();

if (read.HasRows)

{

if (this.txtName.Text == read["UserName"].ToString())

{

Response.Write("");

return;

}

}

read.Close();

string P_str_Com = "insert into tb_Admin(UserName,PassWord,Question,Answer,ReallyName,Birthday,Address"

+ ",PostCode,Email,HomePhone,MobilePhone,QQ,ICQ,RegTime,Sex,SuperAdmin,IP) values('" + this.txtName.Text + "'"

+ ",'" + this.txtPwd.Text + "','" + this.txtQues.Text + "','" + this.txtAns.Text + "','" + this.txtRealName.Text + "'"

+ ",'" + this.txtBirthday.Text + "','" + this.txtAddress.Text + "','" + this.txtPostCode.Text + "','" + this.txtEmail.Text + "'"

+ ",'" + this.txtHphone.Text + "','" + this.txtMphone.Text + "','" + this.txtQQ.Text + "','" + this.txtICQ.Text + "','" + DateTime.Now.ToString() + "','" + this.DropDownList1.SelectedValue + "','"+this.DropDownList2.SelectedValue+"','"+Request.UserHostAddress+"')";

bool add = da.ExceSQL(P_str_Com);

if (add == true)

{

Response.Write("");

}

else

{

Response.Write("");

}

}

在博客注册页面中,还用到了一个小功能,就是在用户填写用户名时,通过单击“检测用户”按钮,触发其Click事件来检测填写的用户名是否已经存在。主要代码如下:

protected void Button1_Click(object sender, EventArgs e)

{

SqlData da = new SqlData();

SqlDataReader read = da.ExceRead("select * from tb_Admin where UserName='"+this.txtName.Text+"'");

read.Read();

if (read.HasRows)

{

if (this.txtName.Text == read["UserName"].ToString())

{

Response.Write("");

}

}

else

{

Response.Write("");

}

read.Close();

}

5.1.2 博客管理员首页设计

在博客首页中单击“管理员”超链接,弹出管理员登录对话框,输入正确的用户名和密码后,单击“登录”按钮,进入博客管理员首页,如图5-2所示。在页面左侧显示的是树形功能导航菜单,其有7项管理功能,分别为类型管理,文章管理,留言管理,评论管理,链接管理,通信管理和图片管理。单击相应的功能超链接,将在页面右侧显示相应的连接信息,例如单击“类型管理“超链接,将在页面右侧显示所有的文章类型,管理员可进行添加修改和删除等操作。

5-2 文章信息管理图

实现代码在此内容页中的前台代码中编写如下代码:

<%@ Page Language="C#" MasterPageFile="~/MasterPage/AdminMasterPage.master" AutoEventWireup="true" CodeFile="ST_BlogIndex.aspx.cs" Inherits="Module_Admin_ST_type" Title="Untitled Page" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<table>

<tr>

<td style="width: 97px; height: 424px;">

<iframe src="TreeMenuSys.aspx" name="leftFrame" width="200" frameborder="no" scrolling="no" style="height: 465px; width: 157px; background-image: url(../../Images/Skin/left.jpg);" >iframe>

td>

<td style="width: 101px; height: 424px;">

<iframe src="CommonPage.aspx" name="rightFrame" frameborder="no" scrolling="no" height="500" width="600" style="width: 582px; height: 465px; background-image: url(../../Images/Skin/right.jpg);">iframe>

td>

tr>

table>

asp:Content>

该页主要应用了TreeView控件,实现对博客后台的导航管理,如导向文章类型管理页面。在页面中应用的TreeView控件代码如下:

<asp:TreeView ID="TreeView1" runat="server" Height="301px" Font-Size="12pt" ForeColor="Black" Width="131px" style="left: 1px; position: relative; top: 27px" ImageSet="Faq" >

<Nodes>

<asp:TreeNode Text="博客后台管理" ToolTip="博客后台管理" Value="博客后台管理">

<asp:TreeNode Text="博客管理员" ToolTip="博客管理员" Value="博客管理员">

<asp:TreeNode Text="类型管理" ToolTip="类型管理" Value="类型管理" Target="rightFrame" NavigateUrl="BlogType.aspx">asp:TreeNode>

<asp:TreeNode Text="文章管理" ToolTip="文章管理" Value="文章管理" Target="rightFrame" NavigateUrl="ArticleManage.aspx">asp:TreeNode>

<asp:TreeNode Text="留言管理" ToolTip="留言管理" Value="留言管理" Target="rightFrame" NavigateUrl="ST_admin_message.aspx">asp:TreeNode>

<asp:TreeNode Text="回应管理" ToolTip="回应管理" Value="回应管理" Target="rightFrame" NavigateUrl="ST_admin_replay.aspx">asp:TreeNode>

<asp:TreeNode Text="链接管理" ToolTip="链接管理" Value="链接管理" Target="rightFrame" NavigateUrl="LinkManage.aspx">asp:TreeNode>

<asp:TreeNode Text="通信管理" ToolTip="通信管理" Value="通信管理" Target="rightFrame" NavigateUrl="LinkManManage.aspx">asp:TreeNode>

<asp:TreeNode Text="图片管理" ToolTip="图片管理" Value="图片管理" Target="rightFrame" NavigateUrl="PhotoManage.aspx">asp:TreeNode>

asp:TreeNode>

asp:TreeNode>

Nodes>

<HoverNodeStyle ForeColor="Purple" Font-Underline="True" />

<SelectedNodeStyle Font-Underline="True" HorizontalPadding="0px" VerticalPadding="0px" />

<ParentNodeStyle Font-Bold="False" />

<NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="DarkBlue" HorizontalPadding="5px"

NodeSpacing="0px" VerticalPadding="0px" />

asp:TreeView>

5.1.3 博客文章信息管理页面

在博客的后台管理中,文章管理占有相当重要的地位。单击Blog文件夹下ST_BlogIndex.aspx页面中的“博客管理员”节点下的“文章管理”,就会显示出博客文章管理的相关信息,包括文章编号,文章标题,人气指数等。这部分内容的实现是由该文件夹下的AvticleManage.aspx页面来实现的,运行效果如图5-3所示。

此页面中用到了一个GridView控件,主要用来向用户展示已有文章信息,同时提供修改,删除,添加和查询基本操作。

5-3 博客管理

博客文章信息的查询关键代码如下:

protected void btnSearch_Click(object sender, EventArgs e)

{

SqlData da = new SqlData();

string search = this.ddlSearch.SelectedValue;

switch (search)

{

case "文章ID":

da.BindData(this.GridView1, "Select * From ST_news Where ST_n_id Like '%" + this.txtKey.Text + "%' and BlogID='" + ID + "'");

break;

case "文章主题":

da.BindData(this.GridView1, "Select * From ST_news Where ST_n_title Like '%" + this.txtKey.Text + "%' and BlogID='" + ID + "'");

break;

default:

Response.Write("");

break;

}

}

博客文章信息的修改关键代码如下:

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

try

{

string str;

string str2 = Page.Request["id"].ToString();

//此处用来实现将数据绑定到前台

SqlConnection mycon = new SqlConnection(ConfigurationManager.AppSettings["conStr"]);

mycon.Open();

SqlDataAdapter myada = new SqlDataAdapter("select * from ST_news where ST_n_id='" + str2 + "'", mycon);

DataSet ds = new DataSet();

myada.Fill(ds, "ST_news");

//创建DataRowView对象的一个实例

DataRowView rowview = ds.Tables["ST_news"].DefaultView[0];

//将文章主题读取到labSubject文本框中

this.labSubject.Text = rowview["ST_n_title"].ToString();

//将文章内容读取到txtContent文本框中

this.txtContent.Text = rowview["ST_n_content"].ToString();

mycon.Close();

}

catch (Exception ex)

{

Response.Write(ex.Message);

}

}

}

博客文章信息的添加关键代码如下:

protected void Page_Load(object sender, EventArgs e)

{

if (Session["UserName"] == null)

{

Response.Redirect("~/BlogIndex.aspx");

}

SqlConnection mycon = new SqlConnection(ConfigurationManager.AppSettings["conStr"]);

mycon.Open();

DataSet mydataset = new DataSet();

SqlDataAdapter mydataadapter = new SqlDataAdapter("select * from tb_Blog where UserName='" + Session["UserName"] + "'", mycon);

mydataadapter.Fill(mydataset, "tb_Blog");

DataRowView rowview = mydataset.Tables["tb_Blog"].DefaultView[0];

ID = rowview["BlogID"].ToString();

string sqlstr = "select * from ST_Class where BlogID='"+ID+"'";

SqlCommand mycom = new SqlCommand(sqlstr, mycon);

SqlDataReader dr = mycom.ExecuteReader();

//判断是否有数据

while (dr.Read())

{

DropDownList1.Items.Add(new ListItem(dr["ST_c_name"].ToString(),dr["ST_c_id"].ToString()));

}

}


5.2 前台功能模块详细设计

5.2.1 前台主界面前台主界面图如下

5-4 前台主界面图

主要实现代码如下:

protected void Page_Load(object sender, EventArgs e)

{

// 在此处放置用户代码以初始化页面

string ST_dns = ConfigurationSettings.AppSettings["conStr"];

//最新推荐文章

string ST_cmd_sql = "select top 10 * from ST_news where ST_n_iscmd=1 order by ST_n_date desc";

ST_myConn = new SqlConnection(ST_dns);

SqlDataAdapter ST_classCmd = new SqlDataAdapter("select ST_c_id, ST_c_name from ST_class ", ST_myConn);

SqlDataAdapter ST_cmdCmd = new SqlDataAdapter(ST_cmd_sql,ST_myConn);

DataSet ST_classds = new DataSet();

ST_classCmd.Fill(ST_classds,"类别列表");

DataSet ST_cmdds = new DataSet();

ST_cmdCmd.Fill(ST_cmdds,"推荐文章");

ClassList.DataSource = new DataView(ST_classds.Tables[0]);

ClassList.DataBind();

CmdList.DataSource = new DataView(ST_cmdds.Tables[0]);

CmdList.DataBind();

//调用自定义NewsBlogList_Bind方法

NewsBlogList_Bind();

if (Request.Cookies["colors"]!=null)

{

string ST_test = Request.Cookies["colors"].Value;

String[] ST_colorList = ST_test.Split(new char[] { ',' });

ST_bgcolor = ST_colorList[0];

ST_tcolor = ST_colorList[1];

}

else

{

ST_bgcolor = "#FFDE94";

ST_tcolor = "#efe3ce";

}

Page.DataBind();

}

public void NewsBlogList_Bind()

{

string ST_sql;

if (Request.QueryString["c_id"]==null)

{

ST_sql = "select * from ST_news order by ST_n_date desc";

}

else

{

if (IsSafe(Request.QueryString["c_id"],2)==true)

{

ST_sql = "select * from ST_news where ST_c_id="+ Request.QueryString["c_id"] +" order by ST_n_date desc";

}

else

{

ST_sql="";

Response.Write("非法参数");

Response.End();

}

}

SqlDataAdapter ST_myCmd = new SqlDataAdapter(ST_sql,ST_myConn);

DataSet ST_ds = new DataSet();

ST_myCmd.Fill(ST_ds,"文章列表");

NewsList.DataSource = new DataView(ST_ds.Tables[0]);

NewsList.DataBind();

}

public bool IsSafe (string str, int prama)

{

if (prama==1)

{

if (Regex.IsMatch(str,"[0-9]"))

{

return true;

}

else

{

return false;

}

}

else

{

if (str.IndexOf("and")>0 || str.IndexOf("or")>0 || str.IndexOf("'")>0)

{

return false;

}

else

{

return true;

}

}

}

#region Web Form Designer generated code

override protected void OnInit(EventArgs e)

{

InitializeComponent();

base.OnInit(e);

}

#endregion

protected void NewsList_PageIndexChanging(object sender, GridViewPageEventArgs e)

{

NewsList.PageIndex = e.NewPageIndex;

NewsBlogList_Bind();

}

}

5.2.2 “博客评论”功能模块设计

单击Blog文件夹下的ST-BlogIndex.aspx页面中的“博客管理员”节点下的“评论管理”,就会显示出对博客文章进行评论的相关信息,包括评论者和评论内容。这部分内容的实现是由该文件夹下的ST-admin-replay.aspx页面来实现的,运行效果如图5-5所示。

5-5 回应管理图

主要功能实现代码如下:

protected void Page_Load(object sender, System.EventArgs e)

{

string ST_dns = ConfigurationSettings.AppSettings["conStr"];

ST_myConn = new SqlConnection(ST_dns);

if(!Page.IsPostBack)

{

ST_Replay_Bind();

}

}

private void ST_Replay_Bind()

{

string ST_sql = "select * from ST_replay";

//调用公共类SqlData中的ExceDS方法,返回一个DataSet类型的数据集

ReplayList.DataSource = sd.ExceDS(ST_sql);

ReplayList.DataKeyNames = new string[] { "ST_r_id" };

ReplayList.DataBind();

}

protected void ReplayList_RowDeleting(object sender, GridViewDeleteEventArgs e)

{

//创建公共类SqlData的一个新实例对象

SqlData da = new SqlData();

//调用公共类中的ExceSQL,执行删除的SQL语句

bool delete = da.ExceSQL("delete from ST_replay where ST_r_id='" + ReplayList.DataKeys[e.RowIndex].Value.ToString() + "'");

if (delete)

{

Response.Write("");

}

else

{

Response.Write("");

}

}

}


5.2.3 友情连接管理页实现过程

5-6 超链接管理图

在此页面主要用了一个GridView 控件和一个“添加新链接“的超链接。GridView控件用来向用户展示已有的链接信息,同时提供修改和删除评论信息的操作;“查找”按钮则用来提供已有链接的查询操作。

主要功能实现代码如下:

protected void Page_Load(object sender, EventArgs e)

{ ST_check_Login();

SqlData da = new SqlData();

this.GridView1.DataSource = da.ExceDS("select * from ST_link");

GridView1.DataKeyNames = new string[] { "ST_l_id" };

GridView1.DataBind();}

public void ST_check_Login()

{

if ((Session["UserName"] == null))

{

Response.Write("");

Response.End();

}

}

protected void btnSearch_Click(object sender, EventArgs e)

{

SqlData da = new SqlData();

string search = this.ddlSearch.SelectedValue;

switch (search)

{

case "地址ID":

da.BindData(this.GridView1, "Select * From ST_link Where ST_l_id Like '%" + this.txtKey.Text + "%'");

break;

case "网站名称":

da.BindData(this.GridView1, "Select * From ST_link Where ST_l_name Like '%" + this.txtKey.Text + "%'");

break;

case "链接网址":

da.BindData(this.GridView1, "Select * From ST_link Where ST_l_url Like '%" + this.txtKey.Text + "%'");

break;

default:

Response.Write("");break; }

第六章 测试

6.1 测试目的

程序测试就是在程序投入运行前,对程序的需求分析、设计规格说明和编码的最终复审,是保证程序质量的关键步骤。如果要给程序测试下定义,可以这样讲,程序测试是为了发现错误而执行程序的过程。本系统由福州远行者信息技术有限公司开发,更多内容请参阅公司官网。

测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。在开发大型软件系统的过程中,需要面对错综复杂的问题,因此,在软件生存周期的每个阶段都不可避免地会产生错误。编程人员力求在每个阶段结束之前通过严格的技术审查,尽可能早的发现并纠正错误。

6.2 测试方法

程序测试的主要方法为黑盒测试。

黑盒测试:也称功能测试,将软件看作黑盒子,在完全不考虑程序的内部结构和特性的情况下,测试软件的外部特性。根据软件的需求规格说明书设计测试用例,从程序的输入和输出特性上测试是否满足设定的功能。

6.3 测试用例

(1) 用户测试权限

测试内容:填写用户名及密码,验证能否成功登陆。

操作:① 填写正确的用户名及密码。

填写错误的用户名或密码。

结果:① 成功登陆。

提示用户名或密码错误。

(2) 文章管理测试

(I) 发表文章

测试内容:用户发表新文章,。

操作:进入博客系统,点击文章管理,选择添加文章的操作如下图6-1所示,填写完文章内容之后单击添加按钮,看系统是否会提示发表成功。

结果:测试成功。

第七章 结论

7.1 不足之处与改进

本系统现已基本完成,基本功能已经具备,但在如下几个方面还存在着不足,需要做进一步的研究与开发,使Blog系统能够更完善。

7.1.1 权限分配

本系统权限分配不够细化,只分为管理员和普通用户。管理员可以对数据库进行所有操作,普通用户只能浏览文章,发表回复,在线聊天。而不能发表自己的文章,管理自己的文章,缺乏作为低级管理员的功能。如果我们能在数据库中为各种不同的用户分配不同的角色来细化权限的分配,这样可以便于我们对系统的管理和维护,也能够更多的满足广大用户的需求。

7.1.2 界面美观化

一个系统强大的功能固然重要,能有一个漂亮的界面也必不可少。特别是界面上颜色的搭配很有讲究,要符合系统的基调。让用户更加赏心悦目,为此我认真研究了CSS.NET。在一定程度上美化了界面,但是对FLASHPHOTOSHOP还不同熟悉,所以界面显得单调。

7.2 结论

本文提出并设计了一个基于ASP.NET 的完整的博客系统,该系统整合了数据库技术、ASP.NET技术、网站开发技术等。主要实现了当前主流博客的基本功能,功能强大而且好用。但是本系还存在着一些不足之处,如安全性上的密码未采用加密,部分功能待完善,权限分配不够全面不够细。通过对这个系统的学习与开发,让我更好地掌握了ASP.NET的开发技术,更深刻地理解了网站的开发流程。

在两个月的开发周期中,让我明白一点,就是测试的重要性。所谓建系统,测试先行,软件工程的知识告诉我们一个系统的开发从立项到投入运行,很长的周期都是在测试上的,这次的实际的系统开发让我增长了测试的经验。

1 张树亮,李超著《asp.net2.0+sql server网络应用系统开发案例精解》[M]清华大学出版社2006-9

2 明月创作室编著《visual c#编程精彩百例》[M] 人民邮电出版社 2001-9

3 孙永强,杨丽坤著《Visual C#.NET中文版Web服务开发基础》[M] 清华大学出版社2006-9

4 金雪云著《ASP.MET简明教程》[M] 清华大学出版社2003-7

5 马军著《ASP网络编程从入门到精通》[M] 清华大学出版社2005-9

6 沈阳,李勇敢著《ASP.NET程序设计教程》[M]电子工业出版社2006-10

7 Hyde.R() 《编程卓越之道(第一卷):深入计算机》[M] 电子工业出版社 2006-4

8 Ryan Asleson,Nathaniel T.Schutta() 著金灵等译《Ajax基础教程》[M] 人民邮电出版社2006-2

9 李香敏. ACCESS 2000编程员指南》 .北京希望电子出版社.2004

10 张海藩.《软件工程导论》(第三版)[M]. 北京:清华大学出版社.2003

附录 译文

ASP.NET SQL Server 2000

ASP.NET 是一个统一的 Web 开发模型,它包括您使用尽可能少的代码生成企业级 Web 应用程序所必需的各种服务。ASP.NET 作为 .NET Framework 的一部分提供。当您编写 ASP.NET 应用程序的代码时,可以访问 .NET Framework 中的类。您可以使用与公共语言运行库 (CLR) 兼容的任何语言来编写应用程序的代码,这些语言包括 Microsoft Visual BasicC#JScript .NET J#。使用这些语言,可以开发利用公共语言运行库、类型安全、继承等方面的优点的 ASP.NET 应用程序。

ASP.NET 包括:

页和控件框架

ASP.NET 编译器

安全基础结构

状态管理功能

应用程序配置

运行状况监视和性能功能

调试支持

XML Web services 框架

可扩展的宿主环境和应用程序生命周期管理

可扩展的设计器环境

ASP.NET 页和控件框架是一种编程框架,它在 Web 服务器上运行,可以动态地生成和呈现 ASP.NET 网页。可以从任何浏览器或客户端设备请求 ASP.NET 网页,ASP.NET 会向请求浏览器呈现标记(例如 HTML)。通常,您可以对多个浏览器使用相同的页,因为 ASP.NET 会为发出请求的浏览器呈现适当的标记。但是,您可以针对诸如 Microsoft Internet Explorer 6 的特定浏览器设计 ASP.NET 网页,并利用该浏览器的功能。ASP.NET 支持基于 Web 的设备(如移动电话、手持型计算机和个人数字助理 (PDA))的移动控件。

ASP.NET 网页是完全面向对象的。在 ASP.NET 网页中,可以使用属性、方法和事件来处理 HTML 元素。ASP.NET 页框架为响应在服务器上运行的代码中的客户端事件提供统一的模型,从而使您不必考虑基于 Web 的应用程序中固有的客户端和服务器隔离的实现细节。该框架还会在页处理生命周期中自动维护页及该页上控件的状态。

使用 ASP.NET 页和控件框架还可以将常用的 UI 功能封装成易于使用且可重用的控件。控件只需编写一次,即可用于许多页并集成到 ASP.NET 网页中。这些控件在呈现期间放入 ASP.NET 网页中。

ASP.NET 页和控件框架还提供各种功能,以便可以通过主题和外观来控制网站的整体外观和感觉。可以先定义主题和外观,然后在页面级或控件级应用这些主题和外观。

除了主题外,还可以定义母版页,以使应用程序中的页具有一致的布局。一个母版页可以定义您希望应用程序中的所有页(或一组页)所具有的布局和标准行为。然后可以创建包含要显示的页特定内容的各个内容页。当用户请求内容页时,这些内容页与母版页合并,产生将母版页的布局与内容页中的内容组合在一起的输出。

所有 ASP.NET 代码都经过了编译,可提供强类型、性能优化和早期绑定以及其他优点。代码一经编译,公共语言运行库会进一步将 ASP.NET 编译为本机代码,从而提供增强的性能。

ASP.NET 包括一个编译器,该编译器将包括页和控件在内的所有应用程序组件编译成一个程序集,之后 ASP.NET 宿主环境可以使用该程序集来处理用户请求。

除了 .NET 的安全功能外,ASP.NET 还提供了高级的安全基础结构,以便对用户进行身份验证和授权,并执行其他与安全相关的功能。您可以使用由 IIS 提供的 Windows 身份验证对用户进行身份验证,也可以通过您自己的用户数据库使用 ASP.NET Forms 身份验证和 ASP.NET 成员资格来管理身份验证。此外,可以使用 Windows 组或您自己的自定义角色数据库(使用 ASP.NET 角色)来管理 Web 应用程序的功能和信息方面的授权。您可以根据应用程序的需要方便地移除、添加或替换这些方案。

ASP.NET 始终使用特定的 Windows 标识运行,因此,您可以通过使用 Windows 功能(例如 NTFS 访问控制列表 (ACL)、数据库权限等等)来保护应用程序的安全。

ASP.NET 提供了内部状态管理功能,它使您能够存储页请求期间的信息,例如客户信息或购物车的内容。您可以保存和管理应用程序特定、会话特定、页特定、用户特定和开发人员定义的信息。此信息可以独立于页上的任何控件。

ASP.NET 提供了分布式状态功能,使您能够管理一台计算机或数台计算机上同一应用程序的多个实例的状态信息。

通过 ASP.NET 应用程序使用的配置系统,可以定义 Web 服务器、网站或单个应用程序的配置设置。您可以在部署 ASP.NET 应用程序时定义配置设置,并且可以随时添加或修订配置设置,且对运行的 Web 应用程序和服务器具有最小的影响。ASP.NET 配置设置存储在基于 XML 的文件中。由于这些 XML 文件是 ASCII 文本文件,因此对 Web 应用程序进行配置更改比较简单。您可以扩展配置方案,使其符合自己的要求。

ASP.NET 包括可监视 ASP.NET 应用程序的运行状况和性能的功能。使用 ASP.NET 运行状况监视可以报告关键事件,这些关键事件提供有关应用程序的运行状况和错误情况的信息。这些事件显示诊断和监视特征的组合,并在记录哪些事件以及如何记录事件等方面提供了高度的灵活性。

ASP.NET 支持两组可供应用程序访问的性能计数器:

ASP.NET 系统性能计数器组

ASP.NET 应用程序性能计数器组

ASP.NET 利用运行库调试基础结构来提供跨语言和跨计算机调试支持。可以调试托管和非托管对象,以及公共语言运行库和脚本语言支持的所有语言。

此外,ASP.NET 页框架提供使您可以将检测消息插入 ASP.NET 网页的跟踪模式。

ASP.NET 支持 XML Web servicesXML Web services 是包含业务功能的组件,利用该业务功能,应用程序可以使用 HTTP XML 消息等标准跨越防火墙交换信息。XML Web services 不用依靠特定的组件技术或对象调用约定。因此,用任何语言编写、使用任何组件模型并在任何操作系统上运行的程序,都可以访问 XML Web services

ASP.NET 包括一个可扩展的宿主环境,该环境控制应用程序的生命周期,即从用户首次访问此应用程序中的资源(例如页)到应用程序关闭这一期间。虽然 ASP.NET 依赖作为应用程序宿主的 Web 服务器 (IIS),但 ASP.NET 自身也提供了许多宿主功能。通过 ASP.NET 的基础结构,您可以响应应用程序事件并创建自定义 HTTP 处理程序和 HTTP 模块。

ASP.NET 中提供了对创建 Web 服务器控件设计器(用于可视化设计工具,例如 Visual Studio)的增强支持。使用设计器可以为控件生成设计时用户界面,这样开发人员可以在可视化设计工具中配置控件的属性和内容。

C# 是一种简洁、类型安全的面向对象的语言,开发人员可以使用它来构建在 .NET Framework 上运行的各种安全、可靠的应用程序。使用 C#,您可以创建传统的 Windows 客户端应用程序、XML Web services、分布式组件、客户端 - 服务器应用程序、数据库应用程序以及很多其他类型的程序。Microsoft Visual C# 2005 供高级代码编辑器、方便的用户界面设计器、集成调试器和许多其他工具,以在 C# 语言版本 2.0 .NET Framework 的基础上加快应用程序的开发。

C# 语法表现力强,只有不到 90 个关键字,而且简单易学。C# 的大括号语法使任何熟悉 CC++ Java 的人都可以立即上手。了解上述任何一种语言的开发人员通常在很短的时间内就可以开始使用 C# 高效地工作。C# 语法简化了 C++ 的诸多复杂性,同时提供了很多强大的功能,例如可为空的值类型、枚举、委托、匿名方法和直接内存访问,这些都是 Java 所不具备的。C# 还支持泛型方法和类型,从而提供了更出色的类型安全和性能。C# 还提供了迭代器,允许集合类的实现者定义自定义的迭代行为,简化了客户端代码对它的使用。

作为一种面向对象的语言,C# 支持封装、继承和多态性概念。所有的变量和方法,包括 Main 方法(应用程序的入口点),都封装在类定义中。类可能直接从一个父类继承,但它可以实现任意数量的接口。重写父类中的虚方法的各种方法要求 override 关键字作为一种避免意外重定义的方式。在 C# 中,结构类似于一个轻量类;它是一种堆栈分配的类型,可以实现接口,但不支持继承。

除了这些基本的面向对象的原理,C# 还通过几种创新的语言结构加快了软件组件的开发,其中包括:

封装的方法签名(称为委托),它实现了类型安全的事件通知。

属性 (Property),充当私有成员变量的访问器。

属性 (Attribute),提供关于运行时类型的声明性元数据。

内联 XML 文档注释。

C# 中,如果需要与其他 Windows 软件(如 COM 对象或本机 Win32 DLL)交互,可以通过一个称为Interop”的过程来实现。互操作使 C# 程序能够完成本机 C++ 应用程序可以完成的几乎任何任务。在直接内存访问必不可少的情况下,C# 甚至支持指针和不安全代码的概念。

C# 的生成过程比 C C++ 简单,比 Java 更为灵活。没有单独的头文件,也不要求按照特定顺序声明方法和类型。C# 源文件可以定义任意数量的类、结构、接口和事件。

C# 程序在 .NET Framework 上运行,它是 Windows 的一个必要组件,包括一个称为公共语言运行时 (CLR) 的虚拟执行系统和一组统一的类库。CLR Microsoft 的公共语言基础结构 (CLI) 的一个商业实现。CLI 是一种国际标准,是用于创建语言和库在其中无缝协同工作的执行和开发环境的基础。

C# 编写的源代码被编译为一种符合 CLI 规范的中间语言 (IL)IL 代码与资源(如位图和字符串)一起作为一种称为程序集的可执行文件存储在磁盘上,通常具有的扩展名为 .exe .dll。程序集包含清单,它提供关于程序集的类型、版本、区域性和安全要求等信息。

执行 C# 程序时,程序集将加载到 CLR 中,这可能会根据清单中的信息执行不同的操作。然后,如果符合安全要求,CLR 执行实时 (JIT) 编译以将 IL 代码转换为本机机器指令。CLR 还提供与自动垃圾回收、异常处理和资源管理有关的其他服务。由 CLR 执行的代码有时称为托管代码,它与编译为面向特定系统的本机机器语言的非托管代码相对应。下图演示了 C# 源代码文件、基类库、程序集和 CLR 的编译时与运行时的关系。

语言互操作性是 .NET Framework 的一个关键功能。因为由 C# 编译器生成的 IL 代码符合公共类型规范 (CTS),因此从 C# 生成的 IL 代码可以与从 Visual BasicVisual C++Visual J# .NET 版本或者其他 20 多种符合 CTS 的语言中的任何一种生成的代码进行交互。单一程序集可能包含用不同 .NET 语言编写的多个模块,并且类型可以相互引用,就像它们是用同一种语言编写的。

除了运行时服务,.NET Framework 还包含一个由 4000 多个类组成的内容详尽的库,这些类被组织为命名空间,为从文件输入和输出到字符串操作、到 XML 分析、到 Windows 窗体控件的所有内容提供多种有用的功能。典型的 C# 应用程序使用 .NET Framework 类库广泛地处理常见的日常任务。

附录 外文原文

ASP.NET

ASP.NET is a unified Web development model that includes the services necessary for you to build enterprise-class Web applications with a minimum of coding. ASP.NET is part of the .NET Framework, and when coding ASP.NET applications you have access to classes in the .NET Framework. You can code your applications in any language compatible with the common language runtime (CLR), including Microsoft Visual Basic, C#, JScript .NET, and J#. These languages enable you to develop ASP.NET applications that benefit from the common language runtime, type safety, inheritance, and so on.

ASP.NET includes:

A page and controls framework

The ASP.NET compiler

Security infrastructure

State-management facilities

Application configuration

Health monitoring and performance features

Debugging support

An XML Web services framework

Extensible hosting environment and application life cycle management

An extensible designer environment

The ASP.NET page and controls framework is a programming framework that runs on a Web server to dynamically produce and render ASP.NET Web pages. ASP.NET Web pages can be requested from any browser or client device, and ASP.NET renders markup (such as HTML) to the requesting browser. As a rule, you can use the same page for multiple browsers, because ASP.NET renders the appropriate markup for the browser making the request. However, you can design your ASP.NET Web page to target a specific browser, such as Microsoft Internet Explorer 6, and take advantage of the features of that browser. ASP.NET supports mobile controls for Web-enabled devices such as cellular phones, handheld computers, and personal digital assistants (PDAs).

ASP.NET Web pages are completely object-oriented. Within ASP.NET Web pages you can work with HTML elements using properties, methods, and events. The ASP.NET page framework removes the implementation details of the separation of client and server inherent in Web-based applications by presenting a unified model for responding to client events in code that runs at the server. The framework also automatically maintains the state of a page and the controls on that page during the page processing life cycle.

The ASP.NET page and controls framework also enables you to encapsulate common UI functionality in easy-to-use, reusable controls. Controls are written once, can be used in many pages, and are integrated into the ASP.NET Web page that they are placed in during rendering.

The ASP.NET page and controls framework also provides features to control the overall look and feel of your Web site via themes and skins. You can define themes and skins and then apply them at a page level or at a control level.

In addition to themes, you can define master pages that you use to create a consistent layout for the pages in your application. A single master page defines the layout and standard behavior that you want for all the pages (or a group of pages) in your application. You can then create individual content pages that contain the page-specific content you want to display. When users request the content pages, they merge with the master page to produce output that combines the layout of the master page with the content from the content page.

All ASP.NET code is compiled, which enables strong typing, performance optimizations, and early binding, among other benefits. Once the code has been compiled, the common language runtime further compiles ASP.NET code to native code, providing improved performance.

ASP.NET includes a compiler that will compile all your application components including pages and controls into an assembly that the ASP.NET hosting environment can then use to service user requests.

In addition to the security features of .NET, ASP.NET provides an advanced security infrastructure for authenticating and authorizing user access as well as performing other security-related tasks. You can authenticate users using Windows authentication supplied by IIS, or you can manage authentication using your own user database using ASP.NET forms authentication and ASP.NET membership. Additionally, you can manage the authorization to the capabilities and information of your Web application using Windows groups or your own custom role database using ASP.NET roles. You can easily remove, add to, or replace these schemes depending upon the needs of your application.

ASP.NET always runs with a particular Windows identity so you can secure your application using Windows capabilities such as NTFS Access Control Lists (ACLs), database permissions, and so on. For more information on the identity of ASP.NET,

ASP.NET provides intrinsic state management functionality that enables you to store information between page requests, such as customer information or the contents of a shopping cart. You can save and manage application-specific, session-specific, page-specific, user-specific, and developer-defined information. This information can be independent of any controls on the page.

ASP.NET offers distributed state facilities, which enable you to manage state information across multiple instances of the same application on one computer or on several computers.

ASP.NET applications use a configuration system that enables you to define configuration settings for your Web server, for a Web site, or for individual applications. You can make configuration settings at the time your ASP.NET applications are deployed and can add or revise configuration settings at any time with minimal impact on operational Web applications and servers. ASP.NET configuration settings are stored in XML-based files. Because these XML files are ASCII text files, it is simple to make configuration changes to your Web applications. You can extend the configuration scheme to suit your requirements.

ASP.NET includes features that enable you to monitor health and performance of your ASP.NET application. ASP.NET health monitoring enables reporting of key events that provide information about the health of an application and about error conditions. These events show a combination of diagnostics and monitoring characteristics and offer a high degree of flexibility in terms of what is logged and how it is logged.

ASP.NET supports two groups of performance counters accessible to your applications:

The ASP.NET system performance counter group

The ASP.NET application performance counter group

ASP.NET takes advantage of the run-time debugging infrastructure to provide cross-language and cross-computer debugging support. You can debug both managed and unmanaged objects, as well as all languages supported by the common language runtime and script languages.

In addition, the ASP.NET page framework provides a trace mode that enables you to insert instrumentation messages into your ASP.NET Web pages.

ASP.NET supports XML Web services. An XML Web service is a component containing business functionality that enables applications to exchange information across firewalls using standards like HTTP and XML messaging. XML Web services are not tied to a particular component technology or object-calling convention. As a result, programs written in any language, using any component model, and running on any operating system can access XML Web services.

ASP.NET includes an extensible hosting environment that controls the life cycle of an application from when a user first accesses a resource (such as a page) in the application to the point at which the application is shut down. While ASP.NET relies on a Web server (IIS) as an application host, ASP.NET provides much of the hosting functionality itself. The architecture of ASP.NET enables you to respond to application events and create custom HTTP handlers and HTTP modules.

ASP.NET includes enhanced support for creating designers for Web server controls for use with a visual design tool such as Visual Studio. Designers enable you to build a design-time user interface for a control, so that developers can configure your control's properties and content in the visual design tool.

Introduction to the C# Language and the .NET Framework  C# is an elegant and type-safe object-oriented language that enables developers to build a wide range of secure and robust applications that run on the .NET Framework. You can use C# to create traditional Windows client applications, XML Web services, distributed components, client-server applications, database applications, and much, much more. Microsoft Visual C# 2005 provides an advanced code editor, convenient user interface designers, integrated debugger, and many other tools to facilitate rapid application development based on version 2.0 of the C# language and the .NET Framework.

C# syntax is highly expressive, yet with less than 90 keywords, it is also simple and easy to learn. The curly-brace syntax of C# will be instantly recognizable to anyone familiar with C, C++ or Java. Developers who know any of these languages are typically able to begin working productively in C# within a very short time. C# syntax simplifies many of the complexities of C++ while providing powerful features such as nullable value types, enumerations, delegates, anonymous methods and direct memory access, which are not found in Java. C# also supports generic methods and types, which provide increased type safety and performance, and iterators, which enable implementers of collection classes to define custom iteration behaviors that are simple to use by client code.

As an object-oriented language, C# supports the concepts of encapsulation, inheritance and polymorphism. All variables and methods, including the Main method, the application's entry point, are encapsulated within class definitions. A class may inherit directly from one parent class, but it may implement any number of interfaces. Methods that override virtual methods in a parent class require the override keyword as a way to avoid accidental redefinition. In C#, a struct is like a lightweight class; it is a stack-allocated type that can implement interfaces but does not support inheritance.

In addition to these basic object-oriented principles, C# facilitates the development of software components through several innovative language constructs, including:

Encapsulated method signatures called delegates, which enable type-safe event notifications.

Properties, which serve as accessors for private member variables.

Attributes, which provide declarative metadata about types at run time.

Inline XML documentation comments.

If you need to interact with other Windows software such as COM objects or native Win32 DLLs, you can do this in C# through a process called "Interop." Interop enables C# programs to do just about anything that a native C++ application can do. C# even supports pointers and the concept of "unsafe" code for those cases in which direct memory access is absolutely critical.

The C# build process is simple compared to C and C++ and more flexible than in Java. There are no separate header files, and no requirement that methods and types be declared in a particular order. A C# source file may define any number of classes, structs, interfaces, and events.

C# programs run on the .NET Framework, an integral component of Windows that includes a virtual execution system called the common language runtime (CLR) and a unified set of class libraries. The CLR is Microsoft's commercial implementation of the common language infrastructure (CLI), an international standard that is the basis for creating execution and development environments in which languages and libraries work together seamlessly.

Source code written in C# is compiled into an intermediate language (IL) that conforms to the CLI specification. The IL code, along with resources such as bitmaps and strings, is stored on disk in an executable file called an assembly, typically with an extension of .exe or .dll. An assembly contains a manifest that provides information on the assembly's types, version, culture, and security requirements.

When the C# program is executed, the assembly is loaded into the CLR, which might take various actions based on the information in the manifest. Then, if the security requirements are met, the CLR performs just in time (JIT) compilation to convert the IL code into native machine instructions. The CLR also provides other services related to automatic garbage collection, exception handling, and resource management. Code that is executed by the CLR is sometimes referred to as "managed code," in contrast to "unmanaged code" which is compiled into native machine language that targets a specific system. The following diagram illustrates the compile-time and run time relationships of C# source code files, the base class libraries, assemblies, and the CLR.

Language interoperability is a key feature of the .NET Framework. Because the IL code produced by the C# compiler conforms to the Common Type Specification (CTS), IL code generated from C# can interact with code that was generated from the .NET versions of Visual Basic, Visual C++, Visual J#, or any of more than 20 other CTS-compliant languages. A single assembly may contain multiple modules written in different .NET languages, and the types can reference each other just as if they were written in the same language.

In addition to the run time services, the .NET Framework also includes an extensive library of over 4000 classes organized into namespaces that provide a wide variety of useful functionality for everything from file input and output to string manipulation to XML parsing, to Windows Forms controls. The typical C# application uses the .NET Framework class library extensively to handle common "plumbing" chores.

免费下载 Word文档免费下载: 个人博客系统的设计与实现

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服