ASP 网站制作全攻略:从零开始到项目实战
ASP (Active Server Pages) 是微软开发的一种服务器端脚本环境,用于创建动态交互式网页,虽然现在主流技术已经转向 ASP.NET,但理解 ASP 的基本原理对于学习 Web 开发历史和基础概念依然非常有价值。
本教程将分为以下几个部分:
- 第一部分:ASP 基础入门
- 什么是 ASP?
- 工作原理
- 开发环境搭建
- 你的第一个 ASP 页面
- 第二部分:ASP 核心语法
- VBScript 脚本语言基础
- 输出指令 (
<%= ... %>) - 注释
- 变量与常量
- 条件语句
- 循环语句
- 第三部分:ASP 内置对象
Response对象:向浏览器发送数据Request对象:获取浏览器提交的数据Session对象:用户会话管理Application对象:应用程序级数据共享Server对象:服务器端实用工具
- 第四部分:ASP 数据库交互
- ADO (ActiveX Data Objects) 简介
- 连接数据库 (Access 和 SQL Server)
- 执行 SQL 查询
- 读取和显示数据
- 添加、修改、删除数据
- 第五部分:高级与实战
- 包含文件 (
#include) - 使用 Cookie
- 一个简单的留言板项目实战
- 包含文件 (
- 第六部分:进阶与资源
第一部分:ASP 基础入门
什么是 ASP?
ASP 是一种服务器端技术,这意味着:
- 代码在服务器上执行:当用户请求一个
.asp文件时,Web 服务器会读取文件中的代码,执行它,然后将纯 HTML 结果发送到用户的浏览器。 - 浏览器看不到 ASP 代码:用户只能看到最终的 HTML、CSS 和 JavaScript,无法看到你的 ASP 逻辑,这保证了代码的安全性。
工作原理
- 用户在浏览器中输入
http://www.example.com/login.asp。 - 浏览器将请求发送到 Web 服务器。
- Web 服务器识别出
.asp扩展名,并将文件交给 ASP 引擎处理。 - ASP 引擎执行文件中的所有服务器端脚本(如
<% ... %>中的代码)。 - 脚本执行完毕,生成一个纯 HTML 文档。
- Web 服务器将这个 HTML 文档发送回用户的浏览器。
- 浏览器解析并显示 HTML 页面。
开发环境搭建
你需要一个本地环境来运行 ASP 代码,最经典和免费的选择是:
- Web 服务器:IIS (Internet Information Services),这是 Windows 自带的 Web 服务器。
- 数据库:Microsoft Access (简单) 或 SQL Server Express (功能更强)。
- 开发工具:记事本 (最简单)、Visual Studio Code (推荐,有语法高亮) 或 Visual Studio (功能最全)。
如何安装和配置 IIS (以 Windows 10/11 为例):
- 打开 "控制面板" -> "程序" -> "启用或关闭 Windows 功能"。
- 在列表中找到 “Internet 信息服务 (IIS)” 并勾选它。
- 展开它,确保勾选以下子项:
- World Wide Web 服务
- 应用程序开发功能
- ASP (这是核心!)
- ASP.NET (可选,但建议安装)
- 常见 HTTP 功能
- 默认文档
- HTTP 错误
- 应用程序开发功能
- World Wide Web 服务
- 点击“确定”进行安装,安装完成后,IIS 就已经运行了。
- 配置网站:
- 打开 “Internet 信息服务 (IIS) 管理器” (可以在开始菜单搜索)。
- 在左侧的“连接”面板中,右键点击“网站”,选择“添加网站”。
- 网站名称:给你的网站起个名字,如
MyASPWeb。 - 物理路径:选择一个文件夹作为你的网站根目录,
D:\WebProjects\MyASPWeb。 - 端口:默认是 80,80 端口被占用,可以改为其他端口,如 8080。
- 主机名:可以留空,之后通过
http://localhost:8080访问。 - 点击“确定”。
- 设置默认文档:在左侧选中你刚刚创建的网站,在中间的“功能视图”中双击“默认文档”,点击“添加”,输入
index.asp或default.asp,并上移到最顶部。
你的第一个 ASP 页面
-
在你刚才设置的物理路径(如
D:\WebProjects\MyASPWeb)下,创建一个名为index.asp的文件。 -
用记事本或 VS Code 打开它,输入以下代码:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>我的第一个 ASP 页面</title> </head> <body> <h1>欢迎来到 ASP 世界!</h1> <p>当前服务器时间是:</p> <% ' 这是一个 VBScript 注释 ' 使用 Date() 函数获取当前日期和时间 Dim currentTime currentTime = Now() ' 使用 Response.Write 输出内容到浏览器 Response.Write("<strong>" & currentTime & "</strong>") %> </body> </html> -
保存文件。
-
打开浏览器,访问
http://localhost:8080/index.asp(如果你的端口号是 8080)。
你应该能看到页面标题,下面显示着“欢迎来到 ASP 世界!”,当前服务器时间是:”后面跟着一个动态更新的、粗体的日期和时间,这个时间是由服务器上的 ASP 代码生成的,每刷新一次都会变,恭喜你,你的第一个 ASP 程序成功了!
第二部分:ASP 核心语法
ASP 主要使用 VBScript 作为其默认脚本语言,以下是一些基础语法。
输出指令
这是最常用的方式,用于快速输出变量或表达式的值。
<%= "你好,世界!" %> <%= 1 + 1 %> <%= Now() %>
注释
- 服务器端注释 (VBScript 语法): 或
REM - 客户端注释 (HTML 语法):
<!-- ... -->
<%
' 这是一个服务器端注释,不会发送到浏览器
REM 这也是服务器端注释
%>
<!-- 这是一个客户端注释,用户在查看源代码时可以看到 -->
变量与常量
- 声明变量:使用
Dim关键字,ASP 是弱类型语言,声明时不需要指定类型。 - 赋值:使用 。
- 命名规则:以字母开头,不包含特殊字符。
<%
Dim myName
Dim userAge, score
myName = "张三"
userAge = 25
score = 95.5
' 输出变量
Response.Write("姓名: " & myName & "<br>")
Response.Write("年龄: " & userAge & "<br>")
Response.Write("分数: " & score & "<br>")
%>
条件语句
根据条件执行不同的代码块。
<%
Dim hour
hour = Hour(Now())
If hour < 12 Then
Response.Write("早上好!")
ElseIf hour < 18 Then
Response.Write("下午好!")
Else
Response.Write("晚上好!")
End If
%>
循环语句
重复执行一段代码。
-
For...Next 循环:用于已知次数的循环。
<ul> <% Dim i For i = 1 To 5 Response.Write("<li>这是第 " & i & " 个列表项</li>") Next %> </ul> -
Do...Loop 循环:用于未知次数的循环。
<% Dim counter counter = 1 Do While counter <= 5 Response.Write("循环次数: " & counter & "<br>") counter = counter + 1 Loop %>
第三部分:ASP 内置对象
ASP 提供了几个内置对象,让你可以轻松与 Web 服务器和浏览器交互。
Response 对象
负责将信息发送到浏览器。
Response.Write()(最常用)。Response.Redirect("URL"):将用户重定向到另一个页面。Response.ContentType:设置响应内容的类型,如text/html,text/css。
<%
' 5秒后自动跳转到另一个页面
Response.Write("即将跳转到首页...")
Response.Redirect("index.asp")
%>
Request 对象
负责从浏览器获取数据。
Request.Form:获取通过POST方法提交的表单数据。Request.QueryString:获取通过 URLGET方法提交的数据(如page.asp?id=123)。Request.ServerVariables:获取服务器环境变量,如用户的 IP 地址、浏览器类型等。
示例:一个简单的登录表单 login.html
<!DOCTYPE html>
<html>
<body>
<form action="check_login.asp" method="post">
用户名: <input type="text" name="username"><br>
密码: <input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
处理登录的 check_login.asp
<%
' 从 Request.Form 中获取表单数据
Dim username, password
username = Request.Form("username")
password = Request.Form("password")
' 简单验证
If username = "admin" And password = "123456" Then
Response.Write("登录成功!欢迎你," & username)
Else
Response.Write("登录失败!用户名或密码错误。")
End If
%>
Session 对象
用于存储特定用户在会话期间的信息,用户关闭浏览器后,Session 会被销毁。
Session("变量名") = 值:设置 Session 变量。Session("变量名"):读取 Session 变量。Session.Abandon():销毁当前会话。
<!-- login_success.asp -->
<%
' 假设登录成功
Session("isLoggedIn") = True
Session("user") = "张三"
Response.Write("登录成功!")
Response.Write("<a href='profile.asp'>查看我的主页</a>")
%>
<!-- profile.asp -->
<%
' 检查用户是否已登录
If Session("isLoggedIn") <> True Then
Response.Redirect("login.html")
End If
' 显示用户信息
Response.Write("欢迎, " & Session("user"))
%>
Application 对象
用于存储所有用户共享的应用程序级数据,只要应用程序在运行,Application 变量就存在。
Application("变量名") = 值:设置 Application 变量。- 注意:因为所有用户共享,修改
Application变量时需要加锁,防止并发冲突。
<%
' 锁定 Application,防止其他用户同时修改
Application.Lock()
' 访问人数加 1
Application("visitors") = Application("visitors") + 1
' 解锁
Application.Unlock()
Response.Write("本站总访问人数: " & Application("visitors"))
%>
Server 对象
提供服务器端的实用工具。
Server.MapPath("虚拟路径"):将网站的虚拟路径转换为服务器上的物理路径。非常重要!Server.CreateObject("组件名"):创建 COM 对象实例。
<%
' 假设你的网站在 D:\WebProjects\MyASPWeb
' 获取当前文件所在的物理路径
Dim physicalPath
physicalPath = Server.MapPath(".")
Response.Write("当前文件的物理路径是: " & physicalPath)
' 获取数据库文件的物理路径
Dim dbPath
dbPath = Server.MapPath("database.mdb")
Response.Write("<br>数据库文件的物理路径是: " & dbPath)
%>
第四部分:ASP 数据库交互
这是 ASP 最强大的功能之一,通过 ADO (ActiveX Data Objects) 来操作数据库。
ADO 简介
ADO 提供了一组对象来访问数据库,核心对象有三个:
Connection:建立与数据库的连接。Recordset:存储从数据库中查询到的结果集(像一个内存中的表格)。Command:执行 SQL 命令(如查询、更新)。
连接数据库
以 Access 数据库为例。
- 创建一个 Access 数据库,
D:\WebProjects\MyASPWeb\db.mdb。 - 在
db.mdb中创建一个表users,包含id(自动编号, 主键),name(文本),email(文本)。 - 插入几条测试数据。
连接代码 (使用 DSN-Less 连接方式,更灵活):
<%
Dim conn, connStr, dbPath
' 获取数据库的物理路径
dbPath = Server.MapPath("db.mdb")
' 定义连接字符串
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath
' 创建 Connection 对象
Set conn = Server.CreateObject("ADODB.Connection")
' 打开连接
conn.Open connStr
' 如果连接成功,可以在这里执行操作
' ...
' 操作完成后关闭连接
conn.Close
Set conn = Nothing
%>
执行 SQL 查询并显示数据
<%
' --- 1. 连接数据库 (复用上面的代码) ---
Dim conn, connStr, dbPath, rs
dbPath = Server.MapPath("db.mdb")
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connStr
' --- 2. 创建 Recordset 对象并执行查询 ---
Set rs = Server.CreateObject("ADODB.Recordset")
Dim sql
sql = "SELECT id, name, email FROM users"
rs.Open sql, conn
' --- 3. 遍历并显示数据 ---
If Not rs.EOF Then ' 检查是否有记录
Response.Write("<table border='1'>")
Response.Write("<tr><th>ID</th><th>姓名</th><th>邮箱</th></tr>")
Do While Not rs.EOF
Response.Write("<tr>")
Response.Write("<td>" & rs("id") & "</td>")
Response.Write("<td>" & rs("name") & "</td>")
Response.Write("<td>" & rs("email") & "</td>")
Response.Write("</tr>")
rs.MoveNext ' 移动到下一条记录
Loop
Response.Write("</table>")
Else
Response.Write("数据库中没有数据。")
End If
' --- 4. 关闭并释放对象 ---
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
%>
添加、修改、删除数据
这些操作通常通过 SQL 的 INSERT, UPDATE, DELETE 语句完成。
添加数据示例:
<%
' 假设从表单获取了数据
Dim newName, newEmail
newName = Request.Form("name")
newEmail = Request.Form("email")
If newName <> "" And newEmail <> "" Then
Dim conn, connStr, dbPath, sql
dbPath = Server.MapPath("db.mdb")
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connStr
' 使用参数化查询防止 SQL 注入 (这里为了简单,用字符串拼接,实际开发中务必使用参数化查询)
sql = "INSERT INTO users (name, email) VALUES ('" & newName & "', '" & newEmail & "')"
conn.Execute(sql)
conn.Close
Set conn = Nothing
Response.Write("数据添加成功!")
End If
%>
第五部分:高级与实战
包含文件 (#include)
为了代码复用和模块化,可以将常用代码(如页头、页尾、数据库连接)单独放在文件中,然后用 #include 指令包含进来。
header.inc
<!DOCTYPE html>
<html>
<head>我的网站</title>
</head>
<body>
<header>
<h1>网站导航</h1>
<ul>
<li><a href="index.asp">首页</a></li>
<li><a href="about.asp">关于我们</a></li>
</ul>
</header>
<main>
footer.inc
</main>
<footer>
<p>© 2025 我的网站. All rights reserved.</p>
</footer>
</body>
</html>
index.asp
<!--#include file="header.inc"--> <h2>欢迎来到首页</h2> <p>这里是首页内容。</p> <!--#include file="footer.inc"-->
使用 Cookie
Cookie 是存储在客户端浏览器中的小型文本文件。
设置 Cookie:
<%
Response.Cookies("userName") = "李四"
Response.Cookies("userName").Expires = Date() + 30 ' 设置30天后过期
%>
读取 Cookie:
<%
If Request.Cookies("userName") <> "" Then
Response.Write("欢迎回来, " & Request.Cookies("userName"))
Else
Response.Write("您是第一次访问本站。")
End If
%>
项目实战:简易留言板
这个项目将整合前面学到的所有知识:表单提交、Request 对象、数据库操作。
数据库设计
创建一个 messages 表,包含 id (自动编号), author (文本), content (备注/文本), post_time (日期/时间)。
post_message.asp (提交留言的表单页面)
<!DOCTYPE html>
<html>
<body>
<h2>发表留言</h2>
<form action="save_message.asp" method="post">
姓名: <input type="text" name="author"><br>
留言内容:<br>
<textarea name="content" rows="5" cols="30"></textarea><br>
<input type="submit" value="提交">
</form>
</body>
</html>
save_message.asp (处理并保存留言)
<%
' 获取表单数据
Dim author, content
author = Request.Form("author")
content = Request.Form("content")
If author <> "" And content <> "" Then
' 连接数据库
Dim conn, connStr, dbPath, sql
dbPath = Server.MapPath("db.mdb")
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connStr
' 插入数据 (注意:实际开发请使用参数化查询防止SQL注入)
sql = "INSERT INTO messages (author, content, post_time) VALUES ('" & author & "', '" & content & "', Now())"
conn.Execute(sql)
' 关闭连接
conn.Close
Set conn = Nothing
Response.Write("留言发表成功!<a href='view_messages.asp'>查看留言</a>")
Else
Response.Write("请填写完整信息!<a href='javascript:history.back()'>返回</a>")
End If
%>
view_messages.asp (查看所有留言)
<!DOCTYPE html>
<html>
<head>留言板</title>
</head>
<body>
<h2>所有留言</h2>
<a href="post_message.asp">发表新留言</a>
<hr>
<%
' 连接数据库
Dim conn, connStr, dbPath, rs, sql
dbPath = Server.MapPath("db.mdb")
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connStr
' 查询数据
Set rs = Server.CreateObject("ADODB.Recordset")
sql = "SELECT author, content, post_time FROM messages ORDER BY post_time DESC"
rs.Open sql, conn
' 显示数据
If Not rs.EOF Then
Do While Not rs.EOF
Response.Write("<div style='border:1px solid #ccc; padding:10px; margin-bottom:10px;'>")
Response.Write("<strong>作者:</strong> " & rs("author") & "<br>")
Response.Write("<strong>时间:</strong> " & rs("post_time") & "<br>")
Response.Write("<p>" & rs("content") & "</p>")
Response.Write("</div>")
rs.MoveNext
Loop
Else
Response.Write("暂无留言。")
End If
' 关闭并释放
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
%>
</body>
</html>
第六部分:进阶与资源
进阶方向
- ASP.NET:这是微软目前的主流 Web 开发框架,它使用更强大的 C# 或 VB.NET 语言,并提供了现代化的开发模型(如 MVC, Web Forms, Razor Pages),如果你打算深入学习微软技术栈,ASP.NET 是必经之路。
- 安全性:学习如何防止 SQL 注入、跨站脚本攻击等 Web 安全威胁。参数化查询是防止 SQL 注入的关键。
- 组件开发:学习编写自己的 COM 组件,以实现更复杂的功能。
- 与 XML 交互:ASP 可以轻松读取和生成 XML 文件。
学习资源
- MSDN (Microsoft Developer Network):ASP 的官方文档,最权威但可能比较晦涩。
- W3Schools:提供简洁的 ASP 教程和示例。
- 菜鸟教程:中文入门教程,适合快速上手。
- GitHub:搜索 "ASP Classic Examples",可以找到很多开源的 ASP 项目供学习参考。
ASP 是一个经典且强大的技术,它奠定了动态 Web 开发的基础,通过本教程,你已经掌握了从环境搭建、基础语法、内置对象到数据库交互的全过程,虽然现在用它来做新项目的人不多,但理解它的工作原理对于成为一名全面的 Web 开发者非常有帮助,祝你学习愉快!
