- 浏览: 1335918 次
- 性别:
- 来自: 湖南澧縣
文章分类
最新评论
-
虾米小尹:
不行啊!2.2-0.25=1.9500000000000002 ...
JavaScript浮点数运算 —— 精度问题 -
heluping000000:
引用String a= "abc",首先在 ...
String,到底创建了多少个对象? -
mack:
谢谢分享matcher.appendReplacement(s ...
string.replaceAll()中的特殊字符($ \)与matcher.appendReplacement -
wzt3309:
完全理解,比网上其他资料都要详细
String,到底创建了多少个对象? -
u014771876:
Java中十六进制转换 Integer.toHexString()
最其名的WEB服务实现是SOAP(简单对象访问协议)。SOAP是由W3C管理的规约,它是XML协议,对于如何调用远程过程给出了定义。
WSDL(Web服务描述语言)文档也是XML文档,描述了如何创建Web服务的客户。通过提供WSDL文档,Web服务提供者就能很轻松地为可能的客户创建客户端代码。WSDL和SOAP通过一同使用,不过不一定非得这亲,因为这两个规约是分维护的。
尽管人们在简化SOAP实现上做出了很大努力,但SOAP还是一个很难使用的技术,只有在跨平台互操作性确实是一个很重要的需求时才会作用SOAP。实现Web服务还有一种更简单的方法,称为REST(代表传输),它在开发人员中享有越来越高的知名度,这些开发人员一方面希望得到SOAP好处的80%,另一方面只希望付出SOAP代码的20%。
Yahoo!选择REST作为其公共Web服务的协议,Yahoo!认为基于REST的服务很容易理解,而且很推崇REST的“平易近人”,因为当前大多数编程语言都可以访问REST。实际上,Yahoo!相信,与SOAP相比,REST的门槛更低,使用也更容易。
通过使用REST,建立请求时可以先指定一个服务入口URL,再向查询串追加搜索参数。服务将结果返回为XML文档。
XMLHttpRequest对象非常适合作为基于REST的Web服务的客户。使用XMLHttpRequest对象,可以向Web服务异步地发出请求,并解析得到XML响应。对于Yahoo!返回响应,则使用JavaScriptDOM方法解析响应,并向页面动态地提供结果数据。
问WEB服务(REST)
示例展示了如何使用Ajax技术访问Yahoo!Web服务,并向页面提供结果。页面上的文本字段允许用户指定搜索项。用户可以使用选择框来指定需要显示多少个结果。点击Submit按键就能启动搜索。
但是XMLHttpRequest对象只能访问发起文档所在域的资源。这里的解决办法,就是建立Yah!的网关,它与XMLHttpRequest脚本在同一个域中,由网关接收来自XMLHttpReqest对象的请求,并把它转发到Yahoo!Web服务。Yahoo!做出响应返回结果,网关再把结果路由传送到浏览器。通过使用这种方法,就能避免使用浏览器特定的JavaScript。
以下是搜索1条“ajax”时Yahoo!返回的XML:
<?xml version="1.0" encoding="UTF-8"?> <ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:srch" xsi:schemaLocation="urn:yahoo:srch http://api.search.yahoo.com/WebSearchService/V1/WebSearchResponse.xsd" type="web" totalResultsAvailable="257000000" totalResultsReturned="1" firstResultPosition="1" moreSearch="/WebSearchService/V1/webSearch?query=ajax&appid=thunderboltsoftware&region=us"> <Result> <Title>AJAX - Wikipedia</Title> <Summary>Background about the web development technique for creating interactive web applications.</Summary> <Url>http://en.wikipedia.org/wiki/AJAX</Url> <ClickUrl>http://en.wikipedia.org/wiki/AJAX</ClickUrl> <DisplayUrl>en.wikipedia.org/wiki/AJAX</DisplayUrl> <ModificationDate>1255590000</ModificationDate> <MimeType>text/html</MimeType> <Cache> <Url>http://uk.wrs.yahoo.com/_ylt=A0PDB2P12tpKixsAiH7dmMwF;_ylu=X3oDMTBwOHA5a2tvBGNvbG8DdwRwb3MDMQRzZWMDc3IEdnRpZAM-/SIG=16lq3593n/EXP=1255943285/**http%3A//66.218.69.11/search/cache%3Fei=UTF-8%26appid=thunderboltsoftware%26type=all%26query=ajax%26results=1%26ts=1255856883765%26u=en.wikipedia.org/wiki/AJAX%26d=TGfjPd29Tpo6%26icp=1%26.intl=us</Url> <Size>70721</Size> </Cache> </Result> </ResultSet><!-- ws03.ydn.gq1.yahoo.com uncompressed/chunked Sun Oct 18 02:08:05 PDT 2009 -->
yahooSearch.html清单:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Yahoo! Search Web Services</title> <script type="text/javascript"> var xmlHttp; function createXMLHttpRequest() { if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } } //程序入口 function doSearch() { var url = "YahooSearchGateway?" + createQueryString() + "&ts=" + new Date().getTime(); createXMLHttpRequest(); xmlHttp.onreadystatechange = handleStateChange; xmlHttp.open("GET", url, true); xmlHttp.send(null); } function createQueryString() { var searchString = document.getElementById("searchString").value; searchString = escape(searchString); var maxResultsCount = document.getElementById("maxResultCount").value; var queryString = "query=" + searchString + "&results=" + maxResultsCount; return queryString; } function handleStateChange() { if(xmlHttp.readyState == 4) { if(xmlHttp.status == 200) { parseSearchResults(); } else { alert("Error accessing Yahoo! search"); } } } //回调函数 function parseSearchResults() { var resultsDiv = document.getElementById("results"); while(resultsDiv.childNodes.length > 0) { resultsDiv.removeChild(resultsDiv.childNodes[0]); } document.write(xmlHttp.responseText); var allResults = xmlHttp.responseXML.getElementsByTagName("Result"); var result = null; for(var i = 0; i < allResults.length; i++) { result = allResults[i]; parseResult(result); } } function parseResult(result) { var resultDiv = document.createElement("div"); var title = document.createElement("h3"); title.appendChild(document.createTextNode(getChildElementText(result, "Title"))); resultDiv.appendChild(title); var summary = document.createTextNode(getChildElementText(result, "Summary")); resultDiv.appendChild(summary); resultDiv.appendChild(document.createElement("br")); var clickHere = document.createElement("a"); clickHere.setAttribute("href", getChildElementText(result, "ClickUrl")); clickHere.appendChild(document.createTextNode(getChildElementText(result, "Url"))); resultDiv.appendChild(clickHere); document.getElementById("results").appendChild(resultDiv); } function getChildElementText(parentNode, childTagName) { var childTag = parentNode.getElementsByTagName(childTagName); return childTag[0].firstChild.nodeValue; } </script> </head> <body> <h1>Web Search Using Yahoo! Search Web Services</h1> <form action="#"> Search String: <input type="text" id="searchString"/> <br/><br/> Max Number of Results: <select id="maxResultCount"> <option value="1">1</option> <option value="10">10</option> <option value="25">25</option> <option value="50">50</option> </select> <br/><br/> <input type="button" value="Submit" onclick="doSearch();"/> </form> <h2>Results:</h2> <div id="results"/> </body> </html>
YahooSearchGatewayServlet.java清单:
package ajaxbook.chap4; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import javax.servlet.*; import javax.servlet.http.*; public class YahooSearchGatewayServlet extends HttpServlet { private static final String YAHOO_SEARCH_URL = "http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=thunderboltsoftware" + "&type=all"; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String url = YAHOO_SEARCH_URL + "&" + request.getQueryString(); HttpURLConnection con = (HttpURLConnection)new URL(url).openConnection(); con.setDoInput(true); con.setDoOutput(true); con.setRequestMethod("GET"); //Send back the response to the browser response.setStatus(con.getResponseCode()); response.setContentType("text/xml"); BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream())); String input = null; OutputStream responseOutput = response.getOutputStream(); while((input = reader.readLine()) != null) { responseOutput.write(input.getBytes()); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } }
基于REST的Web服务结合使用时,Ajax技术相当强大。如果想在你自己的域中访问Web服务,用JavaScript就可以完成。否则,当访问其他域的资源时,就要创建外部资源的某种网关,这样就能避免浏览器安全沙箱问题。
运行结果:
发表评论
-
HTML、JS、JSON特殊字符
2010-12-13 23:47 25878JS到HTML特殊字符转换 这几天做项目,发现从服务器端以J ... -
HTML — HTTP URL 中的特殊字符
2009-10-31 18:16 32951. + URL中的+号表示空格 ... -
HTML — CSS选择器
2009-10-25 21:11 2157一个样式规则由两部分组成:选择器和样式声明。选择器表明要为哪一 ... -
部分解决JsUnit无法在firefox3、safari 测试的问题
2009-10-25 07:03 1438在上一篇中出现了一个问题,就是用 jsunit2.2alpha ... -
JsUnit——eclipse插件(四)
2009-10-25 06:59 2445这节我们来看看如何通过JsUnit插件来运行前几节所测试过的测 ... -
10、JavaScript跨浏览器需注意的问题——ajax基础笔记
2009-10-21 22:19 1371向表中追加行 创建表格行时,我们要把创建的 tr 追加到 t ... -
JsUnit详解——Web服务方式(三)
2009-10-21 00:21 2451上两节提到过以Web方式来运行JsUnit,不过不是很详细,这 ... -
JsUnit详解——《ajax基础》笔记(二)
2009-10-20 22:38 2524使用标准/定制查询串 如此说来,测试运行工具是很强大的,但是 ... -
JsUnit详解——《ajax基础》笔记(一)
2009-10-20 19:57 2614JsUnit与JUnit对比 JsUnit也有setUp() ... -
使用Firefox的Web开发插件
2009-10-18 17:53 1474Firefox的Web开发插件为Firefox浏览器增加了大量 ... -
8、读取响应头部——ajax基础笔记
2009-10-18 17:20 6753你有时可能需要从服务器获取一些内容,例如,可能想“ping”一 ... -
7、使用JSON向服务器发送数据——ajax基础笔记
2009-10-18 17:20 5214看过前面的例子后(使用XML向服务器发送复杂的数据结构),你可 ... -
6、请求参数作为XML发送——ajax基础笔记
2009-10-18 17:20 1772如果只是使用一个包含 名/值 对的简单查询串,这可能不够健壮, ... -
4、将使用W3C DOM动态生成页面——ajax基础笔记
2009-10-18 17:19 1432使用W3C DOM动态生成页面 dynamicContent ... -
3、将响应解析为XML——ajax基础笔记
2009-10-18 17:18 1063将响应解析为XML parseXML.xml清单: < ... -
2、使用innerHTML属性创建动态内容——ajax基础笔记
2009-10-18 17:17 1923使用innerHTML属性创建动态内容 如果结合作用HTML ... -
1、使用XMLHttpRequest对象——ajax基础笔记
2009-10-18 17:17 2019XMLHttpRequest最早是在 IE5 中以active ... -
30、JavaScript代码优化
2009-10-16 21:25 1566JavaScript代码的速度被分成两部分:下载时间和执行速度 ... -
JavaScript代码优化(二)
2009-10-16 01:32 1196◆字符串的使用 在IE6和IE7中因字符串级联导致的主要问题 ... -
JavaScript代码优化(一)
2009-10-15 23:47 1260尽可能避免使用全局变量和函数.全局的变量和函数其实等价于 wi ...
相关推荐
Java Web开发也涉及Web服务的创建,如SOAP(Simple Object Access Protocol)和REST(Representational State Transfer)。RESTful API已经成为现代Web应用的主流设计风格,使用HTTP协议的CRUD操作,通过URI定位资源...
**REST(Representational State Transfer,表述性状态转移)**是一种软件架构风格,广泛应用于Web服务的设计,特别是互联网应用程序。REST风格的架构强调简洁、高效和可扩展性,它基于HTTP协议,利用其固有的方法...
《.NET Web服务 入门经典 —— C# 编程篇》这本书是为初学者设计的,旨在帮助读者快速掌握使用C#语言构建.NET Web服务的基础知识。Web服务是一种跨平台、跨应用程序的方式,通过互联网交换数据和实现功能。在C#中,...
### WEB服务——原理与技术 #### 一、WEB服务概述 在信息技术领域,Web服务(Web Service)是一种软件系统的设计模式,它通过网络提供应用程序之间的交互接口,支持不同平台、不同语言的应用程序间的通信和数据...
真正潜在风险存在于 REST 灵活的使用方式上,既可以被服务器端调用又能被客户端调用,所以一开始就要明确地区分用户访问权限和系统访问权限,区分 Web 页面权限和 REST 服务权限,但有时在开发中经常混为一谈,所以...
【REST基础原理详解】 REST(Representational State Transfer,代表性状态转移)是一种网络应用程序的设计风格和开发方式,主要用于构建Web服务。这种设计模式强调简洁、直接的交互方式,以提高效率和可扩展性。...
标题"activit6-rest用ajax如何访问-base64加密"主要涵盖了两个关键点:一是如何使用Ajax访问Activiti6的REST接口,二是如何使用Base64对数据进行加密处理。 1. Ajax访问Activiti6 REST接口: - **创建Ajax请求**:...
**实战Web Service —— 使用Apache CXF开发Web服务的教程** Apache CXF是一个开源的Java框架,用于构建和部署Web服务。本教程将带你深入理解如何利用CXF来开发高效、灵活的Web服务。我们将从基础概念开始,逐步...
在本篇博客“REST基础(二):Web服务编程,REST与SOAP”中,我们将深入探讨两种主要的Web服务编程模型:Representational State Transfer (REST) 和 Simple Object Access Protocol (SOAP)。这两种技术都是用于构建...
Web编程入门是初学者踏入互联网...综上所述,"Web编程入门——字节跳动"的课程内容可能覆盖了从基础到进阶的Web开发知识,适合对Web开发感兴趣的新手入门。通过深入学习和实践,你将能够独立创建功能完备的Web应用。
在IT领域,jQuery、Ajax和Web服务是三个关键概念,它们在构建动态和交互式的Web应用程序中发挥着重要作用。本文将深入探讨jQuery的Ajax功能以及如何利用它来调用Web服务。 首先,jQuery是一个轻量级的JavaScript库...
基于Ajax与REST的WebServices研究与实现 很不错的一篇硕士文章
6. **SOAP与REST的区别**:理解两种主要的Web服务通信风格——SOAP(简单对象访问协议)和REST(表述性状态转移)的异同,以及何时选择哪种方式。 7. **Web服务的安全性**:Web服务的安全性是开发过程中必须考虑的...
1.3REST及REST风格的Web服务 1.3.1REST中的基础知识 1.3.2REST风格的Web服务 1.3.3REST风格的Web服务实例 1.4Web GIS的组成 1.5ArcGIS Server REST风格的Web服务 1.5.1ArcGIS S erver站点的架构 1.5.2ArcGIS Server...
Web服务通常提供SOAP(Simple Object Access Protocol)或REST(Representational State Transfer)接口。在本例中,我们假设Web服务采用RESTful API,返回JSON格式的数据。若Web服务是SOAP接口,我们需要处理XML...
客户端通常需要构建URL来访问特定的Web服务资源,URL应包含资源的标识符。例如,`http://example.com/users/123`表示用户ID为123的资源。在请求中,可能还需要携带额外的HTTP头,如Content-Type定义数据格式,或者...
dataSnap Rest 跨平台的特性众主要是靠JSON来传输数据,通过HTTP,HTTPS 访问方法来获取所得到的数据. 技术牛人小满的作品。谢谢作者。共享给各位。