`
liyixing1
  • 浏览: 961512 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

REST和AJAX

    博客分类:
  • jms
阅读更多
REST
通过activemq提供的servlet
<servlet>
<servlet-name>MessageServlet</servlet-name>
<servlet-class>org.apache.activemq.web.MessageServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
 
<servlet-mapping>
<servlet-name>MessageServlet</servlet-name>
<url-pattern>/message/*</url-pattern>
</servlet-mapping>


通过这样的配置,代理的消息目的地就通过下面的RUI路径暴露出来.比如,STOCKS.JAVA消息主题就被映射到
下面的URI上:http://localhost:8161/demo/message/STOCKS/JAVA?type=topic

Ajax API
首先需要使用ajax servlet

<servlet>
<servlet-name>AjaxServlet</servlet-name>
<servlet-class>org.apache.activemq.web.AjaxServlet</servlet-class>
</servlet>
 
<servlet-mapping>
<servlet-name>AjaxServlet</servlet-name>
<url-pattern>/amq/*</url-pattern>
</servlet-mapping>

 <context-param>
        <param-name>org.apache.activemq.brokerURL</param-name>
        <param-value>tcp://localhost:61616</param-value>
        <description>The URL of the Message Broker to connect to</description>
    </context-param>


在页面引用js文件
<script type="text/javascript" src="amq/amq.js"></script>
<script type="text/javascript">
//指定url地址
amq.uri='/amq';
</script>

发送消息
amq.sendMessage("topic://TEST", "message");
如果你打算订阅某个特定的消息目的地(或多个消息目的地),你需要注册一个回调函数,当接收到一个
新消息时,会调用这个函数
通过 amq对象的addListener() 注册回调函数,该函数除了接受一个 回
调函数作为参数外,同时还接受一个订阅的消息目的和一个ID作为参数,使用该ID参数使得进一步处
理这个监听器成为可能.

var priceHandler =
{
_price: 
function(message)
{
if (message != null) 
{
var price = parseFloat(message.getAttribute('bid'))
var symbol = message.getAttribute('stock')
var movement = message.getAttribute('movement')
if (movement == null) 
{
movement = 'up'
}
 
var row = document.getElementById(symbol)
 
if (row)
{
// perform portfolio calculations
var value = asFloat(find(row, 'amount')) * price
var pl = value - asFloat(find(row, 'cost'))
// now let’s update the HTML DOM
find(row, 'price').innerHTML = fixedDigits(price, 2)
find(row, 'value').innerHTML = fixedDigits(value, 2)
find(row, 'pl').innerHTML = fixedDigits(pl, 2)
find(row, 'price').className = movement
find(row, 'pl').className = pl >= 0 ? 'up' : 'down'
}
}
}
};
 
function portfolioPoll(first)
{
if (first)
{
amq.addListener('stocks', 'topic://STOCKS.*', priceHandler._price);
}
}
 
amq.addPollHandler(portfolioPoll);


对于新版本而言,整个js api已经发生了变化,使用了适配器的概念,如果想让它对jquery环境下运行,需要添加jquery适配器

其中主题是topic://MY.NAME
队列是channel://MY.NAME


<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="js/amq_jquery_adapter.js"></script>
<script type="text/javascript" src="js/amq.js"></script>
<script type="text/javascript">
	var amq = org.activemq.Amq;
	amq.init({
		uri : 'amq.do',
		logging : true,
		timeout : 200
	});
</script>

</head>
<body>
	<div id="show">------------------------------------------------------------------------------------------------------------------</div>
	<script type="text/javascript">
		function send() {
			//"topic://MY.NAME"(主题) or "channel://MY.NAME"(队列) or queue://队列
			amq.sendMessage('topic://liyixing11', $('#value').val());
		}
	</script>

	<div>
		<input type='button' value='send' onclick='send()' /> <input
			type='text' id='value' value='send' />
	</div>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="js/amq_jquery_adapter.js"></script>
<script type="text/javascript" src="js/amq.js"></script>
<script type="text/javascript">
	var amq = org.activemq.Amq;
	amq.init({
		uri : 'amq.do',
		logging : true,
		timeout : 200
	});
</script>

</head>
<body>
	<div id="show">------------------------------------------------------------------------------------------------------------------</div>
	<script type="text/javascript">
		var id = new Date().getTime() + 'x';

		var myHandler = {
			rcvMessage : function(message) {
				var show = $('#show');

				show.html(show.html() + '<br>' + message);
			}
		};

		$(function() {
			var show = $('#show');
			show.html(show.html() + '<br>' + id);
//第一个参数是ID
			//当使用完毕后,可以使用amq.removeHandler(myId)来移除监听
//"topic://MY.NAME"(主题) or "channel://MY.NAME"(队列) or queue://队列
			amq.addListener(id, 'topic://liyixing11', myHandler.rcvMessage);
		});
	</script>
</body>
</html>


api

//过滤器
amq.addListener( myId, myDestination, myHandler.rcvMessage, { selector:"identifier=&#39;TEST&#39;" } );

多窗口浏览器
对于多窗口浏览器而言,他们的session是共享的,而ajax方式是基于session模式的,因此需要为每个标签页指定唯一id

org.activemq.Amq.init({
  uri: &#39;amq&#39;,
  logging: true,
  timeout: 45,
  clientId:(new Date()).getTime().toString() //id
});

由于会启用一个保持连接的方式等待消息到来,对于支持异步servlet的servlet3.0服务器,会具有更好的性能。

activemq使用 Jetty 6 Continuations ,来完成servlet3.0 的异步功能。
分享到:
评论

相关推荐

    Ajax和REST之2:应对Ajax软件开发的挑战

    【Ajax和REST技术简介】 Ajax(Asynchronous JavaScript and XML)是一种网页开发技术,它允许网页在不刷新整个页面的情况下与服务器进行数据交换,提升了用户体验。REST(Representational State Transfer)是一种...

    Ajax访问dataSnap Rest服务器

    dataSnap Rest 跨平台的特性众主要是靠JSON来传输数据,通过HTTP,HTTPS 访问方法来获取所得到的数据. 技术牛人小满的作品。谢谢作者。共享给各位。

    activit6-rest用ajax如何访问-base64加密

    标题"activit6-rest用ajax如何访问-base64加密"主要涵盖了两个关键点:一是如何使用Ajax访问Activiti6的REST接口,二是如何使用Base64对数据进行加密处理。 1. Ajax访问Activiti6 REST接口: - **创建Ajax请求**:...

    API-REST:AJAX的API REST服务

    了解这些基础后,开发者可以进一步探索如何使用API-REST和AJAX来构建动态、高效的Web应用。同时,安全问题(如认证、授权)和性能优化(如分页、限流)也是开发RESTful API时需要考虑的关键点。在API-REST-master这...

    基于Ajax与REST的WebServices研究与实现

    基于Ajax与REST的WebServices研究与实现 很不错的一篇硕士文章

    Ajax and REST Recipes.part2.rar

    Apress 出版的介绍ajax和REST架构的书《Ajax and REST Recipes》pdf(带书签),由于上传文件大小的限制,这是第二个包。

    Ajax and REST Recipes.pdf 高清下载

    书籍《Ajax and REST Recipes: A Problem-Solution Approach》的核心内容是向读者展示如何使用下一代Ajax和REST技术实现Web网站上常见任务的解决方案。Ajax(Asynchronous JavaScript and XML)是用于创建快速动态...

    Ajax and REST Recipes.part1.rar

    Apress 出版的介绍ajax和REST架构的书《Ajax and REST Recipes》pdf(带书签),由于上传文件大小的限制,这是第一个包。

    基于Ajax_REST风格的WebService的设计与实现

    基于Ajax_REST风格的WebService的设计与实现

    基于Ajax和SOA的Web应用架构的研究与应用.zip

    【标题】"基于Ajax和SOA的Web应用架构的研究与应用"揭示了现代Web开发中的两种关键技术:Ajax(异步JavaScript和XML)以及Service-Oriented Architecture(面向服务的架构)。Ajax技术允许Web应用程序在无需刷新整个...

    CA2_ORM_REST_AJAX

    【标题】"CA2_ORM_REST_AJAX"是一个与Java相关的项目,由Simon Tougaard开发,主要涉及ORM(对象关系映射)、RESTful API和AJAX(异步JavaScript和XML)这三大核心技术。ORM是Java开发中的一个重要概念,它允许...

    api-rest-ajax

    在IT行业中,API(应用程序接口)、REST(表述性状态转移)和AJAX(异步JavaScript和XML)是三个至关重要的概念,它们对于构建现代Web应用起着基石般的作用。让我们详细探讨这些技术及其关联。 首先,API...

    WCF与Ajax开发实践--构建REST WCF 讲义、Demo和专题讲座

    本资料包中的"**WebCast20101012_PDF**"可能是一份详细的讲义,涵盖了如何使用WCF构建REST服务的基本概念、步骤和最佳实践。讲义可能会讲解RESTful服务的设计原则,如URI设计、HTTP动词的使用、状态码的意义等,以及...

Global site tag (gtag.js) - Google Analytics