ASP入门(十二)-Server对象

Server 对象用于处理服务器上的一些特殊任务,例如,创建组件实例、获取文件路径、执行ASP脚本文件等。

Server 对象是体现 ASP 强大功能的一个对象,之前介绍的对象都是针对获取、请求以及简单存储信息而设计的,之所以说它强大,有两个原因第一可以通过 Server 对象创建服务器上所具有的组件的实例,从而扩展 ASP 功能;第二 Server 对象可以执行服务器上的 ASP 文件,从而使得一些大型系统的架构变得简单。

Server 的属性

Server 对象只有一个属性 ScriptTimeout,设置或返回当前页面执行的超时时间()。

设定完毕后,当当前页面在服务器上的执行时间超过这个时间,则会强制终止当前页面的运行。因此如果某个页面可能运行时间较长的话,就需要手动来增大这个值,来保证页面可以正常执行完毕。

下面的例子(Server_ScriptTimeout.asp)演示如何设置及取回 ScriptTimeout 值,主要代码如下:

<h3>如果不设定ScriptTimeout属性,IIS中默认值为 <%=Server.ScriptTimeout%> 秒</h3>
<h3>手动属性设置为200秒,现在值为 <%=Server.ScriptTimeout%> 秒</h3>

显示结果如下,IIS默认的 ScriptTimeout 属性值为 90 秒。

Server 的方法

方法 描述
CreateObject(progID) 创建由 progID 标识的对象的一个实例
Execute(path) 停止当前页面的执行,把控制转到 path 中指定的网页。在该页面执行完毕后,控制传递回原先的页面,并继续执行 Execute 后面的语句。
GetLastError() 返回 ASPError 对象,描述发生错误的原因
HTMLEncode(string) 对字符串进行 HTML 转义
MapPath(path) 返回在 Path 中指定的文件或资源的完整物理路径和文件名
Transfer(path) 停止当前页面的执行,把控制转到 path 中指定的页面
URLEncode(string) 对字符串进行 URL 转义

CreateObject 方法,用于创建服务器上的组件的实例。最常用的就是创建数据库操作组件的ADO的实例,我们手头刚刚创建了一个 Access 数据库 ServerInfo.accdb,这个数据库有一个名为 ServerMethods 的表,表里面记录了 Server 对象的方法(Method 字段)及描述信息(Description 字段),如下图:

我们的例子(Server_CreateObject.asp)主要是读取出表的全部内容,部分代码如下:

<%
Dim oConn, sConnString, sDBPath, oRs, sql
‘数据库文件名
sDBPath = "ServerInfo.accdb"
‘数据连接字符串
sConnString = "Provider=Microsoft.ACE.OLEDB.15.0;Data Source=" & Server.MapPath(sDBPath)
‘创建 Connection 对象的实例 oConn
Set oConn = Server.CreateObject("ADODB.Connection")
‘调用 oConn 的 Open 方法来打开连接
oConn.Open sConnString
‘SQL语句,查询所有记录
sql = "SELECT * FROM ServerMethods"
‘建立 ADODB.RecordSet 对象实例 oRs
Set oRs = Server.CreateObject("ADODB.RecordSet")
‘通过SQL语句获得记录集
oRs.Open sql, oConn
Do While Not oRs.EOF
  Response.Write("<tr>")
  Response.Write("<td>" & oRs("Method") & "</td>")
  Response.write("<td>" & oRs("Description") & "</td>")
  Response.Write("</tr>")
  oRs.MoveNext
Loop
oRs.Close
Set oRs = Nothing
oConn.Close
Set oConn = Nothing
%>

运行效果如下:

在这段代码中我们用到了两次 CreateObject,如下代码:

...
‘创建 Connection 对象的实例 oCon
Set oConn = Server.CreateObject("ADODB.Connection")
...
‘建立 ADODB.RecordSet 对象实例 oRs
Set oRs = Server.CreateObject("ADODB.RecordSet")
...

在后面的介绍会详细介绍数据库方面的知识。


Execute、Transfer 方法

两者的作用都是停止当前页面的运行,并传递到另外一个一面,其不同在于,Execute 方法是在另外一个页面执行完毕后回到现在的页面继续向下执行,而 Transfer 方法是在另外一个页面执行完毕后即停止运行了。

