ASP动态网页设计应用教程

第一章:ASP简介与开发环境准备

1 什么是ASP?

  • 全称:Active Server Pages(动态服务器页面)。
  • 本质:一种由微软开发的服务器端脚本环境。
  • 工作原理:当用户请求一个ASP文件时,Web服务器(如IIS)会执行文件中的服务器端脚本(通常是VBScript或JScript),然后将执行结果生成纯粹的HTML页面,再发送到用户的浏览器,用户在浏览器中看到的是HTML代码,而看不到ASP的源代码。
  • 核心优势:可以创建和运行动态、交互式的Web服务器应用程序,它可以连接数据库,读取、写入和更新数据,实现用户登录、信息发布、购物车等复杂功能。

2 开发环境准备

要开发ASP网页,你需要在本地计算机上搭建一个类似服务器的环境,最经典和常用的组合是 IIS + Windows

asp动态网页设计应用教程
(图片来源网络,侵删)

环境要求:

  • 操作系统:Windows 10 / Windows 11 / Windows Server (推荐使用专业版或更高版本,因为它们更容易安装IIS)。
  • Web服务器:Internet Information Services (IIS)。
  • 脚本引擎:默认已包含VBScript和JScript。

安装步骤 (以 Windows 10/11 为例):

  1. 打开“启用或关闭Windows功能”

    • 你可以通过在开始菜单搜索 启用或关闭Windows功能 并打开它。
  2. 安装IIS及相关组件

    asp动态网页设计应用教程
    (图片来源网络,侵删)
    • 在功能列表中,找到并展开 Internet Information Services
    • 勾选以下所有子项,确保ASP功能被安装:
      • World Wide Web 服务
        • 应用程序开发功能
          • ASP (这是核心)
          • ASP.NET (可选,但建议安装)
          • ISAPI 扩展
          • ISAPI 筛选器
        • 常见HTTP功能
          • 默认文档
          • HTTP 重定向 (可选)
      • 管理工具
        • IIS 管理控制台
  3. 点击“确定”

    Windows会自动从Windows Update下载并安装所选功能,这个过程可能需要一些时间。

  4. 测试IIS是否安装成功

    • 打开任意浏览器,在地址栏输入 http://localhosthttp://127.0.0.1
    • 如果看到IIS的欢迎页面,说明IIS已成功安装并运行。
  5. 配置网站(创建你的第一个ASP项目目录)

    asp动态网页设计应用教程
    (图片来源网络,侵删)
    • 打开 IIS 管理器 (可以在开始菜单搜索)。
    • 在左侧的“连接”面板中,展开你的服务器节点,然后右键点击 “网站” -> “添加网站...”
    • 网站名称:填写一个你喜欢的名字,如 MyASPWebSite
    • 物理路径:选择一个你用来存放ASP文件的文件夹,D:\WebProjects\MyASPWebSite请确保此文件夹存在
    • 类型:选择 http
    • IP地址:选择 全部未分配
    • 端口:保持默认的 80,如果80端口被占用,可以改为其他端口(如8080)。
    • 主机名:留空。
    • 点击“确定”。
  6. 测试你的网站

    • 在IIS管理器中,选中你刚刚创建的网站,在右侧的“操作”面板中点击 “浏览 :80” (或你设置的端口)。
    • 如果浏览器显示“此网站正在建设中”或类似的默认页面,说明网站配置成功。

第二章:ASP基础语法

ASP文件的后缀名是 .asp,它通常包含HTML代码和嵌入其中的服务器端脚本。

1 ASP脚本标记

ASP脚本代码需要放在特定的标记内。

  • <% ... %>:最常用的标准脚本标记。
  • <script language="vbscript" runat="server"> ... </script>:用于定义更复杂的脚本函数。
  • <%= ... %>:快捷输出标记,等同于 Response.Write(...)

2 VBScript基础(ASP最常用的脚本语言)

变量声明 VBScript中声明变量使用 Dim 关键字,变量类型不区分,都是 Variant 类型。

<%
    Dim myName, myAge
    myName = "张三"
    myAge = 25
%>

使用 Response 对象的 Write 方法向浏览器输出内容。

<%
    Response.Write("Hello, World!")
    ' 使用快捷标记 <%= %> 更方便
    Response.Write("<br>")
    Response.Write("我的名字是:" & myName)
    ' 等同于
    %>
    <br>
    我的年龄是:<%= myAge %>
    <%
