基于B S架构的班级网站设计与实现--ASP课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于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所示
字段名类型说明
ID 自动编号用户的标识
yhm 文本(20)登录的用户名
mm 文本(20)登录的密码
字段名类型说明
ID 自动编号同学信息的标识
xm 文本(20)同学的姓名
lxfs 文本(80)同学的联系方式
bz 文本(80)备注
⑵留言簿
留言簿数据库包括两个表GuestBook和hfBook。
GuestBook用来存储教师留言信息,hfBook用来存储教务员的回复信息,表3和表4所示。
hfBook数据库表中的字段“rID”存储原主题的ID,该ID就是GuestBook 数据库表中的ID字段。
字段名类型说明
ID 自动编号留言的标识
姓名文本(80)留言人的姓名
E-mail 文本(160)留言人的E-mail
主题文本(255)留言的主题
留言备注留言的内容
时间日期/时间留言的时间,now()
IP 文本留言人的IP地址
Verify 数字验证标志,暂时没用
字段名类型说明
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") %></CENTE R>
※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("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课程已经学过,但理解的不够深。
本次课程设计将静态网页和动态网页结合起来,使我有了网站设计的经验,我感觉以后在工作中遇到类似的一些项目就能心中有数。
同时使得我不仅对编程提升了很多,对静态网页的设计也大大提高。
这次的课程设计也激发了我对网站设计的兴趣。
曾经我对网页设计是一片迷茫,但是通过这次制作的网页和课程实验报告,我感觉到ASP不是想象中的那么难,同时隐约了解了一些网站设计未来的发展方向。
最后衷心感谢我们优秀的王老师对我的帮助和同学对我的鼓励!主页面运行效果如图4所示:
图5 主页面。