我们下面的例子将说明 Execute 和 Transfer 方法的区别,我们 建立两个 ASP 文件(File1.asp 和 File2.asp)

File1.asp 代码如下:

...
<h3>Server.Execute演示</h3>
<%
Response.Write("I am in File 1!<br>")
Server.Execute("File2.asp")
Response.Write("I am back in File 1!")
%>
<hr>
<h3>Server.Transfer演示</h3>
<%
Response.Write("I am in File 1!<br>")
Server.Transfer("File2.asp")
Response.Write("I am back in File 1!")
%>
...

File2.asp 代码如下:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Response.Write("I am in File 2!<br>")
%>

执行 File1.asp 后,效果如下:


Response.Redirect 和 Server.Transfer 方法比较

首先两者都是将页面的控制权转移到另外的页面进行处理。但是还是有不同的地方。

1、Redirect 方法是在HTTP头中输出代码,让浏览器重新请求要转向的目标页面,而 Server.Transfer 方法则是在服务器上直接将当前的控制权转给目标页面,在客户端并不会意识到当前的页面已经发生了变化。

2、Redirect 方法可以重定向到任何的 URL,而 Transfer 方法是在服务器上转移控制权,因此只可以 Transfer 到本地服务器存在的页面。

3、在使用 Transfer 方法时,会将当前页面的事务以及 Request 各个集合相应传递到目标页面,而 Redirect 方法仅仅是通知浏览器开启一个新的请求。


URLEncode 和 HTMLEncode 方法

两者都是对某个字符串进行转义的操作。

下面的代码(ServerEncode.asp)展示了两个转义方法的区别和效果:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>HTMLEncode 和 URLEncode 的应用</title>
</head>
<body>
<p>
<%
Response.write(Server.HTMLEncode("The image tag: <img>"))
%>
</p>
<p>
<%
Response.Write(Server.URLEncode("http://www.baidu.com"))
%>
</p>
</body>
</html>

在 Firefox 中运行效果如下:

在 Firefox 中“查看页面源代码”中我们发现 “<img>” 之所以能正常显示,而不被识别成 HTML 标签,是将 “<”符号转义为”&lt;“,将”>”符号转义为”&gt;“。

而 URLEncode 则是把空格转化为+号,非字母数字符号转义为十六进制表示。



MapPath 方法

在上面的 CreateObject 方法讲解中,有一条语句用到了 MapPath 方法,代码如下:

‘数据库文件名
sDBPath = "ServerInfo.accdb"
‘数据连接字符串
sConnString = "Provider=Microsoft.ACE.OLEDB.15.0;Data Source=" & Server.MapPath(sDBPath)

此方法用户获得服务器上指定文件在服务器上的物理路径。例如上面提到的 ServerInfo.accdb 的路径是啥?

我们通过实例(ServerMapPath.asp)展示,主要代码如下:

<%=Server.MapPath("ServerInfo.accdb")%>

在 Firefox 中运行后,返回了服务器上的完整路径,如下:


示例代码下载

Server.rar

时间: 2024-11-03 22:37:13

ASP入门(十二)-Server对象的相关文章

[WebGL入门]十二,模型数据和顶点属性

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 顶点属性的意思 上次的文章中,介绍了一下从着色器的生成,编译,到程序对象的生成和着色器的连接.这次,简单的说一下模型数据的定义和顶点属性的处理.另外,介绍一下根据模型数据生成VBO的方法.VBO的使用要比生成难理解一些,但是不要担心,后面会慢慢说明.接下来看一下顶点属性.顶点属性,说的简单点,

ASP 三十二条精华代码 (1)

ASP 三十二条精华代码 (1) 2009-08-10 09:53:03  www.hackbase.com  来源:互联网 1. oncontextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键 <table border oncontextmenu=return(false)><td>no</table> 可用于Table 2. <body onselectstart="return

Android入门(十二)SQLite事务、升级数据库

