asp创建对象

当我们使用服务器组件创建对象时,一般有两种方法。比较常用的方法是用SERVER对象的CreateObject() 方法,象这样:
  SET NextLink = Server.CreateObject("MSWC.NextLink")

  这种方法很好用,但是还有一种方法更节省系统资源。

  当你用Server.CreateObject()方法创建对象时,对象立即被加载,同时系统为这个对象分配好内存和其它资源。

  第二种创建对象的方法是利用HTML的< OBJECT >标记,语法是这样的:
  < OBJECT Runat=Sever ID=NextLink ProgID="MSWC.NextLink" >< /OBJECT >

  利用< OBJECT >标记创建对象时,你要创建的对象不被马上加载,而是等到这个对象的方法或属性第一次被引用时才加载。这样,我们就会节省一些资源。虽然不是很多,但是当你的系统每天要承受近百万次的点击时,这对节省服务器资源就很有帮助了

ASP对象 速查表

不全,老文.

  一、Request
  Request对象把客户信息保存在几个集合中,供ASP应用使用。通用的访问方法为:Request.Collection("membername")
  当你不指定集合名时,以(1)QueryString,(2)Form,(3)Cookie和(4)ServerVariable
的顺序搜索所有集合,当发现第一个匹配的变量时,就认定他是要引用的成员。当然,为了提高效率,你最好显式指定是那个集合中的成员。
  QueryString集合
  当HTML表单使用GET方法向ASP文件传递数据时,数据被保存在集合QueryString中。其成员可以具有与之相关的多个值,也就是说,同一个表单中,多个元素可以有相同的名字,下面的代码访问这些数据:
<%For each item in Request.QueryString("Name")
Response.write Item &"<br>"
Next %>
  Form集合
  当表单用POST方法时,数据被保存在Form集合中。
  ServerVariable集合
  保存了随HTTP请求一起传送HTTP头的信息,可以通过他获取有关浏览器的信息,主要成员有:
REMOTE_ADDR 远程主机IP地址
REMOTE_HOST 远程主机名称
REMOTE_USER 客户名称
REQUEST_METHOD 请求方法(如POST,GET,HEAD)
SERVER_NAME 服务器名
SERVER_PROTOCOL 服务器版本号(如HTTP/1。0)

  二、Response对象
  用来控制向客户返回的HTML的内容,有若干属性和方法。下面介绍我认为重要的:
  Buffer属性
  如果为True,则Response的内容要写入缓冲区,当脚本处理完时再发给客户。
  Status属性
传递HTTP Response报文的状态。服务器返回的状态代码由三位数字组成,可以用于测试阶段和转换控制到其他站点(即Forward)
  Write方法
  向客户输出HTML,可以是任何合法的HTML脚本。
  Redirect方法
  使浏览器重新定向到另外一个URL上,如:
<%browsetype=Request.ServerVariables("HTTP_USER_AGENT")
IF Left(browsetype,11)="Mozilla/2.0" then
Response.Redirect "FancyStart.asp"
Else
Response.Redirect "OldStart.asp"
End if%>
  Clear方法
  如果设Buffer属性为True,则Clear方法清楚所有缓冲区内容。
  Flush方法
  将缓冲内容立即发送给客户。
  End方法
  当Active Server遇到该方法时,立即停止处理ASP文件,如果有缓冲,立即发送内容到客户。
  BinaryWrite方法
  输出二进制数据

  三、Request对象和Response对象的Cookies集合
  1.写入Cookies
  Response.Cookies("Cookie名称")[("键名称").属性]=值
  如果该Cookie已经存在,则值被新值替代,否则,创建该cookie
  例如:
<% Response.Cookies("NewCookie")="New Cookie Value" %>
  2.读取Cookies
  如:
<%=Request.Cookies("NewCookie")%>
  Cookie还有一些属性,请参见有关资料。

  四、Application对象
  Active Server应用程序是虚拟目录及其子目录下的所有文件,即一个WEB。可以使用Application对象在应用软件的所有用户中共享信息,并可以在服务器运行期间持久地保存数据。他有一些控制访问应用层数据的方法和事件。
  Application本身没有内置属性,可以有用户定义:Application("属性名")=值
  保存在Application对象中的数据可以被Application的所有用户读取。如用来做访问记数:Application("aVisits")=Application("aVisits")+1
  方法有两个:
  Lock:
  当用户调用Lock时,只有当前用户能够编辑或增加Application对象的属性。
  Unlock:
  一定要记住,调用了Lock,完成时一定要调用Unlock.
  事件也有两个:
  Application_OnStart事件:应用程序启动时调用。
  Application_OnStart事件:应用程序终止时调用。
  这两个事件再加上Session的两个事件的处理程序都放在文件Global.asp中,一个Web应用只有一个Global.asa文件,且放在该应用的根目录下。一个Global.asp文件的例子如下:
