ASP 网站制作全攻略:从零开始到项目实战

ASP (Active Server Pages) 是微软开发的一种服务器端脚本环境,用于创建动态交互式网页,虽然现在主流技术已经转向 ASP.NET,但理解 ASP 的基本原理对于学习 Web 开发历史和基础概念依然非常有价值。

本教程将分为以下几个部分:

  1. 第一部分:ASP 基础入门
    • 什么是 ASP?
    • 工作原理
    • 开发环境搭建
    • 你的第一个 ASP 页面
  2. 第二部分:ASP 核心语法
    • VBScript 脚本语言基础
    • 输出指令 (<%= ... %>)
    • 注释
    • 变量与常量
    • 条件语句
    • 循环语句
  3. 第三部分:ASP 内置对象
    • Response 对象:向浏览器发送数据
    • Request 对象:获取浏览器提交的数据
    • Session 对象:用户会话管理
    • Application 对象:应用程序级数据共享
    • Server 对象:服务器端实用工具
  4. 第四部分:ASP 数据库交互
    • ADO (ActiveX Data Objects) 简介
    • 连接数据库 (Access 和 SQL Server)
    • 执行 SQL 查询
    • 读取和显示数据
    • 添加、修改、删除数据
  5. 第五部分:高级与实战
    • 包含文件 (#include)
    • 使用 Cookie
    • 一个简单的留言板项目实战
  6. 第六部分:进阶与资源

第一部分:ASP 基础入门

什么是 ASP?

ASP 是一种服务器端技术,这意味着:

  • 代码在服务器上执行:当用户请求一个 .asp 文件时,Web 服务器会读取文件中的代码,执行它,然后将纯 HTML 结果发送到用户的浏览器。
  • 浏览器看不到 ASP 代码:用户只能看到最终的 HTML、CSS 和 JavaScript,无法看到你的 ASP 逻辑,这保证了代码的安全性。

工作原理

  1. 用户在浏览器中输入 http://www.example.com/login.asp
  2. 浏览器将请求发送到 Web 服务器。
  3. Web 服务器识别出 .asp 扩展名,并将文件交给 ASP 引擎处理。
  4. ASP 引擎执行文件中的所有服务器端脚本(如 <% ... %> 中的代码)。
  5. 脚本执行完毕,生成一个纯 HTML 文档。
  6. Web 服务器将这个 HTML 文档发送回用户的浏览器。
  7. 浏览器解析并显示 HTML 页面。

开发环境搭建

你需要一个本地环境来运行 ASP 代码,最经典和免费的选择是:

  • Web 服务器IIS (Internet Information Services),这是 Windows 自带的 Web 服务器。
  • 数据库Microsoft Access (简单) 或 SQL Server Express (功能更强)。
  • 开发工具记事本 (最简单)、Visual Studio Code (推荐,有语法高亮) 或 Visual Studio (功能最全)。

如何安装和配置 IIS (以 Windows 10/11 为例):

  1. 打开 "控制面板" -> "程序" -> "启用或关闭 Windows 功能"
  2. 在列表中找到 “Internet 信息服务 (IIS)” 并勾选它。
  3. 展开它,确保勾选以下子项:
    • World Wide Web 服务
      • 应用程序开发功能
        • ASP (这是核心!)
        • ASP.NET (可选,但建议安装)
      • 常见 HTTP 功能
        • 默认文档
        • HTTP 错误
  4. 点击“确定”进行安装,安装完成后,IIS 就已经运行了。
  5. 配置网站
    • 打开 “Internet 信息服务 (IIS) 管理器” (可以在开始菜单搜索)。
    • 在左侧的“连接”面板中,右键点击“网站”,选择“添加网站”。
    • 网站名称:给你的网站起个名字,如 MyASPWeb
    • 物理路径:选择一个文件夹作为你的网站根目录,D:\WebProjects\MyASPWeb
    • 端口:默认是 80,80 端口被占用,可以改为其他端口,如 8080。
    • 主机名:可以留空,之后通过 http://localhost:8080 访问。
    • 点击“确定”。
  6. 设置默认文档:在左侧选中你刚刚创建的网站,在中间的“功能视图”中双击“默认文档”,点击“添加”,输入 index.aspdefault.asp,并上移到最顶部。

你的第一个 ASP 页面

  1. 在你刚才设置的物理路径(如 D:\WebProjects\MyASPWeb)下,创建一个名为 index.asp 的文件。

  2. 用记事本或 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>
  3. 保存文件。

  4. 打开浏览器,访问 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:获取通过 URL GET 方法提交的数据(如 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 数据库为例。

  1. 创建一个 Access 数据库,D:\WebProjects\MyASPWeb\db.mdb
  2. db.mdb 中创建一个表 users,包含 id (自动编号, 主键), name (文本), email (文本)。
  3. 插入几条测试数据。

连接代码 (使用 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>&copy; 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 开发者非常有帮助,祝你学习愉快!