您现在的位置: 365建站网 > 365文章 > 8.6 通用模块设计

8.6 通用模块设计

文章来源:365jz.com     点击数:234    更新时间:2009-09-12 17:11   参与评论
本章的通用模块部分将介绍数据库链接模块、函数库以及我们的JavaScript框架库等,除此之外,我们为了解决界面显示的若干问题,还引入了一个显示样式库的通用模块。

8.6.1 数据库链接

在本章,与以往有所不同的是,我希望向你介绍在使用RecordSet对象的Open方法时,游标类型和锁定类型的参数方法传递的另一种方法,即直接指定常量名。以往,我们使用过如下代码:rs.Open sql,conn,1,1,这里我们可以使用:rs.Open sql,conn, adOpenForwardOnly, adLockReadOnly来代替,当然,两种方法其实都是类似的,你按照自己的喜好选择一种即可。

不过,如果使用制定常量名的方式,那么我们必须引入ado的常量库,我前面曾提到过这个问题,你有两种方法,第一种是复制adovbs.inc文件到你站点的目录,并且用<!--#include file="adovbs.inc"-->代码来引入,而另外一种方法就是使用METADATA方法引入typelib,这里我们在数据库文件中使用了后者。

本章数据库链接文件conn.asp如下:

<%

'定义变量

Dim oConn,sConn,sPath

'设定数据库文件路径

sPath = "data.mdb"

'设定数据链接字符串

sConn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(sPath)

'建立数据库链接对象的实例oConn

Set oConn=Server.CreateObject("Adodb.Connection")

'打开数据连接

oConn.open sConn

%>

8.6.2 函数库

在本章,仍然和上一章一样的,建立了include/function.asp文件用来存放程序中常用的函数,这里大多数函数和上一章的相同(实际上,这是我常用的函数库J),但是新增了如下几个函数来帮我们完成程序:

l         PostBack()函数

此函数代码如下:

Function PostBack()

       '如果请求方式为POST

       If UCase(Trim(Request.ServerVariables("REQUEST_METHOD"))) = "POST" Then

              '则返回True

              PostBack = True

       Else

       '否则返回False

              PostBack = False

       End If

End Function

在前面的章节中,我们大量使用了代码:

If UCase(Trim(Request.ServerVariables("REQUEST_METHOD"))) = "POST" Then

来判断页面的请求方式,从而将表单处理和显示部分分开,这里我们不妨将其编写为函数,在使用时,可以简化为:If PostBack() Then了。

l         GenRadomString()函数

此函数代码如下:

Function GenRadomString(Length)

       dim i, tempS, v

       dim c(39)

       tempS = ""

       '将数组c的各个元素定义为可用的随机字符,这里我们选取所有小写字母和0-9的数字

       c(1) = "a": c(2) = "b": c(3) = "c": c(4) = "d": c(5) = "e": c(6) = "f": c(7) = "g"

       c(8) = "h": c(9) = "i": c(10) = "j": c(11) = "k": c(12) = "l": c(13) = "m": c(14) = "n"

       c(15) = "o": c(16) = "p": c(17) = "q": c(18) = "r": c(19) = "s": c(20) = "t": c(21) = "u"

       c(22) = "v": c(23) = "w": c(24) = "x": c(25) = "y": c(26) = "z": c(27) = "1": c(28) = "2"

       c(29) = "3": c(30) = "4": c(31) = "5": c(32) = "6": c(33) = "7": c(34) = "8": c(35) = "9"

       If isNumeric(Length) = False Then

              Response.Write "A numeric datatype was not submitted to this function."

              Exit Function

       End If

       '进行Length次循环,以生成Length长度的随机字符串

       For i = 1 to Length

              '建立一个随机种子

              Randomize

              '通过Rnd生成随机数,并将其处理,以从数组的36个元素中选取

              v = Int((35 * Rnd) + 1)

              tempS = tempS & c(v)

       Next

       GenRadomString = tempS

End Function

在编写程序时,常常需要生成一段随机字符串,例如本案例中的密码找回部分,密钥的生成,因此我写了一个生成随机字符串的函数GenRadomString,此函数有一个参数length,用来指定要生成的随机字符串的长度。

本函数的原理是,首先生成一个数组,用来存放a-z的字母和0-9的数字,而后进行length次循环,在循环体中,生成随机数,随即取出数组中一个元素,作为该位置的随机字符,循环完毕后,就会得到一个指定长度的随机字符串。

l         SendMail()过程

此过程代码如下:

Sub SendMail(strrecipient,strSubject,strContent)

       SendMailByJmail strRecipient,strSubject,strContent

End Sub

