你们怎样修改客户端 Web 浏览器上的 XML 并将最后的 XML 发送到 Web 服务器呢?
Web Team 的答复:
我们假定您的 Web 服务器运行的是 Microsoft Internet Information Server (IIS) 4.0(或更高版本)
或支持 Active Server Page (ASP) 技术的产品。
我们来简要地回顾一下 Web 浏览器是如何提供丰富的交互式 Internet 体验的。考虑最简单的形式:Web
浏览器从 Web 服务器请求一个页面,处理返回的信息(通常是超文本标记语言 (HTML) 格式),并显示结果。
超文本传输协议 (HTTP) 定义了 Web 服务器和浏览器用来相互通讯的语言。Web 浏览器还执行大量的幕后工作,
以便用户能够导航 Web 并显示各种媒体类型。
因此,您需要一个交互式 Web 站点。那么,用户怎样将信息发送到 Web 服务器呢?
Web 浏览器或 Web 应用程序有许多种用来将 XML 发送到 Web 服务器的方法,我们将介绍其中的两种。Web
浏览器通常使用 HTTP GET 方法来请求 Web 页,并使用 HTTP POST 方法来发送信息。要实现用户与
Web 服务器之间的通讯,最简单的方法是使用 HTML FORM 元素。
FORM 元素提供了一种使用 GET 或 POST 方法将数据发送到服务器的途径。将哪些控件置于窗体内由您决定,
并且您还决定只有具有 NAME 属性的那些控件才能够提交其数据。例如,当用户单击 Submit 按钮时,
每个控件的数据都发送到 Web 服务器。
在下面的示例中,存储在 XML 数据岛中的 XML 将作为窗体的一部分提交到服务器。可以通过多种方法获取此
XML:硬编码、通过设置 SRC 属性从外部文件中加载、从 ADO 记录集中检索、从 SQL Server 2000 中检索或者使用
XML DOM 脚本对象模型来创建/修改。可以通过将 XML 绑定到 HTML 元素来将 XML 呈现给用户(请参阅 Binding HTML Elements to Data)。将 XML 数据包含在表单中提交就像在 onsubmit 事件处理程序中将 XML 分配给隐藏的 INPUT
元素一样简单,如下所示:
<FORM ACTION="http://yourserver/form.asp" METHOD="post" NAME="myform"
ONSUBMIT=" myform.mytext.value = myxml.XMLDocument.xml;">
<INPUT TYPE="HIDDEN" NAME="Text" ID="mytext">
<INPUT TYPE="Submit"> </FORM>
<XML ID="myxml"> <root>
<item id="1" name="Item 1"/>
<item id="2" name="Item 2"/>
</root> </XML>
下面是 FORM.ASP 页的内容:
<%@ language=JScript %>
<%
var xmldom = Server.CreateObject( "Microsoft.XMLDOM" );
var xml = Request.Form( "Text" );
Response.Write( "<XMP>" + xml + "</XMP>" );
%>
注
为方便起见,本例中服务器返回
XMP
元素内的 XML。尽管此 HTML 元素是否决的,但是它具有将 HTML 和 XML
元素作为文本显示的好处。
XMLHttpRequest 对象是 Microsoft Internet Explorer 5.0 或更高版本附带的 MSXML 组件的一部分。该对象是
在 Web 页上创建的,用于将 XML 发送到 Web 服务器。该对象是通过将 Microsoft.XMLHTTP 指定为应用程序名
称来创建的。您通常调用 Open 方法、设置头信息(可选)、调用 Send ,然后选中 responseXML 或
responseText 属性。使用此对象的一个好处是无需刷新页面即可执行 POST ,从而实现了服务器与浏览器之间
的无缝数据传输。Internet Explorer Web 服务行为使用 XMLHttpRequest 对象来提供对 .NET XML Web 服务
的调用(使用 SOAP 请求)。
下面的示例展示了如何将 XML 文档发送到 Web 服务器。请注意,该示例使用同步调用。要进行异步调用,应该为
Open 方法的第三个参数提供 true 值,并使用 onreadystatechange 事件处理程序,以便在 Send 方法完成时
得到通知。
<HEAD>
<script language="JScript">
function PostXml(xmldoc)
{
var xmlhttp = new ActiveXObject( "Microsoft.XMLHTTP" );
xmlhttp.Open( "POST", "http://yourserver/xmlhttp.asp", false );
xmlhttp.Send( xmldoc ); return xmlhttp.responseXML; }
function ShowResults() { var resp = PostXml( myxml.XMLDocument );
mydiv.innerHTML = "<XMP>" + resp.xml + "</XMP>"; } </script></HEAD>
<BODY> <BUTTON ONCLICK="ShowResults()">Post XML</BUTTON>
<DIV ID="mydiv"></DIV> <XML ID="myxml"> <root>
<item id="1" name="Item 1"/> <item id="2" name="Item 2"/>
</root> </XML>
下面是 XMLHTTP.ASP 文件的内容:
<%@ language=JScript %> <%
// Load XML
var doc = Server.CreateObject( "Microsoft.XMLDOM" );
doc.load( Request );
// Process the XML ...
// Return result
Response.ContentType = "text/xml";
doc.save( Response ); %>
在许多情况下,将 XML 存储在客户端上能够为 Web 站点提供创新的功能,例如,缓存常用数据、用户个性化或内
联数据编辑。我们已讨论了两种将 XML 数据发送到 Web 服务器的机制。使用 ASP 技术来处理服务器上的 XML
数据很简单,而使用 ASP.NET 中的新功能进行处理则更简单。服务器可以选择以多种方式处理 XML,例如,将信
息保存到文件或数据库中,或者根据 XML 内容执行操作。
下面介绍了另外几种将数据发送到 Web 服务器的方法,这些方法超出了本文的讨论范畴。 •
HTTP GET 方法 — 使用所请求的 URL 的查询字符串(“?”后面的文本)来发送信息,但限定 URL 的大小不得超过 2K。 •
HTTP PUT 方法 — 采用此方法存在安全隐患。 •
HTML INPUT TYPE=FILE 元素可以用于上载用户选定的文件。 •
直接从 ActiveX 控件或应用程序调用低级别的 WinInet 函数,以便可以更好地控制与 Web 服务器的通讯。 •
使用 Internet Explorer Web 服务行为来调用对 .NET XML Web 服务的调用。 对日期进行排序
亲爱的 Web Team :
我尝试着显示特定文件夹的内容,但显示的文件是按照创建日期来排序的(而不是像我现在所希望的那样按字母顺
序来排序)。是否存在一种方法,可以通过使用 ASP 和 FileSystemObject 来实现我的愿望呢?对于你们提供的
任何帮助,我将不胜感激。
Matt Pierce
Web Team 的答复:
Matt,非常感谢您的提问!下面是一个示例 ASP 页(感谢 Eric 的工作!),该页使用 FileSystemObject scripting 对象来获取文件名集合,然后按创建日期对其进行排序。有关 FileSystemObject scripting 对象的文档,可以在 Microsoft Windows Script Technologies 站点找到。
调用 GetFolder() 方法以检索文件夹对象的指定的路径。该文件夹对象包含可以使用 Enumerator 对象访问的 files 集合。每个文件项都是按照文件名的顺序检索的,因此将它们分配给一个数组以便在稍后对其进行排序。
arr[i++] = {path : fc.item().Path, date : fc.item().DateCreated};
上面显示的是一种不很常见的分配语法,这种语法称为对象文字,它包含用逗号分隔的属性规范列表。每个属性规范都由属性名及其后面的属性值组成。此对象文字语法用于创建具有 path 和 date 这两个属性的对象。
使用 Array 对象的 sort() 方法可以指定我们自己的比较函数 sortByDate ,以便确定排序顺序。在本例中, comparison 函数返回一个指示两个项在创建日期上的相对顺序的值,但可以轻松地针对其他文件属性对该函数进行改写。
<%@ language=JScript %>
<% function sortByDate(f1, f2)
{ if (f1.date < f2.date)
return -1; else if (f1.date > f2.date)
return 1; else
return 0; } function showfiles(path) {
var fso, f, f1, fc, arr, i, s;
fso = new ActiveXObject( "Scripting.FileSystemObject" );
f = fso.GetFolder( path );
// Build the file list arr = new Array();
i = 0; for ( fc = new Enumerator( f.files );
!fc.atEnd(); fc.moveNext() )
arr[i++] = {path : fc.item().Path, date : fc.item().DateCreated};
// Sort the file list arr.sort( sortByDate );
// Display the file list s = "";
for ( i=0 ; i<arr.length ; ++i )
s += arr[i].path + "
"; return s; }
Response.Write( showfiles( Server.MapPath( "." ) ) ); %>
Web Team 简介
Web 辅助功能 浏览URL http://www.qqread.com/jsp/c112148201.html进入讨论组讨论。
相关专题
- JSP入门讲座 (92次浏览)
- 新手入门经典:Jsp环境配置 (90次浏览)
- WIN2000 + PHP + MYSQL + TOMCAT + JSP 完全 (84次浏览)
- Jsp常用功能——图片验证码 (53次浏览)
- JSP/Servlet:tomcat深入内部结构描述 (10次浏览)
- Jsp页面实现文件上传下载 (10次浏览)
- 用JSP处理Oracle中CLOB类型的字段 (9次浏览)
- 在Apache中整合JSP和PHP (0次浏览)
- 用JFreeChart增强JSP报表的用户体验 (0次浏览)
- 我们还需要JSP吗? (0次浏览)



