基于B S架构的班级网站设计与实现--ASP课程设计
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所示
⑵留言簿
留言簿数据库包括两个表GuestBook和hfBook。GuestBook用来存储教师留言信息,hfBook用来存储教务员的回复信息,表3和表4所示。hfBook数据库表中的字段“rID”存储原主题的ID,该ID就是GuestBook
数据库表中的ID字段。
三、系统实现
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("管理员的名不能为空!")
%>
/>
<%
response.End()
end if
if smm="" then
response.Write("密码不能为空")
%>
<%
response.end()
end if
if syhm<>"chenqing" then
response.write("您不是系统管理员!")
%>
<%
response.end()
else
if smm=rs("mm") then
response.Redirect(session("file"))
else
%>
<%
end if
end if
rs.close
set rs=nothing
conn.close
set conn=nothing
%>
2.聊天室
进入聊天室需要进行身份认证,完成此操作过后,自动跳转至聊天界面,在页面上方可以可见当前在线人数,其主要代码如下:
※ message.asp:聊天室的信息输入界面
<%
mywords = Request("message")
oneSentence = "姓名:" & Session("username")
oneSentence = oneSentence & "机器号:" & Session("no")& "说: " & mywords
Application.Lock()
Application("talk")=Application("talk") & oneSentence & "
"
Application.UnLock()
%>
※ display.asp:聊天信息显示页面
function scrollWindow()
this.scroll(0,65000)
setTimeout('scrollWindow()',200)
}
scrollWindow()
<%
Response.Write(Application("talk"))
%>
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
%>
姓名: | <%=rs("姓名")%> |
Email: | "> <%=rs("email")%> |
主题: | <%=rs("主题")%> |
时间: | <%=rs("时间")%> |
内容 | <%=rs("内容")%> |
<%
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
%>
姓名 | 联系方式 | |
<%=rs("xm")%> | <%=rs("lxfs")%> | <%=rs("bz")%> |
※ 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 & ""
Next
G = myimage
End Function %>
您是本站第<%=G (Application("Counter"))%> 位贵宾!
6.当前时间
当前时间是now()自动调用系统时间实现的,其代码如下:
document.write(now())
7.在线人数统计
在线人数统计采用Application对象和Session对象来编写。当网站
开启时就自动调用global.asa文件,此时其中的Application_OnStart 首先被调用,然后执行其中的语句,Application("whosOn")被自动清零。然后当第一位用户登录网站时,Session_OnStart被调用,此时Application("whosOn")被自动加一。当第二位、第三位用户登录时,又被加一,所以显示的是在线的人数。其代码如下:
※CountOnLine.asp
<%Response.Write("现在有" & Application("whoson")& "人在线")%> ※global.asa
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
8.广告轮显
广告图片的动态显示时利用内置组件ADROTATOR来实现的。使用该组件,可以在每次访问中显示不同的图标,可以设置广告的不同权重使得显示频率不同。其代码如下:
※ad.asp
<% set MyAdvertise = Server.CreateObject("MSWC.AdRotator") %>
※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"))
%>
<% Sum = Link.GetListCount("link.txt") '返回文件总数
For I = 1 to Sum '用循环依次写出所有的文件链接%>" target="_blank"> <%=Link.GetNthDescription("link.txt",I)%>
<% 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
预览 | 名称 | 大小(K) | 类型 | 简介 | 下载 | 浏览 | 删除 |
" | " & rs("filename") & " | "" & Int(rs("size")/1024) & " | "" & rs("ext") & " | "" & rs("intro") & " | "href='download.asp?id=" &_ rs("id") & "'>下载 | "href='browse.asp?id=" &_ rs("id") & "' target='_blank'>浏览 | "href='delete.asp?id=" &_ rs("id") & "'>删除 | "
※add_form.asp
function check_Null(){
if (document.form1.upfile.value==""){
alert("文件不能为空!"); return false;
}
if (document.form1.intro.value==""){
alert("说明不能为空!"); return false;
} return true;
}
上传文件
※browse.asp
">
※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 "重新上传
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("index.asp")
End If%>
<% '该函数用来得到文件的扩展名
Function GetExt(thefilename)
strTemp = Split(thefilename,".")
numTemp = Ubound(strTemp)
If numTemp = 0 Then
GetExt="No" '表示没有扩展名
Else
GetExt="." & strTemp(numTemp) '是数组中最后一项End If
End Function
%>
四、结束语
ASP课程已经学过,但理解的不够深。本次课程设计将静态网页和动态网页结合起来,使我有了网站设计的经验,我感觉以后在工作中遇到类