原文链接:http://www.orlion.ga/610/ 一.事务 SQLite支持事务,看一下Android如何使用事务:比如 Book表中的数据都已经很老了,现在准备全部废弃掉替换成新数据,可以先使用delete()方法将Book表中的数据删除, 然后再使用insert()方法将新的数据添加到表中.我们要保证的是,删除旧数据和添加新数据的操作必须一起完成,否则就还要继续保留原来的旧数据.                 Button replaceData = (Button) find

ASP入门(二十三)- 数据库插入、更新和删除操作

我们这里介绍如何使用 Recordset 对象进行插入.更新和删除操作,顺便和 SQL 语句对比. 插入记录 AddNew 方法用于插入一条记录,首先打开一个记录集,并且这个记录具备可写特性,而后调用 AddNew 方法告诉 ADO 要插入一条记录,而后分别设置各个字段的值,最后调用 Update 方法将插入的记录生效. 还是直接看具体代码和注释吧(AddNew.asp),如下: <!--#include file="../include/conn.asp"--> <

ES6入门十二:Module(模块化)

webpack4打包配置babel7转码ES6 Module语法与API的使用 import() Module加载实现原理 Commonjs规范的模块与ES6模块的差异 ES6模块与Nodejs模块相互加载 模块循环加载 一.webpack4打包配置babel7转码ES6 1.webpack.config.js 在webpack中配置babel转码其实就是在我之前的webpack配置解析基础上添加babel的加载器,babel的具体转码配置在之前也有一篇详细的博客做了解析: webpack安装与

【cocos2d-js官方文档】十二、对象缓冲池12月12日

cc.pool的使用场景 经常创建和销毁的元素,例如打飞机游戏里面的子弹等. 不适用的场景:不是很经常创建的物体,比如背景,建筑等. 如何使用cc.pool 让你的类支持cc.pool 首先,你需在需要使用cc.pool来管理的类中实现reuse和unuse方法,cc.pool在执行putInPool时将调用该对象的unuse方法,可以在unuse中完成进入回收池前的操作,reuse是当你要从回收池中取出对象时的重新初始化操作,你可以将这个对象初始化为重新可用的状态. var MySprite

【cocos2d-js官方文档】十二、对象缓冲池

cc.pool的使用场景 经常创建和销毁的元素,例如打飞机游戏里面的子弹等. 不适用的场景:不是很经常创建的物体,比如背景,建筑等. 如何使用cc.pool 让你的类支持cc.pool 首先,你需在需要使用cc.pool来管理的类中实现reuse和unuse方法,cc.pool在执行putInPool时将调用该对象的unuse方法,可以在unuse中完成进入回收池前的操作,reuse是当你要从回收池中取出对象时的重新初始化操作,你可以将这个对象初始化为重新可用的状态. var MySprite

ASP入门(二)-创建Access数据库

通常来说,ASP程序是搭配Access数据库来使用的,因此在安装完ASP环境后,为了方便建立和管理数据库,我们还需要安装Access数据库. Access是Microsoft Office家族中的一员,主要提供了一个轻量级的数据库解决方案. 本人安装的是Office 2013版本的Access(SW_DVD5_Office_Professional_Plus_2013_64Bit_ChnSimp_MLF_X18-55285.ISO),普及率最高的还是Office 2003,如果你使用XP或者Wi

SpringBoot入门 (十二) 定时任务

本文记录在SpringBoot中使用定时任务. 在我们的项目中,经常需要用到定时任务去帮我们做一些事情,比如服务状态监控,业务数据状态的更改等,SpringBoot中实现定时任务有2中方案,一种是自带的,我们只需要加上注解即可:另一种是集成Quartz来实现定时任务. 一 SpringBoot 提供的定时任务 在SpringBoot的starter包中已经提供了对定时任务的支持,我们很容易实现定时任务.修改pom.xml文件,加入如下内容,引入依赖: <dependency> <grou

Vue入门十二、路由的跳转

路由之间的跳转有再种:1.通过标签<router-link to='/login'>去登录</router-link>实现跳转2.通过js实现:this.$router.push({path:'/buy'})this.$router.replace({path:'/buy'})2.1push与replace的区别push会向history插入新记录replace不会插入history历史记录,如果返回上一页,则会跳转到上上一页中.上一页是不存在的返回上一页面:this.$route