zoukankan      html  css  js  c++  java
  • 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 秒。

    20150815001

    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 字段),如下图:

    20150815002

    我们的例子(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
    %>

    运行效果如下:

    20150815003

    在这段代码中我们用到了两次 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 后,效果如下:

    20150815004


    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 中运行效果如下:
    20150815005

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

    20150815006

    而 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 中运行后,返回了服务器上的完整路径,如下:

    20150815007


    示例代码下载

    Server.rar

  • 相关阅读:
    TCP 和 UDP 的区别
    python--各种锁机制归纳整理
    七牛的配置
    全文检索的配置
    记一则css3计算
    C# 生成序号不足补0
    JavaScript Post提交数据并跳转到页面(模拟Form表单提交)
    Swift 修改UITextField.Placeholder颜色
    Swift 延迟运行代码
    Swift 动画片段
  • 原文地址:https://www.cnblogs.com/pchmonster/p/4733211.html
Copyright © 2011-2022 走看看