下载链接:https://download.csdn.net/download/dwf1354046363/22695763
第一章 绪论
伴随着网络的出现,网页逐渐融入人们的生活。快速及时的新闻浏览,五彩缤纷的网上信息,使网络与人们的生活息息相关,于是世界上又出现了第三媒体——Internet。它打破了地域限制,真正使信息得以共享,改变了人们的工作和生活方式。制作网页是企业和个人宣传自己的重要手段,同时也是学习者获取学习信息的重要手段。尤其是在教育领域,在素质教育与终身教育成为必然的今天,人们对信息的需求有了更新,更高的要求,而网页由于本身所具有的信息量大,传递快速,没有时空限制等特点恰好满足这种要求。所以网页也逐渐成为一种新兴的教育资源。
随着网页编程技术的飞速发展,Web数据库技术也随之应运而生。基于Web技术的网络应用程序不断涌现,Web技术在学校的管理中也发挥了巨大的作用,采用Web技术实现学校新闻发布的自动化管理已经成为必然。与此同时,asp技术作为网页编程技术中的较成熟的技术,正在受到越来越多人的青睐。而浏览器/服务器(B/S)模式的数据库结构也正在成为时代的主流。
随着计算机技术的发展,网络技术对我们生活和工作显得越来越重要,特别是现在信息高度发达的今天,人们对最新信息的需求迫切的需要及时性。而对于那些规模较大的大专院校来说,利用计算机支持学校高效率完成学校新闻发布,是适应现代学校发展的需求 。目前各大高校正逐步使用新闻发布系统取代过去传统的手工发布方法。但是仍然有不少学校在采用传统的发布模式。学校新闻的发布一般是有新闻发布者通知各班级通讯员,再有通讯员传递新闻信息,所有这些给新闻发布相关人员增加了巨大的工作量,消耗了工作人员大量的精力。相比之下,利用基于web的学校新闻发布系统对学校新闻进行发布就显的更为方便快捷,而且容易提高新闻发布的效率,实现学校的科学化、正规化的管理,并与世界接轨。
1.2 C/S体系结构与B/S体系结构的比较
目前开发新闻发布系统常采用的体系结构有C/S和B/S两种,下面对这两种体系结构作具体的比较分析。
客户机/服务器结构,即Client/Server结构。这种结构把数据库信息存放在远程的服务器上,而客户机上安装相应的软件。传统C/S结构一般是两层的,其结构如图1.1所示。它有两部分构成:前端是客户机,即用户界面,接受用户的请求,并向数据库服务器提出请求,通常是一个PC机;后端是服务器,将数据提交给客户端,客户端将数据进行计算并把结构呈现给用户。C/S结构还提供了完善的安全保护及对数据完整性处理等操作,并允许多个客户同时访问一个数据库。在这种结构中,服务器的硬件必须要有足够的处理能力,这样才能满足客户的需求。
图1.1 C/S二层体系结构
随着Internet技术的普及和电子商务技术的发展,客户机/服务器结构的数据库系统正在由2层向3层发展。应用程序的任务在逻辑上被划分为三种服务:用户服务、业务服务(中间层服务) 和数据服务。用户服务在客户机上,提供了可视化的用户界面来表示信息和收集数据;业务服务在一个或多个业务服务器上,是联系用户服务和数据服务的桥梁,它们响应用户发来的请求,实施业务规则,处理和分析业务数据。获得业务结果;数据服务在数据库服务器上,负责数据的组织管理,包括数据的定义、维护、访问和更新以及管理并响应业务服务器的数据请求。
C/S结构在技术上已经很成熟,它的主要特点是交互性强、具有安全存取模式、网络通信量低、响应速度快、利于处理大量数据。但是该结构的程序是针对性开发的,变更不灵活,维护和管理的难度较大。通常只局限于小型局域网,不利于扩展。并且,由于该结构的每台客户机都需要安装相应的客户端程序,分布功能较弱且兼容性差,不能实现快速部署安装和配置,因此缺少交通性,具有较大的局限性。要求具有一定专业水准的技术人员去完成。
浏览器/服务器结构,即Browser/Server结构,就是只安装维护一个服务器,而客户端采用浏览器运行软件。它是随着Internet技术的兴起,对C/S结构的一种变化和改进。主要利用了不断成熟的WWW浏览器技术,结合多种Script语言(如VBScript、JavaScript等)和ActiveX技术,是一种全新的软件系统构造技术。
B/S三层体系结构采用三层客户/服务器结构,在数据管理层和用户界面层之间增加了一层结构,称为中间件,使整个体系结构成为三层。三层结构是伴随着中间件技术的成熟兴起的,核心概念是利用中间件将应用分为表示层、业务逻辑层和数据存储层三个不同的处理层次,如图1.2所示。三个层次的划分是从逻辑上分的,具体的物理分法可以有多种组合。中间件作为构造三层结构应用系统的基础平台,提供了以下主要功能:负责客户机与服务器、服务器与服务器的连接和通信;实现应用与数据库的高效连接;提供一个三层结构应用的开发、运行、部署和管理的平台。这种三层结构在层与层之间是互相独立的,任何一层的改变不会影响其他层的功能。
图1.2 B/S三层体系结构
1 硬件环境不同
C/S建立在局域网的基础上,通过专门服务器提供连接和数据交换服务。所处理的用户不仅固定,并且处于相同区域,要求拥有相同的操作系统。B/S建立在广域网的基础上,信息自己管理,有比C/S更强的适用范围,一般只要有操作系统和浏览器就行。与操作系统平台关系最小。面向不可知的用户群。
2 结构不同
C/S软件一般采用两层结构,而B/S采用三层结构。这两种结构的不同点是两层结构中客户端参与运算,而三层结构中客户端不参与运算,只是简单的接收用户的请求,显示最后的结果。所以在三层结构中对客户端的计算机的配置要求很低。虽然B/S在逻辑上采用了三层结构,但在物理上的网络结构仍然是原来的以太网或环形网。这样,第一层与第二层结构之间的通信、第二层与第三层结构之间的通信都需占用同一条网络线路,网络通信量大。而C/S只有两层结构,网络通信量只包括客户端与服务器之间的通信量,网络通信量低。所以,C/S处理大量信息的能力是B/S无法比拟的。
3 处理模式不同
B/S的处理模式与C/S相比,大大简化了客户端,只要装上操作系统、网络协议软件以及浏览器即可,这时的客户机成为瘦客户机,而服务器则集中了所有的应用逻辑。
4 构件重用不同
在构件的重用性方面,C/S程序从整体进行考虑,具有较低的重用性。而B/S对应的是多重结构,要求构件具有相对独立的功能,具有较好的重用性。
5 系统维护不同
系统维护是在软件生存周期中开销最大的一部分。C/S程序由于其本身的整体性,必须整体考察并处理出现的问题。而B/S结构,客户端不必安装及维护。B/S结构在构件组成方面只变更个别构件,开发、维护等工作都集中在服务器端。当需要升级时,只需更新服务器端的软件,而不必更换客户端软件,实现系统的无缝升级。这样就减轻了系统维护与升级的成本和工作量,使用户的总体拥有成本大大降低。
6 对安全的要求不同
由于C/S采用配对的点对点的结构模式,并采用适用于局域网、安全性比较好的网络协议(例如NT的NetBEUI协议),安全性可得到较好的保证。C/S一般面向相对固定的用户群,程序更加注重流程,它可以对权限进行多层次校验,提供了更安全的存取模式,对信息安全的控制能力很强。一般高度机密的信息系统采用C/S结构适宜。而B/S采用点对多点、多点对多点这种开放的结构模式,并采用TCP/IP这一类运用于Internet的开放性协议,其安全性只能靠数据服务器上管理密码的数据库来保证。所以B/S对安全以及访问速度比C/S有更高的要求。而Internet技术中这些关键的安全问题远未解决。
7 速度不同
由于C/S在逻辑结构上比B/S少一层,对于相同的任务,C/S完成的速度总比B/S快。使得C/S更利于处理大量数据。
8 交互性与信息流不同
交互性强是C/S固有的一个优点。在C/S中,客户端有一套完整的应用程序,在出错提示、在线帮助等方面都有强大的功能,并且可以在子程序间自由切换。B/S虽然由JavaScript、VBScript提供了一定的交互能力,但与C/S的一整套客户应用相比实在是太有限了。C/S的信息流单一,而B/S可处理如B-B、B-C、B-G等信息并具有流向的变化。
综上所述,C/S和B/S这两种技术是各有利弊。但相比较只下,C/S主要局限与局域网,缺乏作为应用平台的一些特性,而且要求开发者自己处理事物管理、消息队列、数据的复制和同步等问题,对开发者有较高的要求,而且应用程序的维护和移植复杂。而B/S应用于广域网上,应用程序开发比较简单,而且大大降低了维护管理的难度,所以,B/S具有更广大的发展前景。
对于规模较大的大、专院校来说,利用计算机网络支持学校高效率地完成新闻发布,是适应现代学校发展的需求 。学校信息发布是一项琐碎、复杂而又十分细致的工作,而且不允许出错,如果按照传统的信息传递模式,将会耗费工作人员大量的时间和精力,并且也很难保证所传递的新闻的及时性和准确性。而基于web的学校新闻发布统就是一个能够在网上实现新闻的网上多用户发布,按栏目显示,后台新闻管理和系统管理的网上交互系统。同时计算机网络具有传统传递模式所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。它的出现很好地决了这个燃眉之急。这些优点能够极大地提高新闻发布的效率,也是学校的科学化、正规化管理,与世界接轨的重要条件。
论文分析了Web数据库及ASP技术在新闻发布系统中的应用,本文的主要工作如下:
1 重点讨论了B/S结果的工作原理及其特点,分析了实现Web数据库的不同方法,客观的分析了它们的优缺点。得出结论:ASP技术无论在操作的可行性、方便性还是性能上都是一种实现Web数据库的最好方法。
2 探讨了ASP技术的五个主要的内置对象和ActiveX服务器组件在新闻发布系统中的应用,并介绍了如何利用ASP技术向数据库添加、修改和删除数据。
3 重点讨论了如何利用数据库访问组件,ADO技术实现新闻数据库与服务器的连接,并利用其属性和方法完成对新闻的访问。
4介绍了学校新闻发布系统的总体框架、工作流程和详尽介绍了系统后台管理模块具体实现所使用的主要技术和实际实现方法。
第一章 简单讨论了开发该学校新闻发布系统的意义,并对C/S和B/S这两种体系结构进行了比较说明。
第二章 简单陈述了系统的设计目的,开发环境,系统结构和系统特点。
第三章 介绍了ASP的工作原理,特点和ASP的内置对象和组件以及访问数据库的五种方法。
第四章 对基于Web的学校新闻发布系统的后台设计和实现方法做了详细的介绍和说明。
随着互联网技术的日新月异,极大的推动了基于Internet的应用技术的发展。支持Web数据库的新技术也层出不穷。随着校园网的发展,基于web的学校新闻发布系统也在不断的深入和发展。本文所介绍的学校新闻发布系统的设计和实现仅仅是高校管理信息系统的一个小模块,今后我们还要进一步努力,争取把这个系统做的更加完善。
学校新闻发布系统是基于Web的校园应用方案,为学校在对新闻信息进行发布时提供了极大的方便。彻底取代了传统的手工信息发布和传递方式,极大的减轻了管理人员的工作量,为学校全面实现信息化管理提了强大的支持。
本系统要实现的总体功能是对学校的新闻信息进行统一的发布。系统主要有前台新闻显示和后台新闻管理两大功能模块组成,具体要实现如下的功能:
1前台新闻显示:该模块主要包括新闻列表、新闻浏览等。浏览者可以从网上点击相应的页面浏览全部新闻及查看具体新闻内容,这样就减轻了学校新闻发布工作人员的工作量,也方便了浏览者获得所需要的信息。
2后台新闻管理:该模块主要包括新闻发布、新闻管理以及整个系统的管理员管理等。新闻添加员可以在线发布、修改和删除新闻,系统超级管理员还可以管理新闻添加员的权限。同时可以查看服务器部分属性。
为了要实现以上的功能,首先要定义数据字典。因此,在数据库中建立如下三张数据表:Admin(管理员表),News(新闻表),SmallClass(新闻类别表)。
Admin(管理员表)中用于存放系统所有的管理员及新闻添加员,包括AdminID(管理员编号),AdminName(管理员账号),Password(管理员密码),OsKey(管理员权限)四个字段,具体定义如表2.1所示:
表2.1 管理员表
字段名 | 数据类型 | 长度 |
AdminID | int | |
AdminName | char | 50 |
Password | char | 50 |
OsKey | char | 50 |
News(新闻表)中用于存放系统所有的新闻,包括NewsID (新闻编号),SmallClassName(新闻类别),Title(新闻标题),AdminName(新闻发布者),Content(新闻内容),ImgName(新闻相关图片),UpdateTime (新闻发布时间)七个字段,具体定义如表2.2所示:
表2.2 新闻表
字段名 | 数据类型 | 长度 |
NewsID | int | |
SmallClassName | char | 50 |
Title | char | 50 |
AdminName | char | 50 |
Content | nchar | |
ImgName | char | 50 |
UpdateTime | datatime |
SmallClass(新闻类别表)中用来存放系统所有新闻的类型信息,包括SmallClassID(新闻类型编号),SmallClassName(新闻类型名),BigClassName(上一级类型名)三个字段,具体定义如表2.3所示:
表 2.3 新闻类别表
字段名 | 数据类型 | 长度 |
SmallClassID | int | |
SmallClassName | char | 50 |
BigClassName | char | 50 |
2.1.2 系统总体框架图
本系统各个功能都采用模块化结构设计,系统总体框架结构如图2.2所示。
图2.2 系统总体框架图
随着计算机信息技术和网络通讯等高新技术的发展,对学校新闻信息的发布提出了更高的要求,要求学校新闻发布系统更好的发挥新闻的及时性和准确性。这样就可以使信息发布者从繁杂的信息传递中解脱出来,而且能为信息浏览者提供跟快捷、灵活、方便的信息服务。
通过本系统可以实现学校新闻发布的网络化,解决以往信息传递不及时,不快捷等问题,使学校管理人员能够方便的在网上发布新闻,浏览者在网上查看新闻。因此,应用本系统可以大大提高工作效率,节省人力和物力,提高学校行政管理水平,有利于推动高校新闻管理的无纸化办公进程。
2.3 开发环境
1 硬件条件
服务器两台,一台为数据库服务器,一台为Web服务器;客户端计算机若干;网络通讯设备,主要包括交换机、网卡、集线器、MODEM 等。
2系统平台
采用Browser/Server体系结构,服务器端采用Microsoft Windows 2000作为网络操作系统,Web服务器软件采用IIS5.0(Internet Information Server)。客户端软件,包括单机操作系统和浏览器软件,分别选用Windows 2000和Internet Explorer,数据库系统采用Microsoft Access有利于方便操作。
3开发工具
基于Web的系统开发工具应使开发者使用各种各样的技术来创建动态的Web应用程序,并且应是一个可视化的工具。我们采用了Dream weaver MX进行开发,它是用来快速创建数据驱动Web应用程序的基于团队的开发环境,支持ASP,以ODBC连接数据库,脚本语言为简单易学的JavaScript或VBScript。
4运行需求
正常使用时不应出错,若运行时遇到不可恢复的系统错误,也必须保证数据完好无损,对数据的精确度、时间特性、适应性等都有一定要求,要求系统运行时能够保证正确性、可靠性、高效性、完整性、易使用性、可维护性、可测试性、复用性、安全保密性、可移植性、互联性。
2.4 系统特点
该系统主要是通过网络对学校的新闻进行发布和管理,其主要有如下几个特点:
1 采用先进可靠的体系结构
本系统采用的是当今比较流行的浏览器/服务器(B/S)三层体系结构,在客户端只需要安装浏览器(如IE等)就可以对服务器进行访问,与早期的主机/终端结构相比,B/S结构突破了地域上的限制,一般只要能上网的地方就可以从客户端访问服务器。而且,B/S结构的开发、维护工作都集中在服务器端,当需要升级时,只需更新服务器端的软件,不必更换客户端的软件,减低了维护的难度和成本。
2 友好的用户界面
本系统设计的界面友好简洁,各个功能模块排布清晰明确,一目了然。用户只需要通过简单的操作就可以查找自己需要的信息,充分体现了简单,灵活,方便等特点。
3 可靠性和安全性
本系统会自动对输入信息的正确性和完整性进行检查,保证写入数据库内信息的正确性。系统还会自动检测用户的管理权限,使得每个用户不能使用超出自己权限的功能。
本章首先介绍了系统的需求分析,列出了数据字典的具体定义的方法,并给出了系统总体框架图,最后介绍了系统设计的目的系统开发环境和系统的特点等。
第三章 ASP技术
ASP是微软公司推出的新兴的网络应用程序开发技术,是服务器端的脚本编写环境,使用ASP可以创建和运行动态、交互的应用程序,可以组合HTML页面、脚本命令和ActiveX组件以创建交互的网络和基于网络的功能强大的应用程序。目前ASP已成为开发动态网站和网络数据库的主要技术之一。
ASP访问数据库的工作原理如下:
ASP脚本实际上是一种服务器端的解释脚本,其脚本包含在以.asp为后缀的文件中。当在浏览器中访问以后缀名为.asp的ASP主页时,网络服务器响应HTTP请求并调用ASP引擎(asp.dll)执行该文件并解释执行其中的任何脚本(VBScript或JavaScript),若脚本中有访问数据库的请求,立刻通过ODBC与相应的后台数据库相连,由数据库访问组件ADO(Active Data Objects)完成操作,最后,ASP根据访问数据库的结构集生成包含有数据查询结果HTML语言的主页返回给前端用户。具体工作原理见图3.1。
图3.1 ASP访问Web数据库工作原理
由于ASP在服务器端运行,运行结果以HTML主页的形式返回用户浏览器,也就是说,用户在前端浏览器看到的仅仅是ASP页的执行结果所生成的页,而ASP的页本身的内容用户在浏览器前端是看不到的,因而ASP源程序不会泄密,增加了系统的安全保密性。此外,ASP是面向对象的脚本环境,用户可自行增加ActiveX组件来扩充其功能,拓展其应用范围。
ASP的程序代码简单通用,文件名由.asp结尾,ASP文件通常由四部分构成:
1 标准的HTML标记:所有的HTML标记均可使用。
2 ASP语法命令:位于<% %>标签内的ASP代码。
3 服务器端的包括语句:可用#包括语句调入其他ASP代码,增加编程的灵活性。
4 脚本语言:ASP自带JavaScript和VBScript两种脚本语言,增加了ASP的编程功能,用户也可以安装其他脚本语言,比如:Perl,Rexx等。
ASP运行于Internet Information Server(简称IIS),它把HTML语言、脚本语言、ActiveX服务器组件等结合在一起,建立动态的、交互的、高性能的Web服务器应用程序。ASP的主要特点有:
1 使用VBScript、JavaScript等简单易懂的脚本语言,脚本语言完全嵌入HTML,不仅可快速的完成网站的应用程序,还实现了程序与页面的完美结合。
2 无需编译,Web服务器直接执行脚本代码。
3 使用普通的文本编辑器(如windows的记事本)就可以进行编辑设计,也可以使用高效的可视化工具Visual InterDev和Dreamweaver MX 2004。
4 无浏览器兼容问题,用户端的浏览器只要能执行HTML代码即可。ASP使用的脚本语言在Web服务器端执行,用户端浏览器不需要能执行这些脚本语言。
5 ASP的源程序隐藏,不会被传到用户浏览器,用户仅能看见由ASP输出的动态HTML文件,这提高了程序的安全性。
6 ASP是面向对象编程,可便捷的使用ActiveX组件来执行复杂的任务。并且ActiveX Server Components(ActiveX服务器组件)具有可扩充性,可使用Visual Basic、Java、Visual C++、COBOL等编程语言编写所需要的ActiveX服务器组件。
7 可使用服务器端的脚本产生客户端的脚本。
ASP提供了功能强大的六个内置对象和五个内置组件,利用这些对象和组件可以开发出非常完美的网络应用程序。下面分别对ASP的内置对象和组件作介绍。
ASP提供的内置对象,这些对象可以使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户信息(如用户首选项)。
这六个内置对象如下:
1 Request(请求):可以使用Request对象访问任何用HTTP请求传递的信息,包括从HTML表格用POST方法或GET方法传递的参数、cookie和用户认证。通过Request对象能访问发送给服务器的二进制数据,如上传的文件。
2 Response(响应):将信息送给前端。Response对象可用来构建对信息的反馈。
3 Server(服务器):提供网络服务器工具。
4 Application(应用):管理所有会话,供所有用户共享。
5 Session(会话):存储一次会话内的用户信息,仅被该用户访问。
6 ObjectContext(对象上下文):提交或终止由ASP脚本启动的事物。
下面就ASP的六个内置对象进行说明:
3.4.1.1 Request对象
使用Request对象,可以收集并处理用户通过HTTP请求传送的信息,如HTML表单用POST或GET方式传达的参数,Cookies数据和环境变量等。这些信息可以分别从Request对象的集合中获取。
1 Request对象的语法
Request[.collection|property|method](“variable”)或Request(“variable”)
如果通过调用Request(“variable”)直接使用所有的变量,而不用集合的名称,那么,Web服务器会按照下面的顺序搜索集合:
QueryString
Form
Cookies
ClientCerificate
ServerVariables
这样,当发现第一个匹配的变量时,就认定它就是要引用的成员。显然省略集合名称会影响执行效率。为了提高效率,最好明确的指定是哪个集合中的成员。
2 Request对象的集合
Request对象有五种集合,如表3.1所示
表3.1 Request对象的集合
集合名 | 说 明 |
ClientCerificate | 存储在发送到HTTP请求中客户端证书中的字段值 |
Cookies | HTTP请求中被发送的cookie的值 |
Form | HTTP请求正文中表格元素的值 |
QueryString | HTTP中查询字符串变量的值 |
ServerVariables | 预定的环境变量的值 |
3 Request对象的属性
TotalBytes:指定客户端在请求正文中发送的总字节数,该属性只允许读。
语法:
Counter = Request.TotalBytes
Counter用于指定一个变量来接受客户端在请求中发送的总字节数。
4 Request对象的方法
BinaryRead:用于获取作为POST请求的一部分而从客户端传送到服务器的数据。
语法:
Variant = Rqquest.BinaryRead(count)
variant包含由该方法返回的无符号数的数组。
3.4.1.2 Response对象
使用Response对象,可以控制发送给用户的信息。包括直接发送信息给浏览器、重定向浏览器到另一个URL或设置cookie的值。
1 Response对象的语法
Response.collection|property|method
2 Response对象的属性
Response具有多种属性,如表3.2所示。
表3.2 Response对象的属性
属性名 | 说 明 |
Buffer | 表明页输出是否缓冲 |
CacheCobtrol | 决定代理服务器是否能缓存ASP生成的输出 |
Charest | 将字符集的名称添加到内容类型标题中 |
ContentType | 指定响应的HTTP内容类型 |
Expires | 在浏览器中缓存的页面超时前,指定缓存的时间 |
ExpiresAbsolute | 指定浏览器上缓存页面超时的日期和时间 |
IsClientConnected | 表明客户端是否与服务器断开 |
Pics | 将PICS标记的值添加到响应标题的PICS标记字段中 |
Status | 服务器返回的状态行的值 |
3 Response对象的方法
Response对象也具有多种方法,如表3.3所示
表3.3 Response对象的方法
方法 | 说 明 |
AddHeader | 从名称的值赋值HTML标题 |
AppendToLog | 在该请求的Web服务器日志条目后添加字符串 |
BinaryWrite | 将给出信息写入到当前HTTP输出中,并不进行任何 字符转换 |
Clear | 清除任何缓冲的HTML输出 |
End | 停止处理.asp文件并返回当前的结果 |
Flush | 立即发送缓冲的输出 |
Redirect | 将重定向的信息发送到浏览器,尝试连接另一个URL |
Write | 将变量作为字符串写入当前的HTTP输出 |
4 Response对象的Cookie集合
Cookies集合设置cookie的值。若指定的cookie不存在,则创建它。若存在,则设置新的值并且将旧的值删除。
语法:
Response.Cookies(cookie)[(key)|.attribute] = value
Cookie即指cookie的名称。
key是可选项,如果指定了key,则Cookie就是一个字典,而key将被设置为value。
attribute是指定cookie自身的有关信息。
value指定分配给key或attribute的值。
3.4.1.3 Server对象
Server对象提供对服务器上的方法属性进行的访问。最常用的方法是创建ActiveX组件的实例(Server.CreatObject)。其他方法用语将URL或HTML编码成字符串,将虚拟路径映射到物理路径以及设置脚本的超时的时期。
1 Server对象的语法
Server.property|method
2 Server对象的属性
ScriptTimeout:用于指定脚本在结束前最大可运行的时间。当处理服务器组件时,超时限制将不在生效。
语法:
Server.ScriptTimeout = NumSeconds
Numseconds是指定脚本在被服务器结束前最大可运行的秒数。默认的值是90秒。
3 Server对象的方法
Server对象的方法如表3.4所示
表3.4 Server对象的方法
方法 | 说 明 |
CreatObject | 创建服务器组件实例 |
HTMLEncode | 将HTML编码应用到指定的字符上 |
MapPath | 将指定的虚拟路径映射为物理路径 |
URLEncode | 将URL编码规则,包括转义字符,应用到字符串 |
①MapPath方法
语法:
Server.MapPath(Path)
Path是指定要映射的物理目录的相对路径或虚拟路径。若Path以一个正斜杠(/)或反斜杠(\)开始,则MapPath方法返回路径时将Path视为完整的虚拟路径。若Path不是以斜杠开始,则MapPath方法返回与.asp文件中已有的路径相对的路径。
MapPath方法不检查返回的路径是否正确或在服务器上是否存在。所以,可以先用MapPath方法映射物理目录结构的路径,然后将其传递给在服务器上创建指定迷路或文件的组件。
②CreatObject方法
语法:
Server.CreatObject(progID)
progID是指定要创建的对象的类型。
Server. CreatObject是Server对象中最重要的方法,用于创建已注册到服务器上的ActiveX组件的实例。ActiveX组件能够轻松的扩展ActiveX的能力,实现许多重要的功能。
服务器组件和ASP内置对象一样有集合、属性和方法,但不同的是无法直接存取,必须先建立一个对象实例,然后在通过此对象实例去存取其集合、属性和方法。因此,要想使用数据访问组件,必须先建立对象实例,如:
Set rs = Server.CreatObject(“ADOBO.Connection”)
Set是VBScript的关键词,rs是这个对象实例的名称,ADOBO是ASP服务器的一个组件,用于处理数据库。
默认情况下,由Server.CreatObject方法创建的对象具有页作用域,即当ASP页处理完后,服务器将自动破坏这些对象,也可以通过noting来释放创建的组件所占的资源。如:
<% Set rs = nothing %>
3.4.1.4 Application对象
可以使用Application对象在给定的应用程序的所有的用户之间共享信息。基于ASP的应用程序同所有的.asp文件一样在一个虚拟目录及其子目录中定义。因为多个用户可以共享Application对象,所以必须要加锁以确保多个用户无法同时改变某一属性。
1 Application对象的语法
Application.method
2 Application对象的集合
Application对象的集合有如下两种:
Contents:即包含所有通过脚本命令添加到应用程序中的项。
StaticObjects:即包含所有用<OBJECT>标记添加到会话中的对象。
3 Application对象的方法
Application对象的方法也有两种:
Lock:此方法禁止其他用户修改Application对象的属性。
Unlock:此方法允许其他用户修改Application对象的属性。
3.4.1.5 Session对象
可以使用Session对象存储特定的用户会话所需要的信息。当用户在应用程序的页面之间跳转时,存储在Session对象中的变量不会清除。而用户在应用程序中访问页面时,这些变量始终存在。也可以使用Session方式显示的结束一个会话和设置空闲会话的超时期限。
1 Session对象的语法
Session.collection|property|method
2 Session对象的集合
Session对象有两个集合类型:
Contents:包含已用脚本命令添加到会话中的项目。
StaticObjects:包含通过<OBJECT>标记创建的并给定了会话作用域的对象。
3 Session对象的属性
Session对象具有多个属性,如表3.5所示。
表3.5 Session对象的属性
属性 | 说 明 |
CodePage | 将用于符号映射的代码页 |
LCID | 现场标识 |
SessionID | 返回用户的会话验证 |
Timeout | 应用程序会话状态的超时时限,以分钟为单位 |
4 Session对象的方法
Session对象有一个Abandon方法,用于删除所有存储在Session对象中的对象,并释放这些对象的源。如果未明确的调用Abandon方法,一旦会话超时,服务器将删除这些对象。
语法:Session. Abandon
Abandon方法在被调用时,将按顺序删除当前的Session对象,不过在当前页中所有脚本命令多处理完后,对象才会被真正删除。这就是说,在调用Abandon时,可以在当前页上访问存储在Session对象中的变量,但在随后的Web页上就不可以了。
3.4.1.6 ObjectContext对象
可以使用ObjectContext对象提交或放弃一项由Microsoft Transaction Server(MTS)管理的事务,它由ASP页包含的脚本初始化。ASP包含@TRANSACTION指令时,该页会在事务中运行,直到事务成功或失败后才会终止。
1 ObjectContext对象的语法
ObjectContext.method
2 ObjectContext对象的方法
①SetComplete:此方法声明脚本不了解事务未完成的原因。如果事务中的所有组件都调用SetComplete,事务将完成。SetComplete方法忽略脚本中千毫秒调用过的任何SetAbort方法。
语法:
ObjectContext. SetComplete
②SetAbort:此方法声明脚本初始化的事务未完成,无法更新源。SetAbor方法取消被ASP初始化的事务。
语法:
ObjectContext. SetAbort
由于ASP内置对象不能完全涵盖服务器端的所有资源,一些偏向于数据存取的机制,如取得浏览器信息、连接数据库等都必须依靠服务器端现有的控件。当我们在Web服务器安装ASP的环境后,就可以直接使用它自带的组件。ActiveX服务器组件是一个存在于Web服务器上的文件,该文件包含执行某项一组任务的代码,组件可以执行公用任务,这样就不必用户自己去创建执行这些任务的代码了。
ASP包含了五个内置的ActiveX服务器组件,这五个内置组件在制作网页的过程中非常有用。
1 文件访问组件(File Access Component):提供用ADO对数据库的访问。
2 广告轮播器组件(Ad Rotator Component):创建一个Ad Rotator对象,该对象可按指定的计划在同一页上自动变换显示广告。
3 浏览器信息组件(Browser Capabilities Component):创建一个浏览器类型的对象,该对象决定访问Web站点的每个浏览器的性能、类型和版本。
4 内容链接组件(Content Linking Component):创建一个NextLink对象,该对象可生成Web页内容列表,并像书一样将各页顺序连接。
5 数据库访问组件(Database Access Component):提供ADO对数据库的访问。
其中Database Access组件是利用ASP开发Web数据库最重要的组件。使用该组件可以在应用程序中访问数据库,显示整个表的内容,构造用户查询等其他一些数据库操作。Database Access组件通过ADO访问存储在数据库或其他表格化数据结构中的信息。
目前在Windows环境下有多种访问数据库的技术,不仅与操作系统有关,而且与数据库管理系统也有着必然的联系。主要方法有以下五种:
1 公共网关接口CGI(Common Gateway Interface)
在目前大多数的Web产品中都提供CGI服务功能,它可以使用任何一种计算机语言编写,使用尤其广泛的有C、Perl、C++等语言。
CGI程序的工作过程如下:浏览器将用户星系传递给Web服务器,Web服务起运行CGI程序,CGI程序通过CGI数据库网关对Web数据库进行操作,CGI程序将数据库操作的结构返回给Web服务器,Web服务器将结果传递给浏览器,最后浏览器将数据库操作的结构显示给用户。该过程如图3.2所示。
图3.2 CGI程序的工作过程
CGI是较早实现的技术。适用于多种服务器平台,如Unix、Windows等,但CGI的开发成本高、维护困难、功能有限、不具备事务处理功能、占用服务器资源较多。在Web应用中,与其他动态编程技术相比,CGI技术虽然是一项很早期的技术,有很多的不足,性能差、需要大量的HTTP知识、不灵活等等,但它还是具有很强的使用性,因为其使用普遍,很多Web服务器均支持。就其协议而言,具有简单、易掌握,见效快等特点。
2 Internet数据库连接器IDC(Internet Database Connector)
IDC技术最早出现于Microsoft Internet Information Server 2.0版本中,Web客户通过IDC访问Web服务器上的数据。IDC使用户通过浏览器可以浏览服务器上的信息和访问后台数据库。IDC是ISAPI的一个具体实现,利用IDC生成一个从客户端HTML页面到服务器端IIS的数据库操作。
IDC程序的工作过程如下:IDC使用Internet数据库连接器(.idc)文件访问数据库,用HTML扩展文件(.htx)文件构造输出Web页面。Internet数据库连接器文件指定所要连接的ODBC数据源,HTML扩展文件的名称和位置,以及要执行SQL语句。HTML扩展文件是服务器对SQL执行结果进行格式化而形成的HTML文件,它将最终结果传送给用户。
IDC要求客户端有Web浏览器。服务器端需安装各种数据源的ODBC(Open Database Connectivity)驱动,IDC调用相应的ODBC驱动程序来访问数据库。在服务器上运行IIS /IDC。这是一种简易方案,用户可通过SQL语句对数据库新兴查询、输入、更新、删除等操作。IDC设计简单,不用编译就可以直接执行,且支持对数据的多重查询。
与传统的CGI技术相比,IDC在一定程度上解决了CGI脚本较慢的访问速度和使用维护复杂的问题。在CGI技术中,客户提出请求,服务器把请求写入初始化文件,进程从初始化文件中读取查询并对后台数据库执行查询。进程将后台数据库返回数据形式化为HTML字符串,并传送给服务器。服务器再把HTML串传送给客户。可以看出,这样的流程是复杂缓慢的。特别在网络拥塞时,CGI的速度会令人难以忍受。只适用于小型数据库系统。
3 先进数据库连接器ADC(Advance Database Connector)
前两种方案中对数据库的操作都是在服务器端进行的,而ADC是在浏览器端执行数据查询操作的。当浏览器提出对数据库的操作请求时,ADC先将相应的数据库下载到浏览器端,在用户端对数据库进行操作。显然,这种方案效率很高。但是ADC系统开销比较大,响应慢,只适用于特别频繁的数据库查询操作。
4 Java/JDBC语言编程
JDBC是Sun提供的一套数据库编程接口API函数,由Java语言编写的类、界面组成。用JDBC写的程序能够自动的将SQL语句传送给相应的数据库管理系统。
Java具有坚固、安全、易于使用、易于理解和可以从网络自动下载等特性,是编写数据库应用程序的杰出语言。所需要的只是Java应用程序与各种不同数据库之间进行对话的方法。而JDBC正是为此种用途的机构。有了JDBC,向各种关系数据库发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,为访问Informix数据库又写一个程序等等。你只需要用JDBC API写一个程序就够了,它可向相应数据库发送SQL语句。而且,使用Java编程语言编写的应用程序,就无须去忧虑要为不同的平台编写不同的应用程序。将Java和JDBC结合起来将使程序员只须写一遍程序就可以让它在任何平台上运行。
Java语言是一种面向对象、易移植、多线程控制的语言,可通过JDBC去连接数据库。用Java/JDBC编写的软件可移植性强,适用于多种操作系统,但是其执行效率和执行速度还不理想,目前无法建立高效、高速的应用。
5 动态服务器页面ASP(Active Server Page)
ASP是基于Web的一种编程技术,可以轻松的实现对页面内容的动态控制,根据不同的浏览者,显示不同的页面内容。而浏览这一点也感觉不出来,就像为他们专门制作的页面一样。有ADO(Active Database Object,动态数据库对象)的支持,ASP对数据库的操作非常得心应手。你甚至可以像使用本地数据库那样,管理远程主机上的数据库,对表格和记录进行操作。
ASP着重于处理动态网页和Web数据库的开发,编程灵活、简洁,具有较高的性能,是目前访问Web数据库的最佳选择。
随着Internet技术发发展,开发基于Web的应用程序势在必行,数据库技术更是需要和Web技术相结合,才能有更为广阔的发展前景。ASP作为微软推出的新兴Web应用程序开发技术,在数据库应用方面必将发挥越来越重要的作用,同时浏览器/服务器模式的数据库体系结构也将逐渐成为数据库结构的主流。
本章一开始对ASP的工作原理作了简单的介绍,接着阐述了ASP的页面结构以及ASP的几个特点。最后,比较详细的介绍了ASP的内置对象和内置组件和访问Web数据库的五种方法。
第四章 学校新闻发布系统后台的设计和实现
本系统主要实现的功能是显示和浏览新闻,同时,受权管理员或新闻添加员可以通过系统后台实现新闻的发布和管理。系统由前台新闻显示和后台新闻管理这两个大的模块组成。前台主要用于显示新闻列表及浏览具体新闻内容。后台是供系统管理员和新闻添加员登陆并使用本系统的,系统管理员可以使用系统提供的所有功能,而新闻添加员只有添加新闻的功能。
由于作者主要制作的是后台管理模块,所以下面仅对这个模块的设计和实现作具体的介绍。
对于新闻发布系统而言,后台管理模块是最主要的模块,它的主要功能就是对整个系统的新闻进行统一的管理。主要包括新闻发布,新闻管理,和管理员管理三个子功能模块。系统超级管理员在该模块可以使用全部三个功能,而受限的新闻添加员亦可发布和管理新闻。
本系统的所有数据都存放在数据库中,每次要使用数据库中的数据时,就必须先连接数据库,然后才可以对数据库进行添加、修改、删除数据等操作。在Dreamweaver MX 2004中创建数据库的连接一般有两种方法,本系统采用了通过DSN(数据源名称)实现连接的方法。具体步骤如下:
1 定义系统DSN:
打开[控制面板],双击其中的[管理工具]图标,在转换到的[管理工具]窗口中可以看到一个[数据源(ODBC)]图标。
双击[数据源(ODBC)]图标,打开[ODBC数据源管理器]对话框,切换到[系统DSN]选项卡。
我们来添加一个新的系统DSN名称。单击[添加]按钮,弹出[创建新数据源]对话框,在其中选择“Driver do Microsoft Access(*.mdb)”项。
单击[完成]按钮以后,弹出[ODBC Microsoft Access安装]对话框,我们在其中定义数据源名并选取数据库文件。在其中的[数据源名]文本框中输入“news”作为数据源名,在[说明]参数项后面的文本框中输入一些说明性的文字。单击[选择]按钮,在弹出的[选择数据库]对话框中搜索本地硬盘上的新闻发布系统数据库文件。
单击[确定]按钮,完成数据库的选择。这样就定义了一个新的数据源,最后连续单击[确定]按钮即可。
2 通过DSN(数据源名称)实现连接
在Dreamweaver中打开随便一个新闻发布系统的页面。在[应用程序]面板中的[数据库]面板下单击加号按钮,在弹出的下拉菜单中单击[数据源名称]项。
弹出[数据源名称]对话框,在[连接名称]文本框中输入数据源连接名称“news”,在[数据源名称]下拉列表中选择名字为“news”的DSN,其他参数保持默认值。
单击[确定]以后,[数据库]面板就会出现新定义的连接名称。这样我们就完成了数据库的连接。
定义好后,Dreamweaver会在站点的根目录下的Connections文件夹下建立连接数据库的文件news.asp,具体代码如下:
<%
' FileName="Connection_odbc_conn_dsn.htm"
' Type="ADO"
' DesigntimeType="ADO"
' HTTP="false"
' Catalog=""
' Schema=""
Dim MM_news_STRING
MM_news_STRING = "dsn=news;"
%>
这样就定义了一个变量MM_news_STRING存放了DSN数据库信息。以后每次连接数据库的时候,就使用<!--#include file="../Connections/news.asp" -->语句调用这段代码。但MM_news_STRING仅仅是建立了对数据库的连接,接下来就要介绍创建一个记录集rss对象,见如下代码:
<%
Dim rss
Dim rss_numRows
Set rss = Server.CreateObject("ADODB.Recordset")
rss.ActiveConnection = MM_news_STRING
rss.Source = "SELECT SmallClassName FROM SmallClass ORDER BY SmallClassID ASC"
rss.CursorType = 0
rss.CursorLocation = 2
rss.LockType = 1
rss.Open()
rss_numRows = 0
%>
使用open方法就打开了对数据库的连接,接下来就可以对数据库中的数据进行操作了。
当使用完数据库后,就要中断对象与数据库的连接,并把对象从数据库中移除出去以释放资源。见如下代码:
<%
rss.Close()
Set rss = Nothing
%>
这样就完成了一次对数据库的操作。
通过DSN建立的数据库连接有以下特征:
1 十分方便数据库的管理。
2 采用通过DSN建立数据库的连接,必须能控制站点服务器的DSN的定义。
登录功能是这个系统中的一个基本功能,也是一个十分重要的功能,只有成功登陆以后管理员才可以使用该系统提供的功能。所以,在登录时,就要对管理员的账户,密码和权限进行核对,只有输入正确的信息才能成功的登陆到系统中,如果输入了错误的信息导致登陆失败。
4.3.1 页面设计
本部分只有一个页面组成,既adminlogin.asp。adminlogin.asp是后台登录主页面,管理员在该页面输入登录信息用来登录,同时该页还可以对管理员输入的登录信息进行核对,如果数据库里有此信息则连接到后台主页面admin.asp。具体设计见图4.1所示:
图4.1 管理员登录界面
4.3.2 数据流程
管理员在adminlogin.asp页面登录,在登录框内输入自己的用户名称和登陆密码,然后这些信息同样有adminlogin.asp文件提交到数据库,与数据库中的Admin表中的管理员信息进行比对,如果输入的信息正确,就连接到后台主页面(admin.asp),即可进行系统的管理操作,否则就停留在登录页面,要求重新输入登录信息。数据流程图见图4.2所示:
图4.2 管理员登录数据流图
4.3.3 登陆信息的核对
管理员在每次使用本系统前,都要先登录系统,系统会自动把用户输入的用户信息同存放在数据库中的用户信息进行核对,如果两者一致,那么该用户就成功的登陆了,并能够使用系统提供的功能。否则就返回登录页面给用户并让其重新登陆。
在用户提交输入的信息前,先要对输入的内容是否为空进行判断,采用Dreamweaver编写ASP应用程序的时候,可以采用行为标签里的检查表单行为来实现检查输入信息的有效性的功能,具体见如下代码:
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_validateForm() { //v4.0
var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
if (val) { nm=val.name; if ((val=val.value)!="") {
if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
} else if (test!='R') { num = parseFloat(val);
if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
min=test.substring(8,p); max=test.substring(p+1);
if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
} } } else if (test.charAt(0) == 'R') errors += '- '+nm+'"为空".\n'; }
} if (errors) alert('"有下列错误发生":\n'+errors);
document.MM_returnValue = (errors == '');
定义了两个浏览器端函数MM_findObj(n, d),MM_validateForm()。MM_findObj(n, d)用于搜索表单中的对象,MM_validateForm()定义了对象的有效性信息。如果某一要求进行有效性检查的对象为空的话,则在相应页面弹出警告提示窗口。
在登录页面的login表单中加入了如下代码:
<form ACTION="<%=MM_LoginAction%>" method="POST" name="login" id="login" onSubmit="MM_validateForm('Adminname','','R','Password','','R');return document.MM_returnValue">
Adminname和Password分别是输入用户名和密码文本框的name值,所以,当用户或密码文本框中有任意一个为空时,就会弹出警告窗口要求用户把信息填写完整。
在确认用户输入的信息非空以后,就要对数据进行提交并进一步判断输入信息的正确性。,具体实现过程及代码如下:
<%
MM_LoginAction = Request.ServerVariables("URL")
If Request.QueryString<>"" Then MM_LoginAction = MM_LoginAction + "?" + Server.HTMLEncode(Request.QueryString)
MM_valUsername=CStr(Request.Form("Adminname"))
If MM_valUsername <> "" Then
MM_fldUserAuthorization="OsKey"
MM_redirectLoginSuccess="/admin/admin.asp"
MM_redirectLoginFailed="/admin/adminlogin.asp"
MM_flag="ADODB.Recordset"
set MM_rsUser = Server.CreateObject(MM_flag)
MM_rsUser.ActiveConnection = MM_news_STRING
MM_rsUser.Source = "SELECT AdminName, Password"
If MM_fldUserAuthorization <> "" Then MM_rsUser.Source = MM_rsUser.Source & "," & MM_fldUserAuthorization
MM_rsUser.Source = MM_rsUser.Source & " FROM Admin WHERE AdminName='" & Replace(MM_valUsername,"'","''") &"' AND Password='" & Replace(Request.Form("Password"),"'","''") & "'"
MM_rsUser.CursorType = 0
MM_rsUser.CursorLocation = 2
MM_rsUser.LockType = 3
MM_rsUser.Open
If Not MM_rsUser.EOF Or Not MM_rsUser.BOF Then
Session("MM_Username") = MM_valUsername
If (MM_fldUserAuthorization <> "") Then
Session("MM_UserAuthorization")= CStr(MM_rsUser.Fields.Item(MM_fldUserAuthorization).Value)
Else
Session("MM_UserAuthorization") = ""
End If
if CStr(Request.QueryString("accessdenied")) <> "" And false Then
MM_redirectLoginSuccess = Request.QueryString("accessdenied")
End If
MM_rsUser.Close
Response.Redirect(MM_redirectLoginSuccess)
End If
MM_rsUser.Close
Response.Redirect(MM_redirectLoginFailed)
End If
%>
定义了两个变量MM_valUsername,MM_fldUserAuthorization分别用于存放输入的用户名Adminname,和用户权限OsKey,定义了一个MM_rsUser对象用于查询数据库中Admin表中有关管理员的信息。如果If Not MM_rsUser.EOF Or Not MM_rsUser.BOF Then语句返回的true值,那么表明这条记录已经在数据库中存在了,也就是说用户输入的信息是正确的,那么通过
MM_redirectLoginSuccess="/admin/admin.asp" Response.Redirect(MM_redirectLoginSuccess)
两条语句连接到后台管理主页面。否则就通过
MM_redirectLoginFailed="/admin/adminlogin.asp" Response.Redirect(MM_redirectLoginFailed)
语句重定向到登录页,让用户重新登陆。通过这几步操作,就完成了对用户帐户信息的核对。
4.3.4 用户权限的控制
在本系统中,并不是每个管理员都可以使用系统提供的所有功能,某些功能(如;管理员管理)只能由拥有系统管理权限的用户来操作,而其他功能所有的用户都可以操作。为了保证系统能够正常的运行,必须对每个用户的权限进行严格的控制。
本系统对用户权限的控制主要按两步来实现:
第一步记录登录用户的权限信息,代码如下:
MM_fldUserAuthorization="OsKey"
Session("MM_UserAuthorization")= CStr(MM_rsUser.Fields.Item(MM_fldUserAuthorization).Value)
MM_fldUserAuthorization记录数据库中有关字段OsKey的信息,Session("MM_UserAuthorization")定义了一个有关于管理员权限的会话。
第二步在需要控制权限访问的页面加上控制访问服务器行为,代码如下:
<%
MM_authorizedUsers="super"
MM_authFailedURL="/admin/admin_main.asp"
MM_grantAccess=false
If Session("MM_Username") <> "" Then
If (false Or CStr(Session("MM_UserAuthorization"))="") Or _
(InStr(1,MM_authorizedUsers,Session("MM_UserAuthorization"))>=1) Then
MM_grantAccess = true
End If
End If
If Not MM_grantAccess Then
MM_qsChar = "?"
If (InStr(1,MM_authFailedURL,"?") >= 1) Then MM_qsChar = "&"
MM_referrer = Request.ServerVariables("URL")
if (Len(Request.QueryString()) > 0) Then MM_referrer = MM_referrer & "?" & Request.QueryString()
MM_authFailedURL = MM_authFailedURL & MM_qsChar & "accessdenied=" & Server.URLEncode(MM_referrer)
Response.Redirect(MM_authFailedURL)
End If
%>
这样就限制了该页只有“super”权限的管理员才能访问。达到了用户权限的控制。所以,对于每个管理员来说,要想使用本系统就必须先登陆,而且只能在自己的操作权限内使用本系统,这样,就实现了对每个用户的权限控制。
4.3.5 用户注销
当用户要退出系统的时候,可以点击后台主页中的“退出后台管理”,就可以退出系统。具体实现代码如下:
<%
if request("logout")<>"" then
session("MM_Username")=""
response.redirect "../index.asp"
end if
%>
Session对象保存的是用户在本次对话中所使用的帐户信息,当用户点击”退出后台管理”时就调用此段代码,此时seesion对象中的值为空,那么也就结束了本次对话,用户就退出了系统。并通过response.redirect "../index.asp"语句再返回到主页。
后台管理首页是整个后台管理的主页面,成功登录系统的管理员可以在这里选择自己权限范围内的系统管理操作,包括添加新闻内容,管理全部新闻,管理员管理等,并可查看系统服务器运行信息。
4.4.1 页面设计
后台管理首页力求明朗的显示后台的功能,由三个页面组成,分别是admin.asp,admin_left.asp,admin_main.asp。admin.asp是主页面用于控制后台页面的格式化显示,admin_left.asp是后台的功能连接页面,所有的后台功能都从这里选择进入,admin_mian.asp是后台首页的默认页面,对系统功能及信息做了简短的介绍。具体设计见图4.3所示:
图4.3 后台管理首页
4.4.2 后台页面的布局
admin.asp页面主要用来布局后台显示样式,为了实现这个功能,使用以下代码:
<frameset rows="*" cols="185,*" framespacing="2" border="2" bordercolor="#003333">
<frame src="admin_left.asp" name="leftFrame" scrolling="NO" noresize>
<frame src="admin_main.asp" name="mainFrame">
</frameset>
<noframes><body>
</body></noframes>
通过框架标签frame将admin_left.asp布局在后台页面的左边,将admin_main.asp布局到后台页面的右边。
在admin_left.asp页面中,当点击admin_left.asp页中相应的功能项的时候,连接到的功能页面布局到后台页面的右边,具体的代码如下所示:
target="mainFrame"
既新连接的页面显示到主框架窗口中。
添加新闻内容模块是整个新闻发布系统最重要的模块之一,提供了添加新闻内容的功能,所以只能有管理员进行操作。
4.5.1 页面设计
这个模块有三个asp页面组成,既admin_addinfo.asp,upload.asp和upfile.asp。admin_addinfo.asp是添加新闻的主页面,用于输入新闻内容及发布新闻,upload.asp和upfile.asp主要用于发布新闻是添加上相应新闻图片。具体页面设计见图4.4 添加新闻所示:
图 4.4 添加新闻
4.5.2 数据流程
管理员在新闻添加页面admin_addinfo.asp输入要发布的新闻内容,完整性判断后把记录添加到数据库中,返回到新闻管理页面。具体数据流图见图4.5所示:
图 4.5 添加新闻数据流图
4.5.3输入信息的判断
当输入的新闻在提交的时候,系统自动会对输入的信息进行有效性的判断,当没有输入完整的新闻信息时,会出现警告框提示输入的信息出现了有效性错误。具体代码如下:
<input name="Submit" type="submit" onClick="MM_validateForm('Title','','R','AdminName','','R','content','','R');return document.MM_returnValue" value="提交">
在这里,调用了跟检测管理员登录信息有效性相同的函数MM_validateForm,这个函数是有Dreamweaver定义检查表单行为定义的,这里就不再重述。如果没有输入新闻内容或输入的新闻信息不够完整就按了提交按钮,那么会出现警告框提示用户输入错误。
4.5.4 新闻的添加
新闻添加是整个系统中最为重要的功能之一,利用Dreamweaver的插入记录行为,可以实现向数据库中添加一条新闻记录,具体过程如下:
点击Dreamweaver应用程序窗口中的服务器行为新建一个插入记录行为,选用news连接,插入表格到选用News,插入后转到/admin/admin_info.asp,获取值选用login(既本表单名),表单元素框中建立如下对应关系:
SmallClassName插入到列中” SmallClassName” (文本)
Title插入到列中”Title” (文本)
Content插入到列中”Content” (文本)
AddItem 插入到列中”ImgName” (文本)
AdminName插入到列中”AdminName” (文本)
点击确定后,就完成了插入记录行为的创建。
通过分析代码可知,利用Request("MM_insert")语句获取本页面表单隐藏对象MM_insert 的value属性的值并建立与数据库的连接把相应的值赋到各个字段中去。添加完新闻后转到新闻管理页面。到此,数据库中就添加了一条新的新闻记录。
4.5.5 新闻添加中图片上传功能
随着时代的进步,单纯以文字形式的新闻已经不能满足现今读者的口味。有时必须加上一些靓丽的图片,甚至flash等多媒体技术。这不仅符合现代人的审美观,还能使新闻变得更加活泼,互动。对于学校新闻发布系统而言,亦是如此。这里我们阐述下后台在发布新闻时如何实现图片的上传功能。
对于图片上传而言,它属于文件上传的一种。通常在ASP应用中实现文件上传有两种方式,一种是使用组件上传文件,一种是不使用组件上传文件。由于使用组件上传新闻需要服务器安装相应的文件上传组件而一般网站往往是租用虚拟主机,在这些主机上是不允许用户注册第三方组件的,因而无法使用组件。因此我们采用无组件上传的方式实现图片的上传。
当我们在向服务器发送数据时,数据被分成普通数据和文件的字节数据,实现无组件上传既要将普通数据和文件的字节数据分离出来,由于VBScript中提供了处理字节字符串的函数,因此可以使用VBScript实现一个文件上传类。在使用中我们采用了化境ASP无组件上传类 - upload_5xsoft,并采用了将图片保存到指定文件夹,同时记录文件路径信息的后台图片上传方式。
具体实现图片上传功能由两个ASP页面完成,upload.asp和upfile.asp。upload.asp文件用来选择要上传的文件,利用在admin_addinfo.asp页面中加入下列代码
<iframe border="0" frameBorder="0" align="middle" scrolling="no" width="100%" height="40" src="upload.asp"></iframe>
将upload.asp文件嵌套其中。
upload.asp文件具体代码如下所示:
<form name="form" method="post" action="upfile.asp" enctype="multipart/form-data">
<input type="hidden" name="filepath" value="../UploadFiles">
<input type="hidden" name="act" value="upload">
<input type="file" name="file1" size=25>
<input type="submit" name="Submit" value="上传图片">
<span class="style3">类型:gif,jpg 大小限制:100K</span>
</form>
在ASP的世界里使用表单传递数据是最频繁的,使用表单亦可以实现图片上传的功能。这里就利用了表单的enctype属性来传递了二进制数据,在这个文件里同时给upfile.asp文件传递了一个存放上传图片文件的文件路径的参数。
upfile.asp文件调用了化境ASP无组件上传类 - upload_5xsoft建立文件上传对象实现图片上传功能。
upfile.asp文件的具体代码如下所示:
<!--#include file="upload.inc"-->
<%
dim upload,file,formName,formPath,iCount,filename,fileExt
set upload=new upload_5xSoft ''''建立上传对象
formPath=upload.form("filepath") ''''在目录后加(/)
if right(formPath,1)<>"/" then formPath=formPath&"/"
response.write "<body>"
iCount=0
for each formName in upload.file ''''列出所有上传了的文件
set file=upload.file(formName) ''''生成一个文件对象
if file.filesize<100 then
response.write "请选择你要上传的文件[ <a href=# οnclick=history.go(-1)>重新上传</a> ]"
response.end
end if
if file.filesize>100*1000 then
response.write "文件大小超过了限制100K[ <a href=# οnclick=history.go(-1)>重新上传</a> ]"
response.end
end if
fileExt=lcase(right(file.filename,4))
uploadsuc=false
Forum_upload="gif,jpg,png"
Forumupload=split(Forum_upload,",")
for i=0 to ubound(Forumupload)
if fileEXT="."&trim(Forumupload(i)) then
uploadsuc=true
exit for
else
uploadsuc=false
end if
next
if uploadsuc=false then
response.write "文件格式不正确[ <a href=# οnclick=history.go(-1)>重新上传</a> ]"
response.end
end if
randomize
ranNum=int(90000*rnd)+10000
filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&fileExt
if file.FileSize>0 then ''''如果 FileSize > 0 说明有文件数据
file.SaveAs Server.mappath(FileName) ''''保存文件
for i=0 to ubound(Forumupload)
if fileEXT="."&trim(Forumupload(i)) then
strJS="<SCRIPT language=javascript>" & vbcrlf
strJS=strJS & "parent.login.AddItem.value=('" & filename & "')" & vbcrlf
strJS=strJS & "</script>"
response.write strJS
exit for
end if
next
iCount=iCount+1
end if
set file=nothing
next
set upload=nothing ''''删除此对象
Htmend iCount&" 个文件上传结束!"
sub HtmEnd(Msg)
set upload=nothing
response.write "上传成功 [ <a href=# οnclick=history.go(-1)>重新上传</a>]"
response.end
end sub
%>
首先调用了化境ASP无组件上传类 - upload_5xsoft,利用upload_5xsoft建立了一个上传对象upload,然后取得文件存放路径formPath,再定义了一段必要的文件格式控制和大小控制代码,接着先给上传文件随机取名,判断是否有文件上传,如有上传则保存文件到formPath指定的目录下,然后删除上传对象upload,并返回相应的上传信息。这样就实现了图片上传功能。
新闻管理模块是整个新闻发布系统重要的模块之一,提供了对整个系统的新闻进行管理的功能,包括新闻的修改和删除等,所以只能有管理员进行操作。
4.6.1 页面设计
这个模块主要有三个页面组成:admin_info.asp,admin_infoch.asp和admin_infodel.asp。在admin_info.asp页面中可以查看数据库中的全部的新闻,并显示新闻的相应信息,同时提供了相应新闻操作的连接,包括修改和删除。admin_infoch.asp页面提供了修改新闻的功能。admin_infodel.asp用于删除新闻。具体设计见图 4.6所示:
图 4.6 新闻管理首页
4.6.2 新闻列表显示功能
在admin_info.asp页面中显示了全部的新闻信息,主要有新闻ID,新闻标题,新闻发布者,及新闻分类和发布时间等,这里的新闻列表制作与前台的新闻列表制作相类似,主要功能由记录集(rs)和重复区域(rs)两个Dreamweaver服务器行为实现,具体实现代码如下:
<%
Dim rs
Dim rs_numRows
Set rs = Server.CreateObject("ADODB.Recordset")
rs.ActiveConnection = MM_news_STRING
rs.Source = "SELECT * FROM News ORDER BY NewsID DESC"
rs.CursorType = 0
rs.CursorLocation = 2
rs.LockType = 1
rs.Open()
rs_numRows = 0
%>
定义了一个查询新闻表(News)的记录集rs用于查询系统的所有新闻信息。
<%
While ((Repeat1__numRows <> 0) AND (NOT rs.EOF))
%>
<tr>
<td><%=(rs.Fields.Item("NewsID").Value)%></td>
<td><%=(rs.Fields.Item("Title").Value)%></td>
<td><%=(rs.Fields.Item("AdminName").Value)%></td>
<td><%=(rs.Fields.Item("SmallClassName").Value)%></td>
<td><%=(rs.Fields.Item("UpdateTime").Value)%></td>
<td><div align="center"><a href="/admin/admin_infoch.asp?NewsID=<%=rs("NewsID")%>">修改</a> <a href="/admin/admin_infodel.asp?NewsID=<%=rs("NewsID")%>">删除</a></div></td>
</tr>
<%
Repeat1__index=Repeat1__index+1
Repeat1__numRows=Repeat1__numRows-1
rs.MoveNext()
Wend
%>
定义了一段重复区域的代码,用于将查询到的所有新闻信息显示到页面中,并规定了每个页面的显示数目数为10条新闻信息。
同时新闻管理主页面上还添加了记录集分页功能,用于更好的控制新闻信息的查看。
4.6.3 新闻修改功能
admin_infoch.asp页面用于实现修改新闻的功能,通过新闻管理首页传递过来的NewsID值将整个新闻信息赋值到相应新闻信息修改栏中,既定义一个记录集rs,有rs.Source = "SELECT * FROM News WHERE NewsID = " + Replace(rs__MMColParam, "'", "''") + ""语句筛选以URL参数形式传递过来的NewsID字段,并由动态文本域行为添加到相应信息栏中,如:
<input name="Title" type="text" id="Title" value="<%=(rs.Fields.Item("Title").Value)%>">既将传递来的标题信息赋值到标题信息修改栏中。
如果修改了相应新闻信息栏中的内容则调用Dreamweaver服务器行为中的更新记录功能实现新闻的修改。更新新闻代码与添加新闻代码较类似,这里就不再累述。
4.6.4 新闻删除功能
admin_infodel.asp页面用于实现删除新闻的功能,与修改新闻页面相类似,该页面也是将新闻管理首页传递过来的NewsID值查询相应新闻的全部信息,并将这些新闻信息赋值到相应的新闻信息栏中,如果确认完全删除新闻的话点击页面下的“确认删除”按钮,服务器端将调用删除记录行为,通过记录集rs删除数据库中相应新闻的信息。部分删除新闻代码如下:
<%
If (CStr(Request("MM_delete")) <> "" And CStr(Request("MM_recordId")) <> "") Then
MM_editQuery = "delete from " & MM_editTable & " where " & MM_editColumn & " = " & MM_recordId
If (Not MM_abortEdit) Then
Set MM_editCmd = Server.CreateObject("ADODB.Command")
MM_editCmd.ActiveConnection = MM_editConnection
MM_editCmd.CommandText = MM_editQuery
MM_editCmd.Execute
MM_editCmd.ActiveConnection.Close
If (MM_editRedirectUrl <> "") Then
Response.Redirect(MM_editRedirectUrl)
End If
End If
End If
%>
定义了一个数据库操作命令MM_editCmd用于删除记录。
管理员管理模块主要用于实现系统管理员的管理和新闻添加员的管理,所以具体的管理员权限分成了两种,既系统的超级管理员和普通的新闻添加员。系统超级管理员用于系统的维护和管理具有除一般的新闻发布的权限外还有添加系统管理员和新闻添加员的功能,新闻添加员只有一般的发布新闻的功能。
4.7.1 页面设计
这个模块也有三个主要的ASP页面组成,既admin_admin.asp,admin_adminch.asp和admin_admindel.asp。admin_admin.asp是管理员管理的主页面,用于显示系统管理员信息和添加管理员。admin_adminch.asp用于修改管理员信息。admin_admindel.asp为删除管理员页面。具体设计见图 4.7所示:
图 4.7 管理员管理主页
4.7.2 管理员信息显示功能
这个功能的实现与新闻管理中新闻列表的显示工能相类似,主要功能由查询Admin表的记录集(rs)和重复区域(rs)两个Dreamweaver服务器行为实现。具体实现细节就不再累述。
4.7.3 添加管理员功能
在管理员管理主页的下半部分有添加管理员的功能小模块,其主要实现新闻添加员的添加,具体实现与发布新闻较类似,既通过定义查询Admin表的记录集(rs)和插入表单两个Dreamweaver服务器行为将有系统管理员填写的添加管理员信息写入系统数据库Admin表中,实现管理员的添加。
4.7.3管理员修改和删除功能
对于管理员管理模块而言,除了添加管理员外,修改和删除管理员功能也是必须的,本系统中admin_adminch.asp用于修改管理员信息,功能实现上与新闻管理模块中的修改新闻小模块类似,主要是admin_adminch.asp查询的是(Admin)管理员表,admin_admindel.asp文件实现删除管理员的功能,实现上也与新闻管理模块中的删除新闻小模块类似,这里就不再阐述了。
4.8本章小结
在这一章中,对后台管理的几个主要模块的设计和实现方法做了具体的介绍,首先介绍了管理员登录页面,分析了管理员登陆的设计方法,接着介绍了后台首页模块,分析了整个后台的页面布局格式,然后介绍了新闻添加模块,新闻管理模块及管理员管理模块,分析了新闻添加,修改及删除功能的具体实现的设计方法等。对每个功能模块都做了比较详细的介绍,并对某些模块在设计时的要点做了分析。
第五章 结束语
我们的设计课题是“基于Web的学校新闻发布系统”,通过差不多一个学期的努力,我们终于完成了设计任务。这一个学期以来,我真真切切的感受到学到了不少知识。以前我对ASP是不甚了解,但通过这次设计,使我对ASP有了一个比较系统的了解,同时,我对Dreamweaver这个网页开发工具的有了更深的认识。网页设计是一个循序渐进的过程,每个步骤都需要周密的考虑。通过这次设计还提高了我的动手操作能力和解决实际困难的能力,能够把学过的理论知识真正的运用到实践中去。
虽然这次设计任务是基本完成了,但是由于作者开发网页的能力有限,而且在设计时比较的仓促,所以本新闻发布系统在设计上和功能上还存在着许多不足的地方,如果有机会的话,在今后的学习中,我们会继续努力学习这方面的知识,争取把这个系统做的更加完善,功能更加丰富,更适应未来学校新闻发布的需要。
参考文献
[1]缪亮,李明. Dreamweaver MX 2004入门与进阶实例.吉林电子出版社.2005.3
[2]赵增敏,张迪. Dreamweaver MX动态网站设计.机械工业出版社.2004.2
[3]四维科技,胡标. ASP网络编程技术与实例.人民邮电出版社. 2004.8
[4]洪江龙,顾凌燕,徐军玲. Dreamweaver MX网页制作实用教程.2004.9
[5]宵金秀.ASP网络编程技术.清华大学出版社.2003.12
[6]王珊,陈红.数据库系统原理.清华大学出版社.2003.9
[7]邓文渊.ASP与网页数据库设计.中国铁道出版社
[8]康博.WEB应用程序开发新技术.人民邮电出版社.
。