Reader's Digest

Digest your Internet

Archive for the 'Programming Area' Category

ASP中巧用Response属性

—- 我在用ASP为某单位制作网页时遇到这样一个问题,单位以前的MIS系统中将一些Word文件以字节流的形式保存在数据库中,现在用户要求我用ASP将这些Word文件数据从数据库中取出并在网页中显示出来。开始我自然地想到在服务器上创建临时文件、然后在网页中增加一个指向这个临时文件的链接,但这个方法将大大增加服务器的负担不说,而且在服务上如何保证特定客户端所使用的临时文件不被其它客户端使用的文件覆盖,如何在文件传送给用户后将文件删除,这些问题在实际都难很好解决。那么有没有更好的办法呢? —- 为此我仔细查看了一下ASP的参考书,发现Response对象有一个叫contenttype的属性,它定义服务器发送给客户端内容的MIME类型。MIME全称Multipurpose Internet Mail Extensions,即多功能Internet邮件扩展。我们知道,在网页编程中我们有时将超链接指向一个Word或Excel文件,当用户点击这个链接时浏览器会自动调用对应方法将这个文件打开。之所以能做到这点就是因为用户机器上安装office后会在浏览器中注册对应的MIME资源类型。比如说word文件的MIME类型是Application/msword(前者是MIME类型,后者是MIME子类),Excel文件的MIME资源类型是Application/msexcel。事实上,凡是浏览器能处理的所有资源都有对应的MIME资源类型,比如说html文件的MIME类型是Text/html,JPG文件的MIME类型是Image/JPG。在与服务器的交互中,浏览器就是根据所接受数据的MIME类型来判断要进行什么样的处理,对html、JPG等文件浏览器直接将其打开,对Word、Excel等浏览器自身不能打开的文件则调用相应方法打开。对没有标记MIME类型的文件,浏览器则根据其扩展名和文件内容猜测其类型。如果浏览器无法猜出,则将它作为application/octet-stream。要了解各种文件的MIME类型,请在win98 我的电脑->查看->文件夹选项->文件类型 中查看。 —- 于是我灵机一动,想到在ASP中可以先将WORD数据以字节流方式取出,接着将其conntenttype属性标记为Application/msword,再将它发送给客户机,客户机收到这个资源后,根据其MIME类型,会自动调用客户机上的Word(当然,前提是客户机上装了Word,否则会将其作为一个不能识别的资源,提示用户保存起来,而不是打开它)将它打开。经试验效果很好,方法简单且速度很快,而且在IE5中浏览器使用内嵌方式(类似于OLE方式)打开,效果更佳。以下是程序内容。 —- 假设表名tab_word,表中有两个字段,一个是整型,名id,用作Word数据的唯一标识,另一个Blob型,名worddata,里面存放Word数据。现在要在页面上显示id等于1的Word文件内容, ASP程序如下:     < %     ´ conn – 已创建的数据库连接     ´ rs  —  结果集     rs = conn.execute(“select     worddata from tab_word where id = 1”)     response.contenttype = “Application/msword”     response.writebinary(rs(“worddata”))     ´注意将结果集中的数据直接用writebinary发送出去,不要用变量     […]

Read the rest of this entry »

如何用ASP编写网站统计系统

