学习ASP,最重要的就是要掌握ASP内置的六大对象。事实上,在上一讲中,我们已经了解了Response对象(是吗?有没有搞错!),及Response对象中最常用的Write方法、Redirect方法和Expires属性。看到对象、方法、属性、集合、事件这些概念(俺一个都不识!),如果以前没接触过,聪明的您就不要管这些概念了,知道怎么用就行了,我的观点是刚开始关键在于临摹。下面我们继续通过实例学习Request对象,为了加深理解,务请运行这些程序看看输出结果。
一、 使用Re***st.ServerVariables 获取环境变量,这部分内容很简单,但获取的内容却很重要,如何获取?请看下例:
<%@ Language=VBScript %>
<% 'wuf8.asp
Re***nse.Write "运行ASP文件的路径: " &_
Re***st.ServerVariables ("Script_Name") & " "
Re***nse.Write "返回content的数据长度: " &_
Re***st.ServerVariables ("Content_Length") & " "
Re***nse.Write "返回客户的IP地址: " &_
Re***st.ServerVariables ("Remote_Addr") & " "
Re***nse.Write "浏览器名: " &_
Re***st.ServerVariables ("HTTP_USER_AGENT") & " "
Re***nse.Write "返回主页实际物理路径: " &_
Re***st.ServerVariables ("APPL_PHYSICAL_PATH") & " "
%>
Now,你应该发现上一讲中的例程wuf2.asp原来是多么的easy!
注意:该程序的后面一部分HTML标记纯是为下面的例子作准备的,所以不要觉得奇怪。那么,还有哪些环境变量呢?运行下面的例子就知道了(本程序删除了部分代码,最好去我站点下载源程序便于理解)。
<%@ Language=VBScript %>
<% ‘wuf9.asp
Option Explicit
Dim Sv
%>
环境变量名
结果
<%
for each Sv In Re***st.ServerVariables
Re***nse.Write ""
Re***nse.Write " "
Re***nse.Write Sv
Re***nse.Write " "
Re***nse.Write " "
Re***nse.Write Re***st.ServerVariables (Sv)
Re***nse.Write " "
next
%>
这里使用了For…Each循环,用来列举一个集合中的所有元素。如果后半部分看不懂,请对照wuf8.asp,再瞧瞧运行结果,仔细体会一下(什么态度?)。
二、 通过表单向服务器传送数据(也可这样理解,服务器端如何读取客户端发送的数据)
做过主页,应该知道很多主页通常都使用Form表单让用户输入数据,然后通过“submit(提交)”按钮发送数据。From表单中的“method”有两种主要方法:POST和GET,而“action”后一般都是指定一个.cgi、.pl或.asp文件,今天我们要学习的就是如果编写这个.asp文件。
(一) 如果使用POST方法传送数据,则用Re***st.Form 来读取数据。
先编辑如下一个wu***.htm 文件,供用户输入数据:
">
姓名:
性别:
男
女
留言:
爱好(按住Ctrl键可多选):
电脑
购物
电影
读书
再编写一个
wu***.htm 需用到的文件
wu***.asp 收集数据:
<%@ Language=VBScript %>
<% '
wu***.asp
Option Explicit
Re***nse.Expires=0
Dim StrName, StrGender, StrM, StrMsg
StrName = Trim(
Re***st.Form ("yourname")) 'Trim函数用来除首尾空格
StrGender = Trim(
Re***st.Form ("gender"))
StrM = Trim(
Re***st.Form ("message"))
StrMsg = Replace(StrM,vbcrlf,"
" & vbcrlf)
' vbcrlf相当于回车符和换行符的组合。至于Replace函数,其作用就是将字符串StrM中的vbcrlf替换为"
" & vbcrlf(请思考这个vbcrlf有什么用?查看输出文件的HTML源码就明白了),详细请参考VBScript帮助。
%>
姓名: <%= StrName%>
性别: <%= StrGender%>
留言:
<%= StrM%>
<%= StrMsg%>
实际上, "提交"按钮的值也被传递:
<%=
Re***st.Form ("Submit")%>
<% '先把上面看懂, 有兴趣再看看如何读取多个选项
Re***nse.Write "共选择爱好项数:" &
Re***st.Form ("hobby").Count & "
"
Dim I
For I = 1 to
Re***st.Form ("hobby").Count
Re***nse.Write Re***st.Form ("hobby")(I) & "
"
Next
%>
在这个的例子中,为了便于理解,我们使用了两个程序,实际上只使用一个程序也可以,如果有兴趣请看下面的例程
wu***.asp ,有助于加深对环境变量的理解。
<%@ Language=VBScript %>
<% '
wu***.asp
Option Explicit
Re***nse.Expires=0
Dim StrName, StrGender, StrM, StrMsg
If
Re***st.ServerVariables ("Content_Length") <> 0 Then
'提交数据后,这个长度就不会是 0, 因此执行下面的语句, 将结果显示出来
'下面一部分实际上是照搬
wu***.asp
StrName = Trim(
Re***st.Form ("yourname"))
StrGender = Trim(
Re***st.Form ("gender"))
StrM = Trim(
Re***st.Form ("message"))
StrMsg = Replace(StrM,vbcrlf,"
" & vbcrlf)
%>
姓名: <%= StrName%>
性别: <%= StrGender%>
留言:
<%= StrM%>
<%= StrMsg%>
<%
Re***nse.Write "共选择爱好项数:" &
Re***st.Form ("hobby").Count & "
"
Dim I
For I = 1 to
Re***st.Form ("hobby").Count
Re***nse.Write Re***st.Form ("hobby")(I) & "
"
Next
%>
<%
Else
'当第一次加载页面时,没有提交任何数据,故前面一部分并不执行,而是从这里开始
'这也就是为什么会有两对 的原因
'下面照搬
wu***.htm 就行了
'
<%End If%>
(二)如果使用GET方法传送数据,则用
Re***st.Querystring 来读取数据。
先编辑如下一个
wu***.htm 文件,供用户输入数据:
wu***.asp">
英文姓名:
中文姓名:
性别:
男
女
再编写一个
wu***.htm 需用到的文件
wu***.asp 收集数据:
<%@ Language=VBScript %>
<% '
wu***.asp
Option Explicit
Re***nse.Expires=0
Dim StrCname, StrEname, StrGender
StrEname = Trim(
Re***st.QueryString ("Ename")) 'Trim函数用来除首尾空格
StrCname = Trim(
Re***st.QueryString ("Cname"))
StrGender = Trim(
Re***st.QueryString ("gender"))
%>
英文姓名: <%= StrEname%>
中文姓名: <%= StrCname%>
性别: <%= StrGender%>
看看提交的字符串:
<%=
Re***st.ServerVariables ("Query_String")%>
为了更好地理解这个程序,你最好先在浏览器中试试例程
wu***.htm 的效果,看看输出的结果,你会发现地址栏中长长的字符串似曾相识,如同在Yahoo搜索时看到的差不多。这时,你试着在地址栏中直接输入“http://localhost/
wu***.asp ?Ename=Rose&Cname=李二&gender=女”,居然也得到了同样的结果。所以你可以这样看,
wu***.htm 的结果就是得到了类似这样的一个带参数的链接。而
Re***st.QueryString 则是从http:// 地址的附加参数中读取各个数据。
实际上,当按“提交”按钮后,查询字符串(输入的数据)会以参数的形式附加到URL地址后(各参数间以“&”分隔),达到传递数据的目的。同时,注意浏览器中显示的查询字符串中没有中文,而是不认识的含百分号的乱码,这是因为进行了编码的缘故。最后,与前面一样,这两个程序也可合并为一个程序(例程
wu***.asp ,需去我站点下载)。
几点说明:
1. 若使用POST方法提交数据,则
Re***st.ServerVariables ("Content_Length")>0。
若使用GET方法提交数据,则
Re***st.ServerVariables ("Query_String") <> ""。
2. 弄懂原理后,你完全可以在同一个ASP文件中混合使用
Re***st.Form 和
Re***st.QueryString 。
3. 如果在一个Form表单中,有几个按钮,你如何确定用户按了哪个按钮?如果留意的话,会发现例程
wu***.asp 中有一句,“提交”按钮的值也被传送,而
wu***.htm 中生成的查询字符串最后也可以找到类似的值。请注意:只有被按按钮的值被传送,而其他按钮的值为””,这就是判断依据(《中计报》InfoWeb网站有一篇类似文章)。