由于本章需要在服务器上发送邮件,因此需要设计一个发送邮件的函数。此函数实际上是直接调用我们在第三章介绍的通过Jmail组件发送邮件的函数SendMailByJmail。你也可以扩展此函数,加入判断服务器上多种邮件组件,并调用存在的组件来发送邮件。

l         CloseDb()过程

此过程代码如下:

Sub CloseDb()

       '遇到错误则继续运行

       On Error Resume Next

       '如果oRs是一个对象,则说明其已经被设定为记录集对象的实例,则此时进行处理

       If IsObject(oRs) Then

              '如果记录集的状态为打开,则关闭

              If oRs.State = 1 Then

                     oRs.Close

              End If

              '清空对象

              Set oRs = Nothing

       End If

       '如果oConn是一个对象,则说明其已经被设定为数据链接对象的实例,则此时进行处理

       If IsObject(oConn) Then

              '如果数据链接的状态为打开,则关闭

              If oConn.State = 1 Then

                     oConn.Close

              End If

              '清空对象

              Set oConn = Nothing

       End If

End Sub

在上一章中,我们为了维护系统的资源不被已经结束的数据处理占用,在每一次使用完毕后均要关闭记录集或者数据连接,并将对象置空,因此为了简便,本案例设计了过程CloseDB,用来完成这一操作。

请注意,在过程的开始部分我们使用了容错代码On Error Resume Next,这是因为,在调用这个过程时,你可能已经由于某种原因关闭并置空了记录集或数据连接对象,如果不加入此容错代码,则会因为已经关闭而发生错误。

l         ShowSuccess ()过程和ShowError()过程

在页面处理中,我们经常需要用到对用户提示操作成果或者操作失败的一些操作,因此这里使用了公用过程来完成。

ShowSuccess()过程代码如下:

Sub ShowSuccess(strMessage)

       '关闭数据库

       CloseDb()

       '重定向

       Response.Redirect("Success.asp?Msg=" & Server.UrlENCode(strMessage))

End Sub

这里程序首先调用CloseDb()过程来关闭数据连接,而后使用Response.Redirect方法将页面跳转到成果提示页Success.asp,同时通过QueryString变量来传递要提示的信息。

ShowError()过程与此类似,只不过是跳转到Error.asp页面。

8.6.3 显示样式

在系统中,我们在多个页面都可能调用显示图片列表或者相册列表,并显示,这样,如果我们希望对其显示的HTML代码进行改动,则十分麻烦,因此我建立了显示样式的一个“函数库”,在这里定义了相应的过程,用来打开记录集后循环调用,进行显示的处理。

首先来看显示相册部分的过程,此过程定义在include/def/album.asp文件中,代码如下:

Sub ShowAlbum(ByVal lngAlbumID,ByVal strAlbumName,ByVal strAlbumCover)

'显示列表中的图片

       '如果相册封面图片为空

       If Trim(strAlbumCover & "") = "" Then

              '则设定其为默认封面图片

              strAlbumCover = "images/default-cover.png"

       End If

       Response.Write("<li><a href=""list.asp?AlbumID=" & lngAlbumID & """ title=""相册:" & strAlbumName & """><img src=""" & strAlbumCover & """ /></a><p>" & strAlbumName & "</p></li>") & vbCrLf

End Sub

可以看到,此过程接受相册编号(lngAlbumID)、相册名称(strAlbumName)和相册封面图片(strAlbumCover)三个参数,并显示HTML代码,这里还有一个判断,如果strAlbumCover参数为空,那么我们将其设定为一个默认的相册封面图片的地址。

类似的,显示图片列表的过程,定义在include/def/list.asp文件中,代码如下:

Sub ShowPhotoThumb(lngPhotoID,strPhotoName,strPhotoUrl,strUserNickName,strPhotoAddTime)

'显示列表中的图片

       '如果用户没有设定昵称

       If Trim(strUserNickName & "") = "" Then strUserNickName = "没有设定昵称的用户"

       Response.Write("<li><a href=""view.asp?PhotoID=" & lngPhotoID & """ title=""图片名称:" & strPhotoName & vbCrLf & "由" & strUserNickName & vbCrLf & "上传于:" & strPhotoAddTime & """><img src=""" & strPhotoUrl & """ /></a></li>") & vbCrLf

End Sub

此过程接受如下参数:

lngPhotoID:图片编号

strPhotoName:图片名称

strPhotoUrl:图片地址

strUserNickName:图片上传者的昵称

strPhotoAddTime:图片上传时间

8.6.4 JavaScript文件

本案例使用了Prototype+script.aculo.us的JavaScript框架来实现AJAX和页面特殊效果的显示,相应文件放置在js/lib/目录中。除此之外,还使用了上一案例中使用的diag.js文件,另外,为了增强效果,还使用了lightbox.js和star.js文件,这些我们将在后面的部分进行具体讲解。

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (234人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号