核心方法概览
| 方法 | 功能描述 | 适用场景 | 特点 |
|---|---|---|---|
Server.Execute |
在当前页面执行另一个ASP页面的代码,执行完毕后返回当前页面继续执行。 | 模块化页面(如页头、页脚、侧边栏),需要共享同一个请求上下文。 | 共享Request、Response等对象,变量可以互相传递。 |
Server.Transfer |
将当前页面的执行流程完全转移到另一个ASP页面,浏览器地址栏不会改变。 | 页面重定向,希望用户看到的是当前URL,但内容由新页面生成。 | 共享请求上下文,性能优于重定向,但无法跳转到其他网站。 |
Response.Redirect |
向浏览器发送一个“302 Found”或“301 Moved Permanently”的HTTP头,要求浏览器去访问新的URL。 | 完整的页面跳转,用户会看到新的URL,常用于登录后跳转、表单提交后跳转。 | 浏览器会发起一个新的请求,不共享原始请求的上下文(如Request.Form会丢失)。 |
| XMLHTTP (Server-Side) | 在服务器端发起一个HTTP请求,获取另一个网页(或任何URL)的HTML内容或数据。 | 获取外部网页内容、调用Web API、爬取数据、整合信息。 | 完全在服务器端完成,用户无感知,可以跨域获取数据。 |
Server.Execute
这种方法就像在当前页面的某个位置“嵌入”并执行另一个ASP文件。

语法:
<%
Server.Execute("path/to/your_page.asp")
%>
示例:
假设你的主页面是 index.asp,页头是 header.asp。
header.asp:
<div style="background-color: #f0f0f0; padding: 10px; border: 1px solid #ccc;">
<h1>这是网站的公共页头</h1>
<p>欢迎访问!</p>
</div>
index.asp:

<%@ Language=VBScript %>
<html>
<head>Server.Execute 示例</title>
</head>
<body>
<h2>这是主页面的内容</h2>
<p>在下面,我们将调用页头文件:</p>
<%
' 调用并执行 header.asp
Server.Execute("header.asp")
%>
<hr>
<p>这是主页面的底部内容,调用 header.asp 执行完毕后,我们回到了这里继续执行。</p>
</body>
</html>
特点:
- 共享上下文:在
header.asp中可以直接使用index.asp中定义的变量。 - URL不变:浏览器地址栏始终显示
index.asp。 - 适用:非常适合构建模板,将公共部分(如导航、页脚)抽离成单独文件。
Server.Transfer
这种方法将整个页面的控制权交给另一个ASP文件,当前页面的代码停止执行。
语法:
<%
Server.Transfer("path/to/your_page.asp")
' 下一行代码将不会被执行
Response.Write("这一行不会显示")
%>
示例:
假设有一个登录逻辑处理页面 login_process.asp,验证成功后跳转到用户主页。

login_process.asp (简化版):
<%@ Language=VBScript %>
<%
' 假设从表单获取了用户名和密码
Dim username, password
username = Request.Form("username")
password = Request.Form("password")
If username = "admin" And password = "123456" Then
' 登录成功,将控制权转移到用户主页
Server.Transfer("user_home.asp")
Else
' 登录失败,可以重定向回登录页
Response.Redirect("login.asp?error=1")
End If
%>
user_home.asp:
<%@ Language=VBScript %>
<html>
<body>
<h1>欢迎, <%= Request.Form("username") %>!</h1>
<p>您已成功登录。</p>
<p>注意:浏览器地址栏显示的还是 login_process.asp。</p>
</body>
</html>
特点:
- 共享上下文:
user_home.asp可以通过Server.Execute方式获取login_process.asp的表单数据 (Request.Form)。 - URL不变:用户体验上,URL没有改变,但页面内容已经完全切换。
- 限制:只能在同一个Web应用程序内部进行跳转,不能跳转到外部网站。
Response.Redirect
这是最常用、最简单的“跳转”方法,它告诉浏览器去访问一个新地址。
语法:
<%
Response.Redirect("http://www.example.com/new_page.asp")
' 或者跳转到本站其他页面
' Response.Redirect("login.asp")
%>
示例: 用户提交表单后,无论成功与否,都跳转到一个感谢页面。
submit_form.asp:
<%@ Language=VBScript %>
<%
' ... 处理表单数据的代码 ...
' 假设处理完成
Dim isSuccessful
isSuccessful = True ' 假设成功了
If isSuccessful Then
Response.Redirect("thank_you.asp?status=success")
Else
Response.Redirect("thank_you.asp?status=failed")
End If
%>
thank_you.asp:
<%@ Language=VBScript %>
<html>
<body>
<%
Dim status
status = Request.QueryString("status")
If status = "success" Then
Response.Write("<h3>提交成功!感谢您的参与。</h3>")
Else
Response.Write("<h3>提交失败,请重试。</h3>")
End If
%>
</body>
</html>
特点:
- 不共享上下文:浏览器会发起一个全新的请求。
Request.Form、Request.QueryString等原始请求的数据会丢失,数据需要通过URL参数(Query String)或Session来传递。 - URL改变:浏览器地址栏会更新为新的URL。
- 通用性强:可以跳转到任何URL,包括外部网站。
使用 XMLHTTP (Microsoft.XMLHTTP)
这种方法在服务器端模拟浏览器去访问一个URL,获取其返回的内容,然后可以将内容显示给用户或进行其他处理。
语法:
<%
' 创建XMLHTTP对象
Dim xmlHttp
Set xmlHttp = Server.CreateObject("Microsoft.XMLHTTP")
' 设置请求方法和URL
xmlHttp.Open "GET", "http://api.example.com/data", False ' False表示同步请求
' 发送请求
xmlHttp.Send()
' 检查请求是否成功
If xmlHttp.Status = 200 Then
' 获取返回的文本内容
Dim responseText
responseText = xmlHttp.responseText
' 可以在这里处理 responseText,例如解析JSON或XML
' 然后输出给用户
Response.Write("从API获取的数据是:<br>")
Response.Write(responseText)
Else
Response.Write("获取数据失败,状态码:" & xmlHttp.Status)
End If
' 释放对象
Set xmlHttp = Nothing
%>
特点:
- 服务器端完成:用户不知道数据是从哪里来的,对用户完全透明。
- 可跨域:可以请求任何公网上的URL或API。
- 获取数据:主要用于获取数据(如HTML、JSON、XML),而不是进行页面跳转。
- 注意:同步请求会阻塞当前ASP页面的执行,直到外部请求完成,对于耗时操作,建议使用异步请求(将
Open的第三个参数设为True),但异步处理更复杂。
总结与选择建议
| 方法 | 共享请求上下文 | 浏览器URL改变 | 主要用途 | 推荐场景 |
|---|---|---|---|---|
Server.Execute |
是 | 否 | 模块化、包含页面内容 | 构建网站模板,如包含页头、页脚、导航栏。 |
Server.Transfer |
是 | 否 | 页面流程控制 | 登录验证后跳转、多步骤表单的单页面切换。 |
Response.Redirect |
否 | 是 | 完整页面跳转 | 表单提交后跳转、登录后跳转到新页面、退出登录。 |
XMLHTTP |
否 | 否 | 服务器端获取数据 | 调用Web API、抓取外部网页内容、整合数据。 |
- 想在当前页面某个位置显示另一个ASP文件的内容?用
Server.Execute。 - 想在不改变URL的情况下,让另一个ASP文件接管当前页面?用
Server.Transfer。 - 想让浏览器跳转到一个全新的页面(可以是外部网站)?用
Response.Redirect。 - 想在后台获取某个网页或API的数据,并展示给用户?用
XMLHTTP。