<Script Language="VBScript" Runat="Server">
Sub Application_OnStart
Dim laChats(15)
Application("gaChats")=maChats
Application("giCounter")=0
End Sub

  五、Session对象
Active Server使用会话设置为使用应用程序的单个用户持久保持数据。当用户请求Active Server应用程序中ASP文件的URL时,要启动Session。在缺省情况下,如果没有用户请求,则服务器只保留Session20分钟。用户也可以通过设Session的属性TimeOut来改变。或显示地调用Session.Abandon方法来释放Session对象。
  SessionID属性
  唯一标识一个会话的标识符。
  TimeOut属性
  定义Session保留的时限,单位为分钟,如Session.TimeOut=10
  像Application一样,Session也可由用户来定义属性。
  Session的唯一方法是Abandon,用来取消用户的Session对象,并释放其占用的服务器资源。如:<%Session.Abandon%>
  事件有Session_OnStart和Session_OnEnd,其处理程序应放在文件Glabal.asa中。

  六、Server对象
  1.HTMLEncode方法
  对特定的字符串进行HTML编码,如你本来要显示下列内容:
The Underline tag(<u></u>) is used to underline the surrounded text.
  但很可能实际显示成:
The Underline tag() is used to underline the surrounded text.
  为了避免这种情况,可以调用Server对象的HTMLEncode方法,如:
<%
Response.Write Server.HTMLEncode("The Underline tag(<U></U>) is used to underline the surrounded text.")
%>
  2.URLEncode方法
  根据URL规则对字符串进行编码。当字符串数据以URL格式传递到服务器时,串中间不能有空格,不能有特殊字符,这时,你就必须用URL编码。
  3.CreateObject方法
  用于创建已注册到服务器机器上的ActiveX组件例程,这恐怕是最重要的一个方法了:
  句法如下:
Server.CreateObject("ComponentName")
  可以作为例程启动的组件可以是ActiveX能够使用的所有内置组件,实际上是存在于服务器上的任何ActiveX组件。比如,要使用金融计算,步骤如下:
  1.创建对象
<%
set x=server.createobject("extend.financial");
%>
  2.调用对象的方法
<%
set x=server.createobject("extend.financial")
response.write Format(x.futval(.07/12,200,-500),"###,###,##0.00")
%>
  3.释放例程
<%
set x=Nothing
%>

  七、FileSystem和TextStream对象
  FileSystem和TextStream对象可用于建立对文件系统的访问,并提供顺序访问文件的机制。FileSystem没有属性,只有两个方法,第一个方法是CreateTextFile方法,可以在宿主机上创建新的文本文件,并返回TextStream对象以提供对新创建文件的访问机制。第二个是OpenTextFile方法,用于打开文本文件供顺序访问并返回一个TextStream对象。如:

<%
set fsFilesys=CreateObject("Scripting.FileSystemObject")
set tsCoffee=fsFilesys.CreateTextFile("c:\coffe.txt",True)
tsCoffee.WriteLine("Man,I Could use some coffee.")
tsCoffee.Close
%>
  TextStream对象的使用有:
  AtEndOfLine:如果文件当前字符处在行的末尾则返回true
  AtEndOfScreen:如果当前字符在文件的末尾则返回true
  Column:返回当前字符的列号
  Line:返回当前字符的行号
  TextStream对象的方法为:
  Close:关闭并释放TextStream对象
  Read:从一个文件中读取给定个数的字符到一个变量中
  ReadAll:读取文件的全部内容到一个变量中
  ReadLine:读取给定行号的内容到一个变量中
  Skip:跳过给定个数的字符
  SkipLine:跳过给顶的行书
  Write:写如字符串
  WriteLine:写入以换行结束的字符串
  WriteBlankLines:写入给顶数量的空格

ASP访问SQL Server内置对象

平常我们只听说过ADO等一类ASP对象,但在ASP中还有个鲜为人知的专门SQL Server的ASP访问对象,它就是SQLOLE.SQLServer对象。SQLOLE.SQLServer可以直接访问SQL Server的系统属性。以Set oSQLServer = CreateObject ("SQLOLE.SQLServer")语句将产生一个SQL Server服务器对象。

---- 若要查看此服务器中数据库的集合,可用语句:

For Each SQLDB In oSQLServer.Databases
Response.Write SQLDB.Name ‘将列出所有的数据库,如Pubs等
Next

---- 若要查看某数据库中(如PUBS数据库)数据表的集合,可用语句:

pubDatabase=oSQLServer.Databases(“pubs”)
’oSQLServer是前面创建的SQL Server服务器对象
For Each DBTable In pubDatabase.Tables
Response.Write DBTable.Name
Next

---- 下面的语句将列出数据库中(PUBS数据库)数据视图

