WEB程序设计之web服务器与Asp
1、Web服务器(IIS)
1)IIS的安装:
安装方法见如下链接:IIS安装
2)IIS的测试:
(1)IIS安装好后,在C:盘将增加一个文件夹C:\Inetpub\wwwroot\,这个目录也为Web站点的根目录.
(2)在控制面板->管理工具将增加Internet信息服务项,该项目将用于对IIS进行配置。
(3)打开浏览器,在地址栏输入http://localhost/或http://127.0.0.1,如果出现欢迎页,则表示IIS工作正常。
3)IIS设置:
主目录设置
默认文档设置
目录浏览
虚拟目录设置及访问方法
4)Web服务器访问方法
我们可以采用如下几种方法来访问Web服务器。
通用方法(可访问本机也可访问其他机器)http://计算机名称(域名)或http://ip地址
本机访问方法:http://localhost/或http://127.0.0.1
如果我们有一个文件位置为C:\Inetpub\wwwrooot\a.html,则通过浏览器访问的地址为:http://localhost/a.html
如果文件的位置为C:\Inetpub\wwwrooot\news\b.html,则通过浏览器访问的地址为:http://localhost/news/b.html
我们编写的ASP文件必须放在C:\Inetpub\wwwrooot中,通过浏览器来访问,IIS才会对其中的代码进行解析,直接访问的其中的ASP代码将无法解析,请大家注意。
5)运行第一个ASP程序
运行asp程序的步骤:
(1)将asp文件保存或拷贝到主目录或虚拟目录中
(2)向IIS发出请求,请求执行该asp文件
一个ASP文件的代码可包含三部分的内容:
① HTML和CSS;
② 客户端脚本,位于<script></script>之间;
③ 服务器端脚本,通常位于“<%”与“%>”之间
Asp默认使用VBScript作为脚本语言,代码不区分大小写。asp代码必须分行书写,一行只能书写一条asp代码。
2、VBScript介绍
VBScript是弱类型语言,只有一种数据类型(变体型variant)使用dim 语句来定义变量,在声明变量时不指定变量类型,可以在页头放在<%Option Explicit%>来强制变量声明
服务器端ASP脚本程序代码,用<%和%> 定界符括起来,ASP文件的扩展名为.asp,ASP代码将在服务器端执行,将执行结果发送给客户端,所以客户端是不可能看到ASP代码的。
思考题:可不可以将html文件的扩展名改为asp,可不可以将asp文件的扩展名改为html
3、常用的数学函数:
Int(number)
Round(number[,decimal])
Rnd()
4、常用字符串函数:
Len(string)
LCase(string) 、UCase(string)
Trim(string) 、Ltrim(string) 、Rtrim(string)
Mid(string,start[,length]) 、 Left(string,length) 、 Right(string,length)
Replace(string, find, replacewith)
InStr(string1, string2)
5、常用数组函数 :
UBound(arrayname[, dimension])
Split(string[, delimiter])
Join(arrayname [, delimiter])
Array(arglist)
6、常用的检验函数
IsNumeric(variant) :如果可以转换为数值,则返回True
IsDate(variant) :如果可以转换为日期,则返回True
IsArray(variant) :如果是数组,则返回True
IsNull(variant) :如果不包含任何有效数据,则返回True
7、ASP五大对象:
Request:从浏览器端获取信息
Response:发送信息到浏览器
Server:提供Web服务器端的许多应用函数
Session:会话对象,用于存储使用者信息
Application:应用程序对象,用于在一个ASP应用内让不同使用者共享信息
浏览器发送HTTP请求的方法
1)输入网址(URL)(Get方式) URL代表网络上的一个资源,因此表示向IIS请求一个资源文件
2)提交表单(Post方式或Get方式) 将向IIS提交表单中的内容,如果选择Get方式,则提交的内容将以URL字符串的形式发送
Request对象:从客户端取得信息
Request对象用来获取客户端的信息,主要依靠4种数据集合,分别是QueryString、Form、Cookies、ServerVariables。
其中常用的两个集合
Request.form 获取客户端以POST方式提交的信息,指以POST方式提交的表单信息
Request.querystring 获取客户端以GET方式提交的信息,包括URL字符串中的信息,以GET方式提交的表单信息
语法为:Request[.集合名](参数),例如
<% user=Request.Form("user")
id=Request.QueryString("id") %>
Request的集合名可以省略,如id=Request ("id")
获取用户登录表单中的内容
服务器获取表单信息的过程
HTTP请求中包含的信息
对于提交表单发送的HTTP请求 HTTP请求数据包中有:
表单中的信息
客户端IP地址
请求文件的URL
HTTP协议的版本号……
8、用户登录实例
login.html
check.asp
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>登录</title>
- </head>
- <body>
- <form action="check.asp" method="post">
- <p>用户名:<input type="text" name="username" /></p>
- <p>密码:<input type="password" name="pwd" /></p>
- <p><input type="submit" value="登录" /></p>
- </form>
- </body>
- </html>
- <%
- dim username,pwd
- username=lcase(trim(request.form("username")))'去除两端空格并不区分大小写
- pwd=request.form("pwd")
- if username="" then
- Response.write "<script>alert('用户名不能为空');history.back();</script>"
- Response.end
- end if
- if username="admin" and pwd="123456" then
- Response.write "登录成功"
- else
- Response.write "<script>alert('用户名或密码错误');history.back();</script>"
- end if
- %>
9、复合复选框实例
f.html
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>复合复选框使用</title>
- </head>
- <body>
- <form action="f.asp" method="post">
- <p>爱好:
- <input type="checkbox" name="ch1" value="basketball">篮球
- <input type="checkbox" name="ch1" value="football">足球
- </p>
- <p><input type="submit" value="发送" /></p>
- </form>
- </body>
- </html>
f.asp
- <%Option Explicit%>
- <%
- dim ch1,arr,i,score
- ch1=Request.form("ch1")
- arr=split(ch1,", ")
- for i=0 to ubound(arr)
- if arr(i)="basketball" then'选择篮球加10分
- score=score+10
- elseif arr(i)="football" then'选择足球加20分
- score=score+20
- end if
- next
- %>
10、在线考试实例:
test1.asp
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>在线考试</title>
- </head>
- <body>
- <form action="test2.asp" method="post">
- <%
- dim a,b,c,pos,j,i,strAnswer
- for i=1 to 5'出5道题目
- %>
- <p>
- <%
- randomize()
- a=int(rnd*10)'第一个加数,0~9
- b=int(rnd*10)'第二个加数
- c=a+b
- strAnswer=strAnswer & c & "," '形成答案字符串
- pos=int(rnd*4)+1 '答案选项的位置1~4
- Response.write i & ")" & a & "+" & b & "=" '打印题目表达式
- for j=1 to 4 '生成四个选项
- %>
- <input type="radio" name="Q<%=i%>" value="<%=c-j+pos%>"><%=c-j+pos%>
- <%next%>
- </p>
- <%next %>
- <p>
- <%
- strAnswer=left(strAnswer,len(strAnswer)-1)'将答案字符串的最后一个逗号去掉
- %>
- <input type="hidden" name="answer" value="<%=strAnswer%>"><!--使用隐藏控件提交答案-->
- <input type="submit" value="交卷" />
- </p>
- </form>
- </body>
- </html>
test2.asp
- <%Option Explicit%>
- <%
- dim qname,answer,arr,i,right_count,err_count
- answer=Request.Form("answer")'获取答案字符串
- arr=split(answer,",")'将答案字符串转换为数组
- right_count=0
- err_count=0'将答对和答错的计数清零
- for i=0 to Ubound(arr)'批改每一道题目
- qname="Q" & i+1'生成每一道题的题号
- if Request(qname)=arr(i) then'和答案进行比较
- Response.write "第" & i+1 & "题回答正确<br />"
- right_count=right_count+1
- else
- Response.write "第" & i+1 & "题回答错误<br />"
- err_count=err_count+1
- end if
- next
- Response.write "分数:" & right_count/(right_count+err_count) *100
- %>
11、在线考试四则运算完整版
test1.asp
- <%Option Explicit%>
- <!doctype html>
- <html>
- <head>
- <title>在线考试</title>
- <meta charset="utf-8">
- </head>
- <body>
- <form action="test2.asp" method="post">
- <%
- dim a,b,i,c,d,j,strAnswer,op,strOp
- randomize
- for i=1 to 5
- a=int(rnd*10)
- b=int(rnd*10)
- op=int(rnd*4+1)
- select case op
- case 1
- c=a+b:strOp="+"
- case 2
- c=a-b:strOp="-"
- case 3
- c=a*b:strOp="*"
- case 4
- do while b=0
- b=int(rnd*10)
- loop
- c=a/b:strOP="/"
- end select
- strAnswer=strAnswer & c & ","
- d=int(rnd*4+1)
- %>
- <p><%=i%>)<%=a%><%=strOp%><%=b%>=
- <%for j=1 to 4%>
- <input type="radio" name="Q<%=i%>" value="<%=c+j-d%>"><%=c+j-d%>
- <%next%>
- </p>
- <%next%>
- <%
- strAnswer=left(strAnswer,len(strAnswer)-1)
- %>
- <input type="hidden" value="<%=strAnswer%>" name="Answer">
- <p><input type="submit" value="交卷"></p>
- </form>
- </body>
- </html>
test2.asp
- <%Option Explicit%>
- <%
- dim strAnswer,arrAnswer,QCount,i,QID,r
- strAnswer=Request("Answer")
- arrAnswer=split(strAnswer,",")
- QCount=Ubound(arrAnswer)-Lbound(arrAnswer)+1
- r=0
- for i=1 to QCount
- QID="Q" & i
- if Request(QID)=arrAnswer(i-1) then
- Response.write "第" & i & "题正确!<br />"
- r=r+1
- else
- Response.write "第" & i & "题错误!<br />"
- end if
- next
- Response.write "<p>最后得分:" & r/QCount*100
- %>
----------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------
作业练习:
制作一个用户注册的界面如图所示
、
要求在服务器端做如下验证:
1)带星号的字段必须填写
2)用户名用户名必须大于3个字符,小于12个字符
3)用户名不能含有*、#, $、&符号
4)密码必须包括字母和数字,并且密码和确认密码必须一致
5)邮箱格式要求正确,且必须是163邮箱
表单验证.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>客户端用户注册</title>
<style>
.inputtext{
font-family:Arial,Helvetica, sans-serif;
}
</style>
</head>
<body>
<a><font color=blue>用户注册</font></a><br><hr color=blue><br>
<form action="check.asp" method="post" name="regFrm" onsubmit="return checkdata();">
<table>
<tr>
<td>用户名</td>
<td><input type="text" class="inputtext" name="username" id="username" />*</td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" class="inputtext" name="pwd" id="pwd" />*</td>
</tr>
<tr>
<td>确认密码</td>
<td><input type="password" class="inputtext" name="repwd" id="repwd" />*</td>
</tr>
<tr>
<td>性别</td>
<td><input type="radio" name="sex" id="male" />男
<input type="radio" name="sex" id="female" />女</td>
</tr>
<tr>
<td>邮箱</td>
<td><input type="text" class="inputtext" name="email" id="email" />*</td>
</tr>
<tr>
<td>身份</td>
<td>
<select class="inputtext" name="idtype" id="idtype">
<option value="student">学生</option>
<option value="teacher">教师</option>
</select>
</td>
</tr>
<tr>
<td>自我介绍</td>
<td><textarea name="intor" class="inputtext" id="intro" cols="30" rows="5"></textarea></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
<td><input type="reset" value="重置"></td>
</tr>
</table>
</form>
<body>
</body>
</html>
check.asp<%dim username,pwd,repwd,emailusername=lcase(trim(request.form("username")))'去除两端空格并不区分大小写if username="" thenResponse.write "<script>alert('用户名不能为空');history.back();</script>"Response.endend ifpwd=request.form("pwd")if pwd="" thenResponse.write "<script>alert('密码不能为空');history.back();</script>"Response.endend ifrepwd=request.form("repwd")if pwd<>repwd thenresponse.write"两次输入密码不一致!!"Response.write "<script>alert('重新确认密码');history.back();</script>"Response.endend ifemail=request.form("email")if email="" thenResponse.write "<script>alert('邮箱不能为空');history.back();</script>"Response.endend ifif Len(trim(username))<3 and Len(trim(username))>12 then Response.write "<script>alert('用户名必须大于3个字符小于12个字符');history.back();</script>"Response.endend if if username="*" and username="#" and username="&" and username="$" thenResponse.write "<script>alert('用户名不能含有*、#, $、&符号');history.back();</script>"Response.endend ifdim a,b,ca=email.IndexOf("@")b=email.lastIndexOf(".")if(a<1 or b-a<3) then Response.write "<script>alert('邮箱格式不对');history.back();</script>" Response.endelsec=email.split("@")if(c(1)<>"163.com") then Response.write "<script>alert('邮箱地址不是163邮箱!');history.back();</script>"Response.endend if endif %>