在目前的网站统计系统决大部分都是CGI的,但编写起来特别复杂,而ASP学起来简单,更有和数据库结合的优点,所以结合自己曾经做过的网站统计系统,和大家探讨一下ASP编写网站统计系统。   大家都看过网易的网站统计系统,它可以统计总访问量,每日平均访问量,当日访问量,最高访问量,最高访问日期,日流量分析,月流量分析,周流量分析,浏览器分析,等等。   其实要做一个ASP的访问统计系统关键是系统表结构的设计。以及如何来采集用户的CGI变量,如何来显示用户的信息。也就是说系统的关键是两个ASP程序,统计程序和显示程序。   首先我们先看看如何来采集用户的访问信息。   我们编写访问统计需要知道用户的如下信息,访问者的IP(根据访问IP可以形成访问者IP列表),访问者的浏览器与操作系统(统计访问者的浏览器与操作系统及所有访问者浏览器与操作系统比例图),访问者的访问时间(进行日访问量分析,月访问量分析,周访问量分析),下面我们来看看用ASP的获得以上信息的语句:   1。获得访问者IP   Dim M_IP   M_IP=Request.Servervariables(“REMOTE_HOST”)   用上面的语句可以取得访问者的IP。   2。获得浏览器信息   Dim O_Browser,M_BrowserType   Set O_Browser=Server.Createobject(“MSWC.BrowserType”)   M_BrowserType=O_Browser.Browser+O_Browser.Version   3。获得访问时间   Dim M_DateTime   M_DateTime=Year(Date())&”/”&Right(“0″&Month(Date()),2)&”/”Right(“0″&Day(Date()),2)&”/”&Right(“0″&Hour(Time()),2)&”:”&Right(“0″&Minute(Time()),2)&”:”&Right(“0″&Second(Time()),2)   1 取得用户的操作系统。   在ASP中使用如下语句可以得到访问者的http_user_agent字符串。   Dim StrUserAgent   StrUserAgent=Request.ServerVariables(“HTTP_USER_AGENT”)   这个字符串一般是如下格式:   Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)   上面的字符串可以说明访问者使用的操作系统是Windows98,浏览器是MSIE 4.01,但是这个字符串格式不固定,而且可以自己更改。   平常我们所见的其它一些主要的UserAgent字符串如下:   使用IE的浏览器:   Mozilla/2.0 (compatible; MSIE 3.01; Windows 95)   Mozilla/4.0 (compatible; MSIE 4.0; Windows 95);   Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)   Mozilla/4.0 […]

Read the rest of this entry »

在Web页面中执行Windows程序

现在许多公司都面临一个难题:如何在Web环境中执行存在的Windows应用程序。这里就介绍实现这个功能的技术,它争取对代 码做最小的改变,完成在Windows环境中应做的一切。 现存的Windows应用程序   这里想要在Web中执行的Windows例子程序是非常简单的,它是用VB编写的,其中有一个表单。运行时,在表单上显示雇员的信 息,这些信息来源于Access数据库的一个表。表单上设有First、Next、Previous 和 Last按钮,从而允许用户浏览记录。同时, 还可以通过按钮Add、Delete 和 Update来改变数据。 这个程序通过一个COM类来与数据库通信,它有下面的方法: AddEmployee() 在表中添加一个记录,保存新雇员的信息 UpdateEmployee() 更新一个记录 DeleteEmployee() 删除一个记录 GetEmployees() 获取一个雇员的信息 程序正常运行时,浏览器显示如下: 开发Web应用程序   在传统的web应用程序中,大多数的处理都是在服务器端完成的。这里,我们将尝试在客户端做一些处理,以减少服务器上的工 作量。也就是,让客户端完成显示信息的处理工作,并将商业规则和数据库存取留给服务器端。这就象一个n层处理模型。   当用户需要访问另一个不同的数据时,我们也不想从服务器上再调入整个web页面,因此,需要找到一个web客户端在后台与 web服务器交流信息的方法。这个例子中,我们使用了微软公司的XMLHTTP COM对象组件,它是随Internet Explorer 5.0而来 的。当然,也可以编写一个功能类似的Java applet来克服这个局限。 服务器端的代码   让我们从研究VB应用程序的COM类到Web的每一个方法开始,这可以通过编写ASP页面来调用COM类中的每个方法实现 (AddEmployee.asp, UpdateEmployee.asp, DeleteEmployee.asp, GetEmployee.asp)。 明白了这些,就能够在Web中存取COM 类方法了。   ASP页面应该能够接受与COM类一样的参数,这些页面向原始的COM类发送调用。这里主要的区别就是所有的输出是以XML格式 的。我们使用另外一个叫XMLConverter的COM类,转换方法的输出为XML格式。XMLConverter的代码包含在下载文件中,它有一个 函数,能够接受一个ADO记录集做为参数,并且转换为一个XML文档。实现这个目的的函数例子可以从Internet上很容易地找到,比 如: http://www.vbxml.com/xml/guides/developers/ado_persist_xml.asp   我们也许曾经使用过ADO记录集的Save函数,加上adPersistXML,来实现按照xml格式保存,但是在这里,为了简单起见,我 们仍使用编制的函数。 下面的代码来自GetEmployees.asp,它执行GetEmployees方法,从而可以让你清晰地看到这种技术: <SCRIPT LANGUAGE=vbscript RUNAT=Server> ‘Declare the above described XMLConverter Dim […]

Read the rest of this entry »