%>

注释

  • 单行注释:使用单引号
  • 多行注释:使用 Rem 或 (后者在某些版本中可能不支持)
<%
    ' 这是一个单行注释
    Rem 这也是一个单行注释
    ' 多行注释需要每行都加单引号
    ' 这是第一行注释
    ' 这是第二行注释
%>

条件语句:If...Then...Else

<%
    Dim score
    score = 85
    If score >= 90 Then
        Response.Write("成绩优秀!")
    ElseIf score >= 60 Then
        Response.Write("成绩及格。")
    Else
        Response.Write("成绩不及格。")
    End If
%>

循环语句:For...Next

<%
    Response.Write("<h3>1到5的数字:</h3>")
    Dim i
    For i = 1 To 5
        Response.Write(i & " ")
    Next
%>

第三章:ASP内置对象

ASP提供了多个内置对象,它们是实现动态网页功能的核心,我们最常用的是 RequestResponse

1 Request 对象

用于从用户获取信息。

  • Request.Form:获取通过 POST 方法提交的表单数据。
  • Request.QueryString:获取通过 GET 方法提交的表单数据(URL中后面的部分)。
  • Request.ServerVariables:获取服务器的环境变量。

示例:一个简单的登录表单

login.html

<!DOCTYPE html>
<html>
<head>登录页面</title>
</head>
<body>
    <h2>用户登录</h2>
    <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("用户名或密码错误,请<a href='login.html'>返回</a>重试。")
    End If
%>

2 Response 对象

用于向浏览器发送信息。

  • Response.Write:向浏览器输出内容。
  • Response.Redirect:将用户重定向到另一个URL。
  • Response.ContentType:设置输出的内容类型(如 text/html, text/css)。

示例:使用 Response.Redirect

<%
    ' 如果用户未登录,重定向到登录页面
    If Session("IsLoggedIn") <> True Then
        Response.Redirect("login.html")
    End If
    ' 只有登录用户才能看到下面的内容
    Response.Write("欢迎来到会员中心!")
%>

3 Session 对象

Session 用于存储特定用户会话所需的信息,信息存储在服务器端,用户关闭浏览器后,Session通常会失效。

示例:使用 Session 实现登录状态保持

修改 check_login.asp:

<%
    Dim username, password
    username = Request.Form("username")
    password = Request.Form("password")
    If username = "admin" And password = "123456" Then
        ' 将登录状态存入Session
        Session("IsLoggedIn") = True
        Session("Username") = username
        ' 重定向到欢迎页面
        Response.Redirect("welcome.asp")
    Else
        Response.Write("用户名或密码错误,请<a href='login.html'>返回</a>重试。")
    End If
%>

创建 welcome.asp:

<%
    ' 检查Session是否存在,防止未登录用户直接访问
    If Session("IsLoggedIn") <> True Then
        Response.Redirect("login.html")
    End If
%>
<!DOCTYPE html>
<html>
<head>欢迎页面</title>
</head>
<body>
    <h1>欢迎您,<%= Session("Username") %>!</h1>
    <p>您已成功登录。</p>
    <a href="logout.asp">退出登录</a>
</body>
</html>

创建 logout.asp:

<%
    ' 清除所有Session变量
    Session.Abandon()
    ' 重定向到登录页面
    Response.Redirect("login.html")
%>

第四章:ASP与数据库交互

动态网页的核心功能之一就是与数据库进行交互,ASP主要通过 ADO (ActiveX Data Objects) 来实现。

1 ADO核心对象

  • Connection:建立与数据库的连接。
  • Recordset:表示从数据库中返回的一组记录(一个记录集)。
  • Command:用于执行SQL命令(查询、更新等)。

2 数据库准备

以最常见的 Access 数据库为例。

  1. 创建一个Access数据库文件,db.mdb
  2. 在其中创建一张表,Users
    • ID (自动编号,主键)
    • Username (文本)
    • Password (文本)
    • Email (文本)
  3. 向表中插入一些测试数据。

3 连接并操作数据库

连接Access数据库

<%
    ' 定义数据库连接字符串
    ' 注意:将 "D:\WebProjects\MyASPWebSite\db.mdb" 替换为你自己的数据库文件路径
    Dim connStr
    connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\WebProjects\MyASPWebSite\db.mdb;"
    ' 创建Connection对象
    Dim conn
    Set conn = Server.CreateObject("ADODB.Connection")
    ' 打开连接
    conn.Open connStr
    ' ... 在这里执行数据库操作 ...
    ' 操作完成后,关闭连接并释放对象
    conn.Close
    Set conn = Nothing
