资源描述
ASP课程设计
实验报告
项 目 名 称: 基于B/S架构的班级网站设计与实现
参 与 成 员:
学 号:
联 系 电 话:
日 期: 2010-11-02
一、前言
ASP(Active Server Pages)活动服务器页面,基于微软公司的服务器IIS的统一环境,是Microsoft的一种技术,它起一种编程语言的作用,利用它编写动态产生网页的HTML程序代码。
ASP可以使用两种脚本语言:VBScript和Jscript(所谓的Jscript语言就是微软件版本的JavaScript语言) ,但主要使用VBScript。这些脚本可以执行应用程序逻辑,并能够用ActiveX组件执行特殊任务,如数据库查询、文件输入输出等。
ASP内含5个内置的Active Server Components(ActiveX服务器组件),即Database Access component(数据库访问组件)、File Access component(文件访问组件)、Ad Rotator component(广告轮显器组件)、Browser Capabilities component(浏览器信息组件)、Content Linking component(内部链接组件)。最常用的内置组件是文件组件和广告组件。ASP最强大的功能还是使用外置组件。
ASP本身包含了一个DLL文件,名字为asp.dll,缺省安装在Winnt\System32\inetsrv目录下。这个DLL文件负责得到一个ASP页面(由文件扩展名.asp标识),然后对它进行分析,寻找服务器端脚本内容。这个脚本传给相应的脚本引擎,脚本的执行结果与ASP页中的HTML和模板文本结合在一起。完整的页面会送到Web服务器,送往原先请求的客户端。
二、个人网站的设计
⒈体系结构
本系统通过客户端浏览器向网络上的服务器发出请求,服务器对浏览器的请求进行处理,将用户所需信息返回到浏览器。B/S结构简化了客户机的工作,把二层C/S结构的事务处理逻辑模块从客户机的任务中分离出来,由Web服务器单独组成一层来负担其任务,从而减轻了客户机的压力。
系统的体系架构:Browser/Web/DataBase(Access)。
⒉设计目标
在现有的各种异构平台的基础之上构筑一个通用的平台无关、语言无关的技术层,将网站的所有功能作为Web服务展示出来,用户根据自己的需要选择相关的服务。
⒊主要功能模块
图1 主要功能模块
本系统的权限采用基于角色的访问控制,权限赋予角色,角色分配给用户。用户通过所属的角色享有权限。通过权限控制,保障了合法用户顺利实现系统功能,禁止了非授权用户对系统的入侵。
⒋数据库设计
⑴通讯录
通讯录数据库文件bjtxl.mdb文件包括两个表,分别为alogin和txl。alogin用来存储登录界面的用户名和密码信息,txl用来存储同学的信息,表1和表2所示
表1 数据库表alogin的结构
字段名
类型
说明
ID
自动编号
用户的标识
yhm
文本(20)
登录的用户名
mm
文本(20)
登录的密码
表2 数据库表txl的结构
字段名
类型
说明
ID
自动编号
同学信息的标识
xm
文本(20)
同学的姓名
lxfs
文本(80)
同学的联系方式
bz
文本(80)
备注
⑵留言簿
留言簿数据库包括两个表GuestBook和hfBook。GuestBook用来存储教师留言信息,hfBook用来存储教务员的回复信息,表3和表4所示。hfBook数据库表中的字段“rID”存储原主题的ID,该ID就是GuestBook数据库表中的ID字段。
表3 数据库表GuestBook的结构
字段名
类型
说明
ID
自动编号
留言的标识
姓名
文本(80)
留言人的姓名
E-mail
文本(160)
留言人的E-mail
主题
文本(255)
留言的主题
留言
备注
留言的内容
时间
日期/时间
留言的时间,now()
IP
文本
留言人的IP地址
Verify
数字
验证标志,暂时没用
表4 数据库表hfBook的结构
字段名
类型
说明
ID
自动编号
回复信息的唯一标识
rID
数字
原来主题的ID
用户名
文本
回复人的姓名
IP
文本
回复人的IP地址
回复内容
文本
回复的内容
时间
日期/时间
回复的时间
三、系统实现
1.身份认证
主要代码:
<%
syhm=request("yhm")
smm=request("mm")
set rs=server.CreateObject("Adodb.recordset")
sql="select * from alogin where yhm='"&syhm&"'"
rs.open sql,conn
if syhm="" then
response.Write("管理员的名不能为空!")
%>
<link href="css/alogin1.css" rel="stylesheet" type="text/css" />
<p><a href=javascript:history.back()>请输入管理员名!</a><br><br>
<%
response.End()
end if
if smm="" then
response.Write("密码不能为空")
%>
<a href=javascript:history.back()>请输入密码!</a><br /><br />
<%
response.end()
end if
if syhm<>"chenqing" then
response.write("您不是系统管理员!")
%>
<a href=javascript:history.back()>请重新输入系统管理员名!</a> <br /><br />
<%
response.end()
else
if smm=rs("mm") then
response.Redirect(session("file"))
else
%>
<a href=javascript:history.back()>密码错误!请重新输入密码!</a> <br /><br />
<%
end if
end if
rs.close
set rs=nothing
conn.close
set conn=nothing
%>
</p>
2.聊天室
进入聊天室需要进行身份认证,完成此操作过后,自动跳转至聊天界面,在页面上方可以可见当前在线人数,其主要代码如下:
※ message.asp:聊天室的信息输入界面
<%
mywords = Request("message")
oneSentence = "姓名:" & Session("username")
oneSentence = oneSentence & "机器号:" & Session("no")& "说: " & mywords
Application.Lock()
Application("talk")=Application("talk") & oneSentence & "<br>"
Application.UnLock()
%>
<HTML>
<BODY BGCOLOR="LIGHTBLUE">
<FORM METHOD="POST" ACTION="MESSAGE.ASP">
<INPUT NAME="message" TYPE="TEXT" SIZE="50">
<INPUT TYPE="SUBMIT" VALUE="SEND">
</FORM>
</BODY>
</HTML>
※ display.asp:聊天信息显示页面
<HTML>
<HEAD>
<META HTTP-EQUIV="REFRESH" CONTENT="3;URL=display.asp">
<SCRIPT LANGUAGE="JavaScript">
function scrollWindow()
{
this.scroll(0,65000)
setTimeout('scrollWindow()',200)
}
scrollWindow()
</SCRIPT>
</HEAD>
<BODY>
<%
Response.Write(Application("talk"))
%>
</BODY>
</HTML>
3.留言簿
留言簿包含提交留言,浏览留言,编辑留言(修改和删除),清除重写四大模块,其中编辑留言需要身份认证才可以进行修改、删除操作;并且浏览留言采用分页显示技术。“留言簿”主页面运行效果如图2所示,其主要代码如下:
※ handle.asp:处理程序
<%
'读取各字段的数据
Name = Request("Name")
Email = Request("Email")
Subject = Request("Subject")
Memo = Request("Memo")
'检查各字段是否输入了数据
If Name = "" Or Email = "" Or Subject = "" Or Memo = "" Then
Response.Write ("字段空白不接受!")
'不再处理以下的程序
Response.End
End If
'插入到数据库
set conn = Server.CreateObject("ADODB.Connection")
conn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" &_
Server.MapPath("lyb.mdb"))
SQL = "INSERT INTO lyb(姓名,email,主题,内容) VALUES('" &_
Name & "','" &Email & "','" & Subject & "','" & Memo & "')"
'Response.Write(SQL)
conn.Execute(SQL)
conn.close()
Response.Redirect("display.asp")
%>
※ display.asp:显示程序
<%
'连接数据库,做查询
set conn = Server.CreateObject("ADODB.Connection")
conn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" &_
Server.MapPath("lyb.mdb"))
sql = "SELECT * FROM lyb ORDER BY 时间 DESC"
set rs = conn.Execute( sql )
%>
<%
'按照的样式输出
While Not rs.EOF
%>
<TABLE BORDER="0" BORDERCOLOR="#111111">
<TR>
<TD><B><FONT SIZE="4" COLOR="#008080">姓名:</FONT></B>
</TD>
<TD><%=rs("姓名")%>
</TD>
</TR>
<TR><TD><B><FONT SIZE="4" COLOR="#008080">
Email:</FONT></B>
</TD>
<TD><A HREF="MAILTO:<%=rs("email")%>">
<%=rs("email")%></A>
</TD>
</TR>
<TR><TD><B><FONT SIZE="4" COLOR="#008080">主题:</FONT></B>
</TD>
<TD WIDTH="542" HEIGHT="17"><%=rs("主题")%></TD></TR>
<TR><TD><B><FONT SIZE="4" COLOR="#008080">时间:</FONT></B>
</TD>
<TD><%=rs("时间")%>
</TD>
</TR>
<TR><TD><B><FONT SIZE="4" COLOR="#008080">内容</FONT></B>
</TD>
<TD><%=rs("内容")%>
</TD>
</TR>
</TABLE>
<HR>
<%
rs.movenext()
Wend
%>
图2 留言簿主页面
4.通讯录
通讯录的功能是保存姓名、E-mail地址、家庭住址等常用的联系信息。模块包含浏览记录,查询记录,添加记录和编辑记录(修改和删除)四个部分,其中添加记录和编辑留言需要身份认证。浏览留言采用分页显示技术,通讯录主页面运行效果如图3所示,其主要代码如下:
※ add.asp:添加记录
<%
set rs=server.CreateObject("adodb.recordset")
rs.open "txl",conn,1,2
rs.addnew
rs("xm")=request.Form("xm")
rs("lxfs")=request.Form("lxfs")
rs("bz")=request.Form("bz")
rs.Update
response.write "记录己经被成功输入。"
rs.close
set rs=nothing
conn.close
set conn=nothing
%>
※ del.asp:删除记录
<%
id=request.querystring("id")
SQLstmt="DELETE from txl where id="& id &""
conn.execute(SQLstmt)
conn.close
set conn=nothing
Server.Transfer "tongxunlu.asp"
%>
※ query.asp:查询记录
<%
xm2=request.form("xm")
sqlstmt="SELECT * from txl where xm='"& xm2 &"'"
set rs=server.createobject("adodb.recordset")
rs.open sqlstmt,conn,1,1
totalerec=rs.recordcount
if totalerec=0 then
response.write "没有符合条件的记录,请重新输入!"
response.end
end if
%>
<table>
<tr>
<td>姓名</td>
<td>联系方式</td>
<td备注</td>
</tr>
<% do while not rs.eof %>
<tr align="center">
<td ><%=rs("xm")%></td>
<td><%=rs("lxfs")%></td>
<td><%=rs("bz")%></td>
</tr>
<%
rs.movenext
loop
rs.close
set rs=nothing
conn.close
set conn=nothing
%>
</table>
※ mod.asp:修改记录
<%
id3=request.form("id")
xm3=request.form("xm")
lxfs3=request.form("lxfs")
bz3=request.form("bz")
sqlstmt="UPDATE txl set xm='"& xm3 &"',lxfs='"& lxfs3 &"',bz='"& bz3 &"' where id="& id3 &""
conn.execute(sqlstmt)
conn.close
set conn=nothing
server.transfer "tongxunlu.asp"
%>
图3 通讯录主页面
图4 通讯录浏览
5.图片计数器
图片计数器是Application对象的一个用途,因为Application是所有的用户所共有的,所以可以存储计数器的值,当有新用户访问网页时自动增值计数器的值。其代码如下:
<% Application.Lock()
Application("Counter") = Application("Counter") + 1
Application.UnLock()
Function G ( counter )
Dim S, i
S = CStr( counter )
For i = 1 to Len(S)
myimage = myimage & "<IMG SRC=" & Mid(S, i, 1) & ".gif>"
Next
G = myimage
End Function %>
<P ALIGN="CENTER">您是本站第<%=G (Application("Counter"))%> 位贵宾! </P>
6.当前时间
当前时间是now()自动调用系统时间实现的,其代码如下:
<script language="vbscript">
document.write(now())
</script>
7.在线人数统计
在线人数统计采用Application对象和Session对象来编写。当网站开启时就自动调用global.asa文件,此时其中的Application_OnStart首先被调用,然后执行其中的语句,Application("whosOn")被自动清零。然后当第一位用户登录网站时,Session_OnStart被调用,此时Application("whosOn")被自动加一。当第二位、第三位用户登录时,又被加一,所以显示的是在线的人数。其代码如下:
※ CountOnLine.asp
<%Response.Write("现在有" & Application("whoson")& "人在线")%>
※ global.asa
<Script LANGUAGE="VBScript" RUNAT="SERVER">
Sub Application_OnStart()
Application.Lock()
Application("whosOn") = 0
Application.UnLock()
End Sub
Sub Session_OnStart()
Application.Lock()
Application("whoson") = Cint(Application("whoson")) + 1
Application.UnLock()
End Sub
Sub Session_OnEnd()
Application.Lock()
Application("whoson") = Cint(Application("whoson")) - 1
Application.UnLock()
End Sub
</Script>
8.广告轮显
广告图片的动态显示时利用内置组件ADROTATOR来实现的。使用该组件,可以在每次访问中显示不同的图标,可以设置广告的不同权重使得显示频率不同。其代码如下:
※ ad.asp
<META HTTP-EQUIV="REFRESH" CONTENT="3";URL=DEFAULT.ASP>
<% set MyAdvertise = Server.CreateObject("MSWC.AdRotator")
%><CENTER><%=MyAdvertise.GetAdvertisement("ad.txt") %></CENTER>
※ ad.txt
REDIRECT ad_redir.asp
WIDTH 230 HEIGHT 60 BORDER 0
*
yule.gif
../../web/mifeng.html 娱乐天宫
40
welcome.gif
../../zhuye.asp 我的地盘我做主
30
lvhai.gif
../../web/lvhai.mht 安徽绿海商务学院
30
※ ad_redir.asp
<% Response.Redirect(Request("url")) %>
9.文件链接组件
文件链接组件使用户可以在你页面中自由跳转,当有许多并列的页面时,改组件非常有用,可以大大简化每个页面加入相应链接信息的这个过程。其代码如下:
※ link.asp
总文件个数为:
<%
Set Link = Server.CreateObject("MSWC.nextlink")
Response.Write(Link.GetListCount("link.txt"))
%><BR>
<% Sum = Link.GetListCount("link.txt") '返回文件总数
For I = 1 to Sum '用循环依次写出所有的文件链接
%><a href=" <%=Link.GetNthURL("link.txt",I)%>" target="_blank"> <%=Link.GetNthDescription("link.txt",I)%></a><br>
<% Next %>
※ link.txt
wenjian/01.asp 咏白海棠 wenjian/02.asp 荷塘月色
wenjian/03.asp 三国演义 wenjian/05.asp 咏菊问菊
wenjian/06.asp 赤壁怀古
10.记录客户端的IP地址
该程序中OpenTextFile(path,8,true)方法有三个参数,第一个参数“path”打开文件的地址;第二个参数“8”是打开方式,这里是以追加的形式打开;第三个参数“true”表示如果该文件不存在就创建一个新文件。Request.ServerVariables("REMOTE_ADDR")为客户端的IP地址,这样所有访问过该页面的IP地址就被记录下来了。其代码如下:
<% path = Server.MapPath("test.log")
set MyFileObject = Server.CreateObject("Scripting.FileSystemObject")
set MyTextFile = MyFileObject.OpenTextFile(path,8,true)
MyTextFile.WriteLine(Request.ServerVariables("REMOTE_ADDR"))
MyTextFile.Close()
%>
11.文件上传
文件上传组件可以使用户在ASP页面中接受客户浏览器上传的文件。本文件上传包含下载、浏览、删除操作,其中删除操作需要身份认证,用户上传的文件保存到数据库中,Access中是利用类型“OLE对象”来上传文件的。其代码如下:
※ index.asp
<HTML> <BODY>
<P ALIGN='RIGHT'><A HREF="ADD_FORM.ASP">上传文件</A>
<TABLE WIDTH="100%" BORDER="1">
<TR BGCOLOR="#CACACA" ALIGN="CENTER">
<TD WIDTH="10%">预览</TD>
<TD WIDTH="15%">名称</TD>
<TD WIDTH="13%">大小(K)</TD>
<TD WIDTH="15%">类型</TD>
<TD WIDTH="17%">简介</TD>
<TD WIDTH="10%">下载</TD>
<TD WIDTH="10%">浏览</TD>
<TD WIDTH="10%">删除</TD>
</TR>
<%
set conn = server.createobject("ADODB.CONNECTION")
conn.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &_
server.mappath("temp.mdb")
strSql = "SELECT * FROM uploadfiles ORDER BY submit_date DESC"
Set rs = conn.Execute(strSql)
Do while Not rs.Eof
Response.Write "<tr bgcolor='#EBEBEB'>"
Response.Write "<td><img src='showimage.asp?id=" &_
rs("id") & "' width='120' height='80'></td>"
Response.Write "<td>" & rs("filename") & "</td>"
Response.Write "<td align='right'>" & Int(rs("size")/1024) & "</td>"
Response.Write "<td>" & rs("ext") & "</td>"
Response.Write "<td>" & rs("intro") & "</td>"
Response.Write "<td align='center'><a href='download.asp?id=" &_
rs("id") & "'>下载</a></td>"
Response.Write "<td align='center'><a href='browse.asp?id=" &_
rs("id") & "' target='_blank'>浏览</a></td>"
Response.Write "<td align='center'><a href='delete.asp?id=" &_
rs("id") & "'>删除</a></td>"
Response.Write "</tr>"
rs.MoveNext
Loop
%></TABLE></BODY> </HTML>
※ add_form.asp
<HTML><HEAD>
<SCRIPT Language="JavaScript">
function check_Null(){
if (document.form1.upfile.value==""){
alert("文件不能为空!"); return false;
}
if (document.form1.intro.value==""){
alert("说明不能为空!"); return false;
} return true;
}</SCRIPT>
</HEAD><BODY>
<H2 ALIGN="CENTER">上传文件</H2>
<CENTER><FORM ACTION="upload.asp" METHOD="post"
ENCTYPE="multipart/form-data" NAME="form1" ONSUBMIT="return check_Null();">
<TABLE BORDER="0" WIDTH="60%">
<TR><TD>选择文件</TD>
<TD><INPUT TYPE="file" NAME="upfile" SIZE="40"><BR>(文件名请勿用中文)</TD></TR><TR>
<TD>简单说明</TD><TD>
<INPUT TYPE="TEXT" name="intro" SIZE="50">(必须输入)
</TD></TR></TABLE>
<P><INPUT TYPE="SUBMIT" VALUE=" 确定 ">
</FORM> </CENTER></BODY> </HTML>
※ browse.asp
<HTML><BODY>
<img src="showimage.asp?id=<%=Request.QueryString("id")%>">
</BODY></HTML>
※ showimage.asp
<% set conn = server.createobject("ADODB.CONNECTION")
conn.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &_
server.mappath("temp.mdb")
'打开记录集
strSql = "SELECT * FROM uploadfiles WHERE id = " & Request("id")
Set rs = conn.Execute(strSql)
'下面将文件输出到客户端浏览器
Response.ContentType = "image/*"
Response.BinaryWrite rs("fileimage") %>
※ download.asp
<% set conn = server.createobject("ADODB.CONNECTION")
conn.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &_
server.mappath("temp.mdb")
'打开记录集
strSql = "Select * From uploadfiles where id = " & Request("id")
Set rs = conn.Execute(strSql)
'下面将文件输出到客户端,首先指明ContentType
Response.ContentType = "application/octet-stream"
'告诉浏览器文件名称
Response.AddHeader "Content-Disposition","attachment;filename=" & rs("filename")
'告诉浏览器文件大小
Response.AddHeader "Content-Length", CStr(rs("size"))
'输出二进制文件
Response.BinaryWrite rs("fileimage")%>
※ delete.asp
<%
'删除数据库中的记录
set conn = server.createobject("ADODB.CONNECTION")
conn.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &_
server.mappath("temp.mdb")
strSql = "Delete From uploadfiles Where id=" &_
Request.QueryString("id")
conn.Execute(strSql)
'返回首页
Response.Redirect ("index.asp")
%>
※ upload.asp
<% set conn = server.createobject("ADODB.CONNECTION")
conn.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &_
server.mappath("temp.mdb")
Set upload = Server.CreateObject("LyfUpload.UploadFile")
upload.maxsize=20*1024*1024 '设置文件上传的最大为20MB
'保存文件到服务器内存中,upfile是表单中的名称
filename = upload.SaveFiletodb("upfile")
If filename="0" Then
'表示文件过大,超出体积
Response.Write "文件超出2M!请返回"
Response.Write "<a href='history.back(-1);'>重新上传</a><center>"
Else
'将文件信息保存到数据库,首先建立Recordset对象
strSql="SELECT * FROM uploadfiles"
Set rs = Server.CreateObject("Adodb.Recordset")
rs.Open strSql,conn,1,3
'下面增加一条新记录
rs.AddNew
rs("filename") = filename
rs("ext") = GetExt(filename) '调用函数获取扩展名
rs("size") = Upload.filesize
rs("intro") = Upload.Request("intro") '获取表单信息
rs("fileimage").AppendChunk Upload.DBContent '给文件内容字段赋值
rs.Update
'成功插入数据库后,返回首页
Response.Redirect("
展开阅读全文