pubDatabase =oSQLServer.Databases(“pubs”)
’oSQLServer是前面创建的SQL Server服务器对象
For Each DBView In pubDatabase.Views
Response.Write DBView.Text
Next

---- 以下语句将列出数据库中(PUBS数据库)存贮过程

pubDatabase =oSQLServer.Databases(“pubs”)
’oSQLServer是前面创建的SQL Server服务器对象
For Each DBSP In pubDatabase.StoredProcedures
Response.Write DBSP.Text
Next

---- 程序运行的结果(取数据表名):

---- 取存贮过程的结果:

---- 一个完整的小例子源码附后(其它功能读者可加入)。

< %@ LANGUAGE = VBScript % >

< HTML >
< HEAD >
< META NAME="GENERATOR" Content=
"Microsoft Developer Studio" >
< META HTTP-EQUIV="Content-Type"
content="text/html; charset=gb2312" >

< TITLE >< /TITLE >
< /HEAD >

< %
On Error Resume Next
Dim oSQLServer
Set oSQLServer = CreateObject ("SQLOLE.SQLServer")

strServer = "dep"
strLogin = "sa"
strPwd = ""

oSQLServer.Connect strServer,strLogin,strPwd

% >

< BODY BGCOLOR=#ffffff >
数据库列表
< SELECT NAME="Database" >
< %
For Each SQLDB In oSQLServer.Databases
If Not SQLDB.SystemObject Then
Response.Write "< OPTION VALUE=
""" & SQLDB.Name & """ >" & SQLDB.Name

& " "
End If
Next
Set oSQLServer = Nothing
% >
< /SELECT >
< /BODY >
< /HTML >

转化ip地址为长整型数字

将ip地址转换为长整型

<%
Function CLngIP(ByVal asNewIP)
Dim lnResults
Dim lnIndex
Dim lnIpAry
lnIpAry = Split(asNewIP, ".", 4)
For lnIndex = 0 To 3
If Not lnIndex = 3 Then
lnIpAry(lnIndex) = lnIpAry(lnIndex) * (256 ^ (3 - lnIndex))
End If
lnResults = lnResults + lnIpAry(lnIndex)
Next
CLngIP = lnResults
End Function
%>

逆函数

<%
Function CStrIP(ByVal anNewIP)
Dim lsResults
Dim lnTemp
Dim lnIndex
For lnIndex = 3 To 0 Step -1
lnTemp = Int(anNewIP / (256 ^ lnIndex))
lsResults = lsResults & lnTemp & "."
anNewIP = anNewIP - (lnTemp * (256 ^ lnIndex))
Next
lsResults = Left(lsResults, Len(lsResults) - 1)
CStrIP = lsResults
End Function
%>

asp获取文件md5值

网上asp加密字符的MD5很多,也很普遍,因为受到asp语言本身的限制,对文件进行md5介绍的文章很少,本文通过2种方式来谈谈如何通过asp获取文件的md5值。

网上asp加密字符的MD5很多,也很普遍,但是对文件进行md5的确很少,因为受到asp语言本身的限制。我们知道字符串的md5可以对明文进行不可逆的加密,从而保证数据储存或者传送的安全性。同样的,对文件进行md5加密也是为了保证在网络传送时不被修改和校验,另外还有一个用途就是在个人站点里面的应用:可以保证上传的图片或文件具有唯一性。原理是,上传到服务器之后,同时在数据库中记录该上传文件的md5值,这样在下次传同样文件的时候,可以通过查询数据库是否是相同的文件,md5值相同,我们就认为它是相同的文件,md5值就是文件的“身份证”,其实百度也有这方面的应用,在百度搜索图片,点开图片后,有时候会出现“您还可以点击以下链接查看到这张图片:XXX网址”,原理也是一样,对文件进行md5。
废话少说,开始正文。
一、asp通过xml交互方式调用.Net程序实现文件md5
asp由于本身语言的限制,无法实现文件的md5,但是.net确可以,那是不是可以通过.net对文件进行md5,然后发送信息给asp接收,这样就可以做到asp的md5了呢,答案是肯定的。这里涉及到asp与.net程序间的交互,我以前写过一个asp的类:《asp处理xml数据的发送、接收类》,可以上我的百度空间看:http://hi.baidu.com/manbutianmi/blog/item/dec182fc6db36587b801a0f6.html,讲的是asp处理xml数据的发送与接收,可用于各种异构系统之间API接口间通讯。本文正好是这个类的一个应用。代码如下:
asp端代码
xmlcls.asp
<%
Rem 处理xml数据的发送、接收类
'--------------------------------------------------
'转载的时候必须保留此版权信息
'作者:walkman
'网址:手机主题网:http://www.shouji138.com
'版本:ver1.0
'--------------------------------------------------
Class XmlClass