%>

查询数据并显示

创建一个 list_users.asp 文件:

<%
    ' --- 连接数据库 (代码同上) ---
    Dim connStr, conn
    connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\WebProjects\MyASPWebSite\db.mdb;"
    Set conn = Server.CreateObject("ADODB.Connection")
    conn.Open connStr
    ' -----------------------------
    ' 创建Recordset对象
    Dim rs
    Set rs = Server.CreateObject("ADODB.Recordset")
    ' 执行SQL查询,打开记录集
    Dim sql
    sql = "SELECT ID, Username, Email FROM Users"
    rs.Open sql, conn
    ' 检查记录集是否为空
    If rs.EOF And rs.BOF Then
        Response.Write("数据库中没有用户。")
    Else
        ' 使用表格显示数据
        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("Username") & "</td>")
            Response.Write("<td>" & rs("Email") & "</td>")
            Response.Write("</tr>")
            ' 移动到下一条记录
            rs.MoveNext
        Loop
        Response.Write("</table>")
    End If
    ' 关闭并释放对象
    rs.Close
    Set rs = Nothing
    conn.Close
    Set conn = Nothing
%>

添加数据

创建一个 add_user.asp 文件来处理表单提交:

<%
    ' 获取表单数据
    Dim newUsername, newPassword, newEmail
    newUsername = Request.Form("username")
    newPassword = Request.Form("password")
    newEmail = Request.Form("email")
    ' --- 连接数据库 (代码同上) ---
    Dim connStr, conn
    connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\WebProjects\MyASPWebSite\db.mdb;"
    Set conn = Server.CreateObject("ADODB.Connection")
    conn.Open connStr
    ' -----------------------------
    ' 使用SQL INSERT语句插入数据
    ' 注意:为了防止SQL注入,应该使用参数化查询,但这里为了简单,直接拼接
    Dim sql
    sql = "INSERT INTO Users (Username, Password, Email) VALUES ('" & newUsername & "', '" & newPassword & "', '" & newEmail & "')"
    ' 执行SQL
    conn.Execute(sql)
    ' 关闭连接
    conn.Close
    Set conn = Nothing
    ' 重定向回列表页面
    Response.Redirect("list_users.asp")
%>

第五章:完整项目实例 - 简易留言板

这个项目将综合运用前面所学的知识:表单提交、Session验证、数据库的增查。

项目结构:

/MyASPWebSite
|-- index.asp          (首页,显示留言列表和登录入口)
|-- login.html          (登录表单)
|-- check_login.asp     (处理登录)
|-- logout.asp          (处理登出)
|-- add_message.asp     (发表留言的表单)
|-- save_message.asp    (保存留言到数据库)
|-- db.mdb              (Access数据库)

数据库设计 (在 db.mdb 中):

  • Users (同上)
  • Messages
    • ID (自动编号, 主键)
    • Author (文本, 作者名)
    • Content (备注, 留言内容)
    • PostTime (日期/时间, 发表时间)

