JAVA相关.docx

上传人:b****7 文档编号:10307219 上传时间:2023-02-10 格式:DOCX 页数:21 大小:76.08KB
下载 相关 举报
JAVA相关.docx_第1页
第1页 / 共21页
JAVA相关.docx_第2页
第2页 / 共21页
JAVA相关.docx_第3页
第3页 / 共21页
JAVA相关.docx_第4页
第4页 / 共21页
JAVA相关.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

JAVA相关.docx

《JAVA相关.docx》由会员分享,可在线阅读,更多相关《JAVA相关.docx(21页珍藏版)》请在冰豆网上搜索。

JAVA相关.docx

JAVA相关

反向AJAXEXT

反向Ajax的基本概念是客户端不必从服务器获取信息,服务器会把相关信息直接推送到客户端。

这样做的目的是解决Ajax传统Web模型所带来的一个限制:

实时信息很难从技术上解决。

原因是,客户端必须联系服务器,主动询问是否存在变更,如果有变更就会更新页面(或者页面的一部分)。

虽然可以非常快速完成这个操作,让人感觉好像是实时的,但是实际上不是实时的。

我们需要的是,服务器联系查看其页面的所有浏览器,并通告所发生的变更。

反向Ajax是克服这个限制的一种方式。

像Ajax本身一样,这不是一门专门的技术,而是按照不寻常方式组合使用已有的技术达到不寻常的效果。

传统的Web模式(也就是非Ajax的应用程序)有一系列鲜明的事件。

简单来说,用户在客户端的一个动作会导致向服务器发出一个请求,然后服务器按照请求进行相应处理,并把处理结果作为响应传回客户端,这个响应通常是一个完整的新的UI视图。

这种处理过程反复循环,直到用户决定离开当前Web站点。

在基于Ajax的应用程序的事件序列中,某个用户动作会导致对某个客户端Ajax引擎的调用,不论它是JavaScript代码,还是其他库。

这个引擎会向服务器发出一个请求,服务器按照非Ajax模式进行处理,然后返回响应。

响应内容首先被Ajax引擎处理,然后调用某些客户端代码以更新页面。

同样,这个循环会无止境进行,直到用户离开当前页面。

现在总共有三种DWR支持的技术可以辅助完成这种技术,其中两种技术都属于"主动的"反向Ajax,第三种被认为是"被动的"反向Ajax。

下面逐个讨论每种技术以及DWR提供的支持。

7.9.1轮询

假设有个未使用AJAX的Web页面,使用刷新标签,每隔数秒就更新这个页面。

这就是所说的轮询。

客户端定时轮询服务器,看是否存在更新,并且显示服务器传回的当前信息。

在网页上,使用一些简单的JavaScript代码以持续地更新页面,就可以实现相同的事情。

确实,能够从表面实现所谓的推送,这就是轮询技术。

在Ajax中,事件流会更加复杂,但是实质上是一样的,轮询技术是两种主动式反向Ajax方法的一种,客户端在每个时间周期内向服务器发送请求,看看服务器端有没有数据更新,如果有,就向服务器请求数据。

另一种主动式方法被称为Comet。

7.9.2Comet(服务器推)

第二种主动式反向Ajax方法是Comet,这是一种基于HTTP长连接的服务器推动方式。

客户端向服务器发送请求后,服务器将数据通过response发送给客户端,但并不会将此response关闭,而是一直通过response将最新的数据发送给客户端浏览器,直到客户端浏览器关闭。

使用AJAX实现“服务器推”与传统的AJAX应用不同之处在于:

1.服务器端会阻塞请求直到有数据传递或超时才返回。

  2.客户端JavaScript响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。

  3.当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。

7.9.3PiggyBack(回传)

PiggyBack(回传)方法是DWR提供的一种“被动式”方法。

服务器端将最新的数据排成队列,然后等待客户端下一次请求,接收到请求后就将等待更新的数据发给客户端。

DWR会使用默认的设置是PiggyBack,所以在默认情况下,启用反向Ajax时,不会导致服务器超载。

7.9.4反向Ajax的配置与实现

要让DWR程序支持反向AJAX,只需要在web.xml中DWRServlet里添加一个初始化参数,添加内容为:

Java代码

1.  

2.    dwr-invoker  

3.    DWR Servlet  

4.    Direct Web Remoter Servlet  

5.    org.directwebremoting.servlet.DwrServlet  

6.  

7.         activeReverseAjaxEnabled  

8.         true  

9.       

10.  

11.  

12.     

13.  

14.    dwr-invoker  