Rem 变量定义
Private XmlDoc,XmlHttp
Private MessageCode,SysKey,XmlPath
Private m_GetXmlDoc,m_url
Private m_XmlDocAccept
Rem 初始化
Private Sub Class_Initialize()
On Error Resume Next
MessageCode = ""
XmlPath = ""
Set XmlDoc = Server.CreateObject("msxml2.FreeThreadedDOMDocument.3.0")
XmlDoc.ASYNC = False
End Sub

Rem 销毁对象
Private Sub Class_Terminate()
If IsObject(XmlDoc) Then Set XmlDoc = Nothing
If IsObject(m_XmlDocAccept) Then Set m_XmlDocAccept = Nothing
If IsObject(m_GetXmlDoc) Then Set m_GetXmlDoc = Nothing
End Sub

'公共属性定义开始--------------------------
Rem 错误信息
Public Property Get Message()
Message = MessageCode
End Property

Rem 发送xml的地址
Public Property Let URL(str)
m_url = str
End Property
'公共属性定义结束--------------------------

'私有过程、方法开始--------------------------
Rem 加载xml
Private Sub LoadXmlData()
If XmlPath <> "" Then
If Not XmlDoc.Load(XmlPath) Then
XmlDoc.LoadXml "<?xml version=""1.0"" encoding=""gb2312""?><root/>"
End If
Else
XmlDoc.LoadXml "<?xml version=""1.0"" encoding=""gb2312""?><root/>"
End If
End Sub
Rem 字符转化
Private Function AnsiToUnicode(ByVal str)
Dim i, j, c, i1, i2, u, fs, f, p
AnsiToUnicode = ""
p = ""
For i = 1 To Len(str)
c = Mid(str, i, 1)
j = AscW(c)
If j < 0 Then
j = j + 65536
End If
If j >= 0 And j <= 128 Then
If p = "c" Then
AnsiToUnicode = " " & AnsiToUnicode
p = "e"
End If
AnsiToUnicode = AnsiToUnicode & c
Else
If p = "e" Then
AnsiToUnicode = AnsiToUnicode & " "
p = "c"
End If
AnsiToUnicode = AnsiToUnicode & ("&#" & j & ";")
End If
Next
End Function

Rem 字符转化
Private Function strAnsi2Unicode(asContents)
Dim len1,i,varchar,varasc
strAnsi2Unicode = ""
len1=LenB(asContents)
If len1=0 Then Exit Function
For i=1 to len1
varchar=MidB(asContents,i,1)
varasc=AscB(varchar)
If varasc > 127 Then
If MidB(asContents,i+1,1)<>"" Then
strAnsi2Unicode = strAnsi2Unicode & chr(ascw(midb(asContents,i+1,1) & varchar))
End If
i=i+1
Else
strAnsi2Unicode = strAnsi2Unicode & Chr(varasc)
End If
Next
End Function

Rem 往文件中追加字符
Private Sub WriteStringToFile(filename,str)
On Error Resume Next
Dim fs,ts
Set fs= createobject("scripting.filesystemobject")
If Not IsObject(fs) Then Exit Sub
Set ts=fs.OpenTextFile(Server.MapPath(filename),8,True)
ts.writeline(str)
ts.close
Set ts=Nothing
Set fs=Nothing
End Sub
'私有过程、方法结束--------------------------

'公共方法开始--------------------------