步骤实现:

  1. index.asp (首页)

    • 检查Session,如果未登录,显示登录链接。
    • 如果已登录,显示欢迎信息、发表留言的链接和留言列表。
    • Messages 表读取并显示所有留言。
    <%@ Language=VBScript %>
    <%
        ' 检查登录状态
        If Session("IsLoggedIn") <> True Then
    %>
            <h1>简易留言板</h1>
            <p>您尚未登录,请<a href="login.html">登录</a>后查看和发表留言。</p>
    <%
        Else
    %>
            <h1>简易留言板</h1>
            <p>欢迎,<%= Session("Username") %>! <a href="logout.asp">退出登录</a> | <a href="add_message.asp">发表留言</a></p>
            <hr>
            <h2>留言列表</h2>
            <!-- 从数据库读取留言的代码 (参考 list_users.asp) -->
            <%
                ' --- 连接数据库 ---
                Dim connStr, conn, rs, sql
                connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\WebProjects\MyASPWebSite\db.mdb;"
                Set conn = Server.CreateObject("ADODB.Connection")
                conn.Open connStr
                ' -----------------
                Set rs = Server.CreateObject("ADODB.Recordset")
                sql = "SELECT Author, Content, PostTime FROM Messages ORDER BY PostTime DESC"
                rs.Open sql, conn
                If Not rs.EOF Then
                    Response.Write("<table border='1' width='80%'>")
                    Response.Write("<tr><th>作者</th><th>内容</th><th>发表时间</th></tr>")
                    Do While Not rs.EOF
                        Response.Write("<tr>")
                        Response.Write("<td>" & rs("Author") & "</td>")
                        Response.Write("<td>" & rs("Content") & "</td>")
                        Response.Write("<td>" & rs("PostTime") & "</td>")
                        Response.Write("</tr>")
                        rs.MoveNext
                    Loop
                    Response.Write("</table>")
                Else
                    Response.Write("暂无留言。")
                End If
                rs.Close
                Set rs = Nothing
                conn.Close
                Set conn = Nothing
            %>
    <%
        End If
    %>
  2. login.html, check_login.asp, logout.asp (代码与第三章示例相同)

  3. add_message.asp (发表留言表单)

    <%@ Language=VBScript %>
    <%
        ' 确保用户已登录
        If Session("IsLoggedIn") <> True Then
            Response.Redirect("index.asp")
        End If
    %>
    <!DOCTYPE html>
    <html>
    <head><title>发表留言</title></head>
    <body>
        <h2>发表新留言</h2>
        <form action="save_message.asp" method="post">
            留言内容:<br>
            <textarea name="content" rows="5" cols="50"></textarea><br><br>
            <input type="submit" value="提交">
        </form>
    </body>
    </html>
  4. save_message.asp (保存留言)

    <%@ Language=VBScript %>
    <%
        ' 确保用户已登录
        If Session("IsLoggedIn") <> True Then
            Response.Redirect("index.asp")
        End If
        ' 获取留言内容
        Dim messageContent
        messageContent = Request.Form("content")
        If messageContent <> "" Then
            ' --- 连接数据库 ---
            Dim connStr, conn, sql
            connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\WebProjects\MyASPWebSite\db.mdb;"
            Set conn = Server.CreateObject("ADODB.Connection")
            conn.Open connStr
            ' -----------------
            ' 插入留言,作者为当前登录用户
            sql = "INSERT INTO Messages (Author, Content, PostTime) VALUES ('" & Session("Username") & "', '" & messageContent & "', Now())"
            conn.Execute(sql)
            ' 关闭连接
            conn.Close
            Set conn = Nothing
            Response.Write("留言发表成功!<a href='index.asp'>返回首页</a>")
        Else
            Response.Write("留言内容不能为空!<a href='javascript:history.back()'>返回</a>")
        End If
    %>

第六章:进阶与注意事项

1 安全性

  • SQL注入:直接拼接SQL字符串是非常危险的,应始终使用参数化查询(Command 对象)。
  • XSS跨站脚本攻击:在输出用户提交的内容到HTML时,应进行转义,可以使用 Server.HTMLEncode() 函数。
    Response.Write(Server.HTMLEncode(Request.Form("user_content")))
  • 文件上传漏洞:如果允许用户上传文件,必须严格验证文件类型和大小,并将其存储在Web根目录之外。

2 性能优化

  • 连接池:在 Global.asa 文件中创建全局的 ApplicationSession 级别的数据库连接对象,可以实现连接池,避免频繁地创建和销毁连接,提高性能。
  • 关闭对象:养成良好习惯,及时关闭 RecordsetConnection 并将对象设置为 Nothing

3 ASP的未来

ASP (通常指ASP Classic) 是一项较老的技术,微软后续推出了更强大的 ASP.NET 框架(基于C#或VB.NET),以及现代化的 ASP.NET Core(跨平台、高性能)。

学习建议:

  • 如果只是为了维护老旧系统或学习Web开发的基本原理,ASP是一个很好的起点。
  • 如果要进行新项目开发,强烈建议学习 ASP.NET Core,它是目前微软主推的Web开发框架,拥有更好的性能、安全性和社区支持。

本教程为你提供了一个从零开始学习ASP动态网页设计的完整路径,从环境搭建、基础语法,到核心对象、数据库操作,再到一个完整的项目实践,希望能帮助你打下坚实的基础,请多动手实践,尝试修改和扩展示例代码,这是掌握编程最快的方式,祝你学习顺利!