15.    /dwr/*  

16.  

dwr-invoker

DWRServlet

DirectWebRemoterServlet

org.directwebremoting.servlet.DwrServlet

activeReverseAjaxEnabled

true

dwr-invoker

/dwr/*

如果应用的是轮询技术,则需要添加中下参数:

<

Java代码

1.param-name>org.directwebremoting.extend.ServerLoadMonitor  

2.org.directwebremoting.impl.PollingServerLoadMonitor  

param-name>org.directwebremoting.extend.ServerLoadMonitor

org.directwebremoting.impl.PollingServerLoadMonitor

除了上述配置,为启用反向Ajax,在页面中还需要一些JavaScript代码,即:

dwr.engine.setActiveReverseAjax(true);

只需要上述代码和web.xml文件中的配置,就可以激活反向Ajax了。

处理轮询请求的过程通常是在服务器端编写一些代码,以更新附加到服务器端的每个客户端的会话。

DWR会记录与之联系的每个客户端,分别存储每个客户端的会话。

这一点与通常的HTTP会话不同。

借助于此,可以调用JavaScript代码,下一个轮询请求会通知这些调用。

下面就是一个处理轮询请求的例子,服务器端的发布者实现代码如下:

Java代码

1.package com.ajax.dwr;  

2.import java.util.LinkedList;  

3.import java.util.List;  

4.import org.directwebremoting.Browser;  

5.import org.directwebremoting.ScriptSessions;  

6.public class SendMessage {  

7.public void addMessage(String message) {  

8.   System.out.println("有客户请求,消息为:

" + message);  

9.   messages.add(message);  

10.   Browser.withCurrentPage(new Runnable() {//启用监听客户端当前页线程  

11.            public void run() {//把数据添加到客户端调用的方法中  

12.            ScriptSessions.addFunctionCall("receiveMessages", messages);  

13.            }  

14.        });  

15.}  

16.private List messages = new LinkedList();  

17.}  

packagecom.ajax.dwr;

importjava.util.LinkedList;

importjava.util.List;

importorg.directwebremoting.Browser;

importorg.directwebremoting.ScriptSessions;

publicclassSendMessage{

publicvoidaddMessage(Stringmessage){

System.out.println("有客户请求,消息为:

"+message);

messages.add(message);

Browser.withCurrentPage(newRunnable(){//启用监听客户端当前页线程

publicvoidrun(){//把数据添加到客户端调用的方法中

ScriptSessions.addFunctionCall("receiveMessages",messages);

}

});

}

privateListmessages=newLinkedList();

}

这里主要通过WebContext类获得DWR应用的WEB上下文,用ServletContext获得DWRServlet的上下文,以及通过WEB上下文获取访问本应用的客户端浏览器的ScriptSession。

一旦获得当前页面的名称,就可以获取当前连接到这个页面的所有会话列表。

然后,启用监听客户端当前页线程,把数据添加到客户端调用的方法中。

下面是在客户端执行的JSP页面文件,代码如下:

Java代码

1.  

2.  

3.">  

4.starting page  

5.  

6.  

7.  

8.  

9.   function sendMessage()  

10.   {  

11.    var message=$("message").value;  

12.    SendMessage.addMessage(message);  

13.   }  

14.   function receiveMessages(messages)  

15.   {  

16.     var chatlog = "";  

17.     for (var data in messages) {  

18.       chatlog = "

" + dwr.util.escapeHtml(messages[data]) + "
" + chatlog;  

19.     }  

20.     dwr.util.setValue("list", chatlog, { escapeHtml:

false });  

21.   }  

22.  

23.  

24.  

25.input message:

  

26.  

27.  

28.
  

29.

  

30.  

31.  

">

startingpage

functionsendMessage()

{

varmessage=$("message").value;

SendMessage.addMessage(message);

}

functionreceiveMessages(messages)

{

varchatlog="";

for(vardatainmessages){

chatlog="

"+dwr.util.escapeHtml(messages[data])+"
"+chatlog;

}

dwr.util.setValue("list",chatlog,{escapeHtml:

false});

}

inputmessage:


Util类有很多很方便的方法,其中一个是setValue()。

这个方法类似于在客户端执行document.getElementById("list").innerHTML="",但是它会关注一些细节,比如目标元素是文本框或者其他元素。

在此,使用所记录的Date域的当前值来更新list的内容。

将第三个参数设为true,可以指定任何HTML内容,这样的话不会破坏客户端的任何内容

要用的java类在wr.xml文件配置内容如下:

Java代码

1.  

2.             

3.  

如果不希望使用轮询方法,那么可以非常容易地切换为用Comet方法,只需要把web.xml文件中如下代码注释掉:

Java代码

1.org.directwebremoting.extend.ServerLoadMonitor  

2.org.directwebremoting.impl.PollingServerLoadMonitor  

org.directwebremoting.extend.ServerLoadMonitor

org.directwebremoting.impl.PollingServerLoadMonitor

如果应用PiggyBack方法,则不需要在web.xml中DWRServlet里添加上述初始化参数。

该例子中完整的web.xml配置内容如下;

Java代码

1.

xml version="1.0" encoding="UTF-8"?

>  

2.

3.xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"  

4.xsi:

schemaLocation="  

5.  

6.

-- 配置DWR的核心Servlet -->  

7.  

8.   

-- 指定DWR核心Servlet的名字 -->  

9.   dwr  

10.     

11.    

-- 指定DWR核心Servlet的实现类 -->  

12.    org.directwebremoting.servlet.DwrServlet  

13.     

14.   

-- 指定DWR核心Servlet处于调试状态 -->  

15.     

16.    debug  

17.    true  

18.     

19.   

-- 设置使用反向Ajax技术 -->  

20.     

21.    activeReverseAjaxEnabled  

22.    true  

23.     

24.     

25.      

26.     initApplicationScopeCreatorsAtStartup  

27.      

28.    true  

29.     

30.     

31.   

--长连接只保持时间 -->>  

32.    maxWaitAfterWrite  

33.    60  

34.     

35.   1  

36.  

37.

-- 指定核心Servlet的URL映射 -->  

38.  

39.   dwr  

40.   /dwr/*  

41.  

42.  

43.   index.jsp  

44.  

45.  

xmlversion="1.0"encoding="UTF-8"?

>

xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xsi:

schemaLocation="

--配置DWR的核心Servlet-->

--指定DWR核心Servlet的名字-->

dwr

--指定DWR核心Servlet的实现类-->

org.directwebremoting.servlet.DwrServle

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1