'''''''''''发送xml部分开始
Rem 从外部xml文件填充XmlDoc对象
Public Sub LoadXmlFromFile(path)
XmlPath = Server.MapPath(path)
LoadXmlData()
End Sub

Rem 用字符串填充XmlDoc对象
Public Sub LoadXmlFromString(str)
XmlDoc.LoadXml str
End Sub

Rem 设置node的参数 如 NodeValue "appID",AppID,1,False
'--------------------------------------------------
'参数 :
'NodeName 节点名
'NodeText 值
'NodeType 保存类型 [text=0,cdata=1]
'blnEncode 是否编码 [true,false]
'--------------------------------------------------
Public Sub NodeValue(Byval NodeName,Byval NodeText,Byval NodeType ,Byval blnEncode)
Dim ChildNode,CreateCDATASection
NodeName = Lcase(NodeName)
If XmlDoc.documentElement.selectSingleNode(NodeName) is nothing Then
Set ChildNode = XmlDoc.documentElement.appendChild(XmlDoc.createNode(1,NodeName,""))
Else
Set ChildNode = XmlDoc.documentElement.selectSingleNode(NodeName)
End If
If blnEncode = True Then
NodeText = AnsiToUnicode(NodeText)
End If
If NodeType = 1 Then
ChildNode.Text = ""
Set CreateCDATASection = XmlDoc.createCDATASection(Replace(NodeText,"]]>","]]&gt;"))
ChildNode.appendChild(createCDATASection)
Else
ChildNode.Text = NodeText
End If
End Sub

'--------------------------------------------------
'获取发送包XML中节点的值
'参数 :
'Str 节点名
'--------------------------------------------------
Public Property Get XmlNode(Byval Str)
If XmlDoc.documentElement.selectSingleNode(Str) is Nothing Then
XmlNode = "Null"
Else
XmlNode = XmlDoc.documentElement.selectSingleNode(Str).text
End If
End Property
'--------------------------------------------------
'获取返回XML数据对象
'例:
'当GetXmlData不为NULL时,GetXmlData为XML对象
'--------------------------------------------------
Public Property Get GetXmlData()
Set GetXmlData = m_GetXmlDoc
End Property

'--------------------------------------------------
'发送xml包
'--------------------------------------------------
Public Sub SendHttpData()
Dim i,GetXmlDoc,LoadAppid
Set Xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
Set GetXmlDoc = Server.CreateObject("msxml2.FreeThreadedDOMDocument.3.0") ' 返回xml包
XmlHttp.Open "POST", m_url, false
XmlHttp.SetRequestHeader "content-type", "text/xml"
XmlHttp.Send XmlDoc
'Response.Write strAnsi2Unicode(xmlhttp.responseBody)
If GetXmlDoc.load(XmlHttp.responseXML) Then
Set m_GetXmlDoc = GetXmlDoc
Else
MessageCode = "请求数据错误!"
Exit Sub
End If
Set GetXmlDoc = Nothing
Set XmlHttp = Nothing
End Sub

'--------------------------------------------------
'打印发送请求XML数据
'--------------------------------------------------
Public Sub PrintSendXmlData()
Response.Clear
Response.ContentType = "text/xml"
Response.CharSet = "gb2312"
Response.Expires = 0
Response.Write "<?xml version=""1.0"" encoding=""gb2312""?>"&vbNewLine
Response.Write XmlDoc.documentElement.XML
End Sub

'--------------------------------------------------
'打印返回XML数据
'--------------------------------------------------
Public Sub PrintGetXmlData()

Response.Clear
Response.ContentType = "text/xml"
Response.CharSet = "gb2312"
Response.Expires = 0
If IsObject(m_GetXmlDoc) Then
Response.Write "<?xml version=""1.0"" encoding=""gb2312""?>"&vbNewLine
Response.Write m_GetXmlDoc.documentElement.XML
Else
Response.Write "<?xml version=""1.0"" encoding=""gb2312""?><root></root>"
End If
End Sub

Rem 保存发送请求xml数据到文件,文件名为sendxml_日期.txt
Public Sub SaveSendXmlDataToFile()
Dim filename,str
filename = "sendxml_" & DateValue(now) & ".txt"
str = ""
str = str & ""& Now() & vbNewLine
str = str & "---------------------------------------------"& vbNewLine
str = str & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbNewLine
str = str & XmlDoc.documentElement.XML & vbNewLine
str = str & "---------------------------------------------"& vbNewLine
str = str & vbNewLine & vbNewLine & vbNewLine
WriteStringToFile filename,str
End Sub

Rem 保存返回XML数据到文件,文件名为getxml_日期.txt
Public Sub SaveGetXmlDataToFile()
Dim filename,str
filename = "getxml_" & DateValue(now) & ".txt"
str = ""
str = str & ""& Now() & vbNewLine
str = str & "---------------------------------------------"& vbNewLine
If IsObject(m_GetXmlDoc) Then
str = str & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbNewLine
str = str & m_GetXmlDoc.documentElement.XML
Else
str = str & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbNewLine & "<root>" & vbNewLine & "</root>"
End If
str = str & vbNewLine
str = str & "---------------------------------------------"& vbNewLine
str = str & vbNewLine & vbNewLine & vbNewLine
WriteStringToFile filename,str
End Sub

'--------------------------------------------------
'获取返回xml的节点信息
'XmlClassObj.GetSingleNode("//msg")
'--------------------------------------------------
Public Function GetSingleNode(nodestring)
If IsObject(m_GetXmlDoc) Then
GetSingleNode = m_GetXmlDoc.documentElement.selectSingleNode(nodestring).text
Else
GetSingleNode = ""
End If
End Function
''''''''''''''''''发送xml部分结束

''''''''''''''''''接收xml部分开始
'--------------------------------------------------
'接收XML包,错误信息通过Message对象获取
'--------------------------------------------------
Public Function AcceptHttpData()
Dim XMLdom
Set XMLdom = Server.CreateObject("Microsoft.XMLDOM")
XMLdom.Async = False
XMLdom.Load(Request)
If XMLdom.parseError.errorCode <> 0 Then
MessageCode = "不能正确接收数据" & "Description: " & XMLdom.parseError.reason & "<br>Line: " & XMLdom.parseError.Line
Set m_XmlDocAccept = Null
Else
Set m_XmlDocAccept = XMLdom
End If
End Function
'--------------------------------------------------
'返回接收XML包节点信息
'XmlClassObj.GetSingleNode("//msg")
'--------------------------------------------------
Public Function AcceptSingleNode(nodestring)
If IsObject(m_XmlDocAccept) Then
AcceptSingleNode = m_XmlDocAccept.documentElement.selectSingleNode(nodestring).text
Else
AcceptSingleNode = ""
End If
End Function

'--------------------------------------------------
'打印接收端接收到的XML数据
'--------------------------------------------------
Public Sub PrintAcceptXmlData()
Response.Clear
Response.ContentType = "text/xml"
Response.CharSet = "gb2312"
Response.Expires = 0
If IsObject(m_XmlDocAccept) Then
Response.Write "<?xml version=""1.0"" encoding=""gb2312""?>"&vbNewLine
Response.Write m_XmlDocAccept.documentElement.XML
Else
Response.Write "<?xml version=""1.0"" encoding=""gb2312""?><root></root>"
End If
End Sub

Rem 保存接收的XML包数据到文件,文件名为acceptxml_日期.txt
Public Sub SaveAcceptXmlDataToFile()
Dim filename,str
filename = "acceptxml_" & DateValue(now) & ".txt"
str = ""
str = str & ""& Now() & vbNewLine
str = str & "---------------------------------------------"& vbNewLine
If IsObject(m_XmlDocAccept) Then
str = str & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbNewLine
str = str & m_XmlDocAccept.documentElement.XML
Else
str = str & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbNewLine & "<root>" & vbNewLine & "</root>"
End If
str = str & vbNewLine
str = str & "---------------------------------------------"& vbNewLine
str = str & vbNewLine & vbNewLine & vbNewLine
WriteStringToFile filename,str
End Sub

''''''''''''''''''接收xml部分结束
Rem 保存调试数据到文件,文件名为debugnote_日期.txt
Public Sub SaveDebugStringToFile(debugstr)
Dim filename,str
filename = "debugnote_" & DateValue(now) & ".txt"
str = ""
str = str & ""& Now() & vbNewLine
str = str & "---------------------------------------------"& vbNewLine
str = str & debugstr & vbNewLine
str = str & "---------------------------------------------"
str = str & vbNewLine & vbNewLine & vbNewLine
WriteStringToFile filename,str
End Sub
'公共方法结束--------------------------

End Class
%>
filemd5fun.asp
<!--#Include File="xmlcls.asp"-->
<%
Rem 取得文件的md5,参数为文件名
Function GetFileMD5(filename)
Const Apisysno = "k8n6g2b0m1a6b0f6e8" '接口的Key值,防止被非法适用 接口应该保持一致
Dim XmlClassObj
Set XmlClassObj = new XmlClass '创建对象
XmlClassObj.LoadXmlFromString("<?xml version=""1.0"" encoding=""gb2312""?><root/>") '用xml字符填充XMLDOC对象,用来发送xml
XmlClassObj.URL = "http://www.shouji138.com/aspnet2/FileMD5.aspx" '设置响应的url,这里应该改成你的网址

Rem xml格式
Rem "<?xml version="1.0" encoding="gb2312"?>
Rem <root>
Rem <sysno></sysno>
Rem <apiaction></apiaction>
Rem <filename></filename>
Rem </root>

XmlClassObj.NodeValue "sysno",Apisysno,0,False '接口的Key值,防止被非法适用
XmlClassObj.NodeValue "apiaction","createfilemd5",0,False '接口的响应动作,用于定义一个接口用于多种用途
XmlClassObj.NodeValue "filename",filename,0,False '文件路径和文件名,用相对路径
'XmlClassObj.SaveSendXmlDataToFile() '将发送的xml数据库包存入txt文件,用于调试之用
XmlClassObj.SendHttpData() '发送xml数据
'XmlClassObj.SaveGetXmlDataToFile() '保存接收到的xml数据

Rem 处理结果
Dim message,status
status = XmlClassObj.GetSingleNode("//status") '显示状态,如果为OK则表示成功,否则有错误发生
message = XmlClassObj.GetSingleNode("//message") '显示取到的MD5值,如果status不为OK,则message为错误信息
Set XmlClassObj = Nothing
If status = "OK" Then
GetFileMD5 = message
Else
GetFileMD5 = ""
End If
End Function
%>
test.asp
<!--#Include File="filemd5fun.asp"-->
<%
Response.Write "web.config的md5值是:" & GetFileMD5("web.config") & "<br />"
Response.Write "files/logo-yy.gif的md5值是:" & GetFileMD5("files/logo-yy.gif") & "<br />"
Response.Write "xmlcls.asp的md5值是:" & GetFileMD5("xmlcls.asp") & "<br />"
%>

.net端代码:
MD5.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace Winsteps.FileMD5
{
public class MD5
{
public static string md5_hash(string path)
{
try
{
FileStream get_file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
System.Security.Cryptography.MD5CryptoServiceProvider get_md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] hash_byte = get_md5.ComputeHash(get_file);
string resule = System.BitConverter.ToString(hash_byte);
resule = resule.Replace("-", "");
return resule;
}
catch (Exception e)
{
return e.Message;
}
}
}
}
FileMD5.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FileMD5.aspx.cs" Inherits="Winsteps.FileMD5.FileMD5" %>
<!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 runat="server">
<title>手机主题网:http://www.shouji138.com</title>
</head>
<body>
<form id="form1" runat="server">
<div>

</div>
</form>
</body>
</html>
FileMD5.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.Configuration;
namespace Winsteps.FileMD5
{
public partial class FileMD5 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string sysno = "11111";
string status = "False";
string message = "未指定的错误";
string net2sysno = ConfigurationManager.AppSettings["sysno"];
XmlDocument doc = new XmlDocument();
try
{

doc.Load(Request.InputStream);
sysno = doc.SelectSingleNode("//sysno").InnerText.Trim();
if (net2sysno != sysno)
{
message = "非法适用!";
}
else
{
string filename = Server.MapPath(doc.SelectSingleNode("//filename").InnerText.Trim());
message = MD5.md5_hash(filename);
status = "OK";
}
}
catch(Exception ex)
{
message = ex.Message;
}
finally
{
if (doc != null)
doc = null;
}
Response.Clear(); //清楚html字符
Response.ContentType = "text/xml";
Response.Charset = "GB2312";//如果xml字符串中包含中文
Response.Write("<?xml version=\"1.0\" encoding=\"GB2312\"?>");
Response.Write("<root>");
Response.Write(" <status>" + status + "</status>");
Response.Write(" <message>" + message + "</message>");
Response.Write("</root>");
Response.End();
}
}
}

Web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="sysno" value="k8n6g2b0m1a6b0f6e8"></add>
</appSettings>
<system.web>
<httpRuntime executionTimeout="3600" maxRequestLength="1048576"/>
<compilation debug="true" defaultLanguage="c#" />
<customErrors mode="Off" />
<identity impersonate="true"/>
<authentication mode="Forms">
<forms name="forums" path="/" loginUrl="Login.aspx" protection="All" timeout="40">
</forms>
</authentication>
<pages validateRequest="false"></pages>
<globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" uiCulture="zh-CN"/>
</system.web>
</configuration>

web.config的sysno要跟filemd5fun.asp里面的Apisysno保持一致,具体应用时应该要把这个key改成你自己的值来保证安全。
演示地址:http://www.shouji138.com/aspnet2/filemd5.asp
代码虽然长,但是原理简单,asp发送xml数据给asp.net(xml中包含了要md5的文件名)->asp.net接收xml对文件进行md5->asp.net将结果通过xml返回给asp(xml中包含了获取到的md5值)->asp获取返回的xml,解析出md5值。
应用范围:
1. 在两个系统之间传送文件时,可以在传送前进行文件md5,传送后进行文件md5,检查两值是否相等,如果相等则表示在传送过程中没有被修改。
2. 做上传系统中,如果要求不能上传同文件的话,可以在上传之后的文件进行md5存入数据库中,这样下次上传同样文件,则md5会相同,拒绝上传。
3. 在搜索引擎、迅雷本b2b软件中,对文件md5,具有相同md5的文件被认为是相同文件,而不管文件名是否相同,可以从多个源来分享文件。
4. 其他应用。。。。。

二、asp通过COM组件实现md5(需要在服务器上注册组件)
注册一个asp的文件md5组件,下载地址:http://www.shouji138.com/aspnet2/files/aspmd5.rar
然后将PARmf.dll文件拷贝到服务器的c:\WINDOWS\system32目录,运行regsvr32 parmf.dll进行注册,重启IIS。
调用代码:
<%
Set DelphiASPObj = Server.CreateObject("PARmf.md5file")
DelphiASPObj.in_path=Server.Mappath("Web.config") '文件路径
Response.Write "web.config的md5值是:" & DelphiASPObj.get_path_md5 & "<br />"
Set DelphiASPObj=nothing
%>

三、两种方式获取文件md5的对比

第一种方法通过与asp.net程序交互xml数据来得到文件的md5,需要服务器支持asp.net,一般的虚拟主机都提供asp.net环境,但是价格高点;
第二种方法通过注册COM组件实现,需要有服务器的权限,对于拥有服务器的比较合适。
另外第一种方式的这种交互方法使得asp具有更大的灵活性,可以应用在2台不同的服务器上面进行数据交互,可广泛应用于各种异构平台。

分组选择控件(Optgroup)和复杂实例

相关Option分组产生层级,对最终用户来说可能没有什么意义,但是对于制作者来说,Option分组可以提供很多方便。相关属性: 1. title 标题,通常这种标题无法被显示示例: 上例演示了一个基本的Optgroup元素的应用,由于Optgroup没有变量参数,所以只能提供有限的应用。一个比较复杂的例子:<?xml version="1.0"?>

Select List 控件

对表单的控制能力可以证明一个HTML设计者是否够专业,而且很多交互功能也必须依赖表单。WML没有表单属性,但是WML可以直接使用控件,同样可以达到使用表单的效果。因此,使用控件的水平可以体现一个WML设计者的制作水平。 WML控件有Select List和Input Box两个系列,每个系列另外包含几个子系列,基本可以满足表单设计的需求。 选择列表控件(Select List) Select有两对很重要也很容易混淆的属性:name, value , iname , ivalue。这四个属性的区别和用途不太容易描述清除,看了后面的例子会很容易理解。 每个Select是一个或多个Option的集合,Option地结果返回给Select元素的name和iname。 示例: 相关属性: 1. multiple 这个布尔变量的值决定是否允许多重选择,值为True时Select控件允许复选,否则相反。 2. name & Value 这一组变量的主要作用是获取于该option的返回值,value提供name的缺省值。 3. iname & ivalue 与上一组参数功能相似,不同的是ivalue返回有效Option的序列号。被选中的控件用它的序号表示,0代表没有option被选中,假如第二个和第三个同时被选中就表示为 2;3 4. title 作为标题参数提供给浏览器,但是不同的浏览器处理方式有所不同,有些浏览器直接显示选项内容不显示标题,有的浏览器显示标题,按选择键进入选择界面。 5. tabindex 提供给浏览器的控件序号参数。 2、选项控件 Option只有包含在Select内才有意义,无法单独使用。 相关属性: 1. value Option的返回值,假如当前Option被选择,这个Value的值会被传送到Select元素的Name变量。 2. title 供浏览器显示的选项标题。 3. onpick 如果当前Option被点选,浏览器跳转到指定的Url。 示例1:

WML文档结构祥解

1、声明(Prologue)<?xml version="1.0"?> 2、元素(Element)   WML首先定义一个Deck,然后在Deck内封装信息和Card。3、文件头(Head Element)   头信息包含与Deck有关的信息,包括meta数据和控制元素。  3.1、访问权限设置(Access)  该元素用于设置有访问当前Deck权限的列表。如果Deck内不包含Access Element信息,该Deck下的Access Element处于无效状态,其他所有的Deck都可以访问该Deck。  相关属性:   domain:假如设置

WML的事件

内部事件(Onevent)相关属性: type:内部事件的触发条件,当前浏览器状态满足触发条件时,浏览器就会触发这个条件下设置的Task,内部事件总共有4种触发条件。  1 ontimer 满足时钟设置的条件时,该条件成立。关于时钟设置问题,后面还有专门的说明。   2 onenterbackward 通过Prev或其他外部命令返回到当前Card,该条件成立。   3 onenterforward 当浏览器通过链接进入当前Card,该条件成立   4 onpick 在使用Option控件列表的时候,任何点击控件的行为都会触发本事件,包括选择和去掉选择。示例:<?xml version="1.0"?>

动作和链接

设置动作(Do)Do是WML语言中最有有价值的元素之一,它给用户提供一种在当前Card上进行"动作"的通用方法。这种动作通常被定位在用户终端界面的特定部件上,例如WAP手机的功能键(Cancel,Option,Accept),特定的图标,语音识别功能等等。Do可以设置在Deck的Template上或者Card上,当他们重名的时候Card上的Do会覆盖Template上的同名元素(参看任务屏蔽说明)。属性列表:type:诉浏览器动作的意图。   WML总共声明了9个类型的动作,最常用的动作类型是"accept"和"option"。   1.1 accept,接受、确认   1.2 prev,返回上一个历史堆栈中的URL   1.3 help,请求帮助   1.4 reset,清除或者重置状态   1.5 options,根据当前页面的功能设置选项。   1.6 delete,删除选择条目   1.7 unknow,相当于空白字串   1.8 还有两个属性还没有最后确定。label:设置按钮标题,显示在浏览器定义好的屏幕位置,不同浏览器地显示位置不同。如果不设置标题,按钮会按照浏览器的缺省格式显示,不同浏览器的缺省格式不同。name:按钮名称,可以用Card级的动作覆盖template上的同名动作,重新赋予那些动作新的任务。optional:来定义一个按钮是否显示,设置为True时会被浏览器忽略示例: 链接(Anchor)archor是WML定义链接的基础方式,与其他标签结合可以满足很多应用,anchor必须与go结合。相关属性: title 链接的文本显示内容。示例: