DWR反向AJAX调用

1 篇文章 0 订阅

ajax调用是浏览器主动请求服务器

反向AJAX调用顾名思义:服务器主动请求浏览器

反向 Ajax 的目的是让服务器将信息推送到客户端。Ajax 请求默认情况下是无状态的,且只能从客户端向服务器端发出请求。您可以通过使用技术模拟服务器端和客户端之间的响应式通信来绕过这一限制。


1.创建一个Web Project项目,导入dwr.jar包。

2.修改web.xml文件如下:


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Push</display-name>
  <!-- dwr核心servlet -->  
    <listener>  
        <listener-class>org.directwebremoting.servlet.DwrListener</listener-class>  
    </listener>  
    <servlet>  
        <!-- dwr核心servelt实现类 -->  
        <servlet-name>dwr</servlet-name>  
        <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>  
        <!-- 设置dwr可调式 -->
        <init-param>
            <param-name>debug</param-name>  
            <param-value>true</param-value>  
        </init-param>
        <init-param> 
	      <param-name>config</param-name> 
	      <param-value>/WEB-INF/classes/dwr.xml</param-value> 
	    </init-param>
        <!-- 设置ajax的反向技术 -->  
        <init-param>  
            <param-name>activeReverseAjaxEnabled</param-name>  
            <param-value>true</param-value>  
        </init-param>  
        <init-param>  
            <param-name>initApplicationScopeCreatorsAtStartip</param-name>  
            <param-value>true</param-value>  
        </init-param>  
        <!-- 长连接时保持时间 -->  
        <init-param>
            <param-name>maxWaitAfterWrite</param-name>
            <param-value>60</param-value>  
        </init-param>
        <init-param>
             <param-name>crossDomainSessionSecurity</param-name>
             <param-value>false</param-value>
	    </init-param>
	    <init-param>
	          <param-name>allowScriptTagRemoting</param-name>
	          <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dwr</servlet-name>  
        <url-pattern>/dwr/*</url-pattern>  
    </servlet-mapping>
    
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

3.创建一个TestDWR.java类

package com.metarnet.dwr;  
  
import java.text.SimpleDateFormat;
import java.util.Date;
import org.directwebremoting.Browser;  
import org.directwebremoting.ScriptSessions;
  
public class TestDWR {
	
    public void start(){
        if(!client)
        {
        	client = true;
        	getMessage();
        }
    }
    
    public void stop()
    {
    	if(client)
        {
        	client = false;
        }
    }
    
    private static boolean client = false;
    
    public void getMessage()
    {
    	Browser.withCurrentPage(new Runnable(){
            public void run() {
            	while(client)
            	{
            		try {
            			SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            			ScriptSessions.addFunctionCall("receiveMessage",sf.format(new Date()));
            			Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
            	}
            }
        });
    }
}

4.创建dwr.xml文件

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE dwr PUBLIC  
    "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"  
    "http://getahead.org/dwr/dwr30.dtd">  
 <dwr>
    <allow>  
        <create creator="new" javascript="testDWR" scope="application">
            <param name="class" value="com.metarnet.dwr.TestDWR"></param>
        </create>
    </allow>
 </dwr>

5.创建一个push.jsp文件

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>DWR</title>
<script src="dwr/interface/testDWR.js"></script>
<script src="js/jquery.js"></script>
<script src="dwr/engine.js"></script>
<script type="text/javascript">
function start(){
	dwr.engine.setActiveReverseAjax(true);
	testDWR.start();
}

function receiveMessage(data){
	$("#date").val(data);
}

window.onbeforeunload = function()
{
	testDWR.stop();
}
</script>
</head>
<body οnlοad="">
  <input type="button" value="开始" οnclick="start()"/>
  <input id="date" />
</body>
</html>


打开页面,点击开始按钮,页面会持续刷新时间,不会间断,不会超时

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值