Ajax反转技术

2018-12-24 00:03

? 什么是DWR?

dwr(Direct Web Remoting) 作为一个java open source library,可以帮助开发人员完成应用AJAX技术的web程序。它可以让浏览器上的javascript方法调用运行在web服务器上java方法。

? DWR的原理

DWR采取了一种动态生成基于Java类的Javascript代码的新方法来实现和处理Ajax。这样Web开发人员就可以在Javascript里像使用浏览器的本地代码一样使用Java代码,而实际上这些Java代码是运行在服务器端并且可以自由访问Web 服务器资源的。出于安全的考虑,Web开发者必须适当地配置,决定哪些Java类可以安全地被外部使用。(通过dwr.xml配置) 优点:

★把java类转化为javascript类由dwr自动完成,只需简单的配置。 ★应用起来极其简单。开发者不要该服务器代码就可以集成。 ★容易测试。

★及强扩展性。例如与spring集成,只需修改一点代码。 ★自动把java对象转化为javascript对象,并且及易扩展。 ? 传统的请求响应机制

HTTP超文本传输协议是一种请求/响应模式的协议。一个完整的HTTP事务处理过程是:创建TCP/IP连接、客户端发出请求信息、服务器响应信息、结束连接。

我们渴望的请求响应机制

能够C/S模式一样,服务器和客户端之间能够自由方便的交互数据。

? 为什么要使用COMET?

Comet被称为长连接技术,是一种从服务器端向多个浏览器主动推数据的一种技术 。 随着Ajax在Web程序开发技术里建立了牢固的位置,出现了几种常见的Ajax使用模式。例如,Ajax通常用于响应用户输入来使用新数据修改局部页面。但有时候,Web程序的用户界面需要根据偶尔的异步服务器端事件来更新,而不需要用户动作 -- 例如,在Ajax聊天程序里显示其他用户输入的一条新消息。由于Web浏览器和服务器间的HTTP连接只能由浏览器建立,服务器不能“推”更改数据到浏览器。 Ajax程序有两个解决该问题的基本方式:浏览器每隔几秒请求服务器来获得更改,或者服务器维持与浏览器的连接并且传递数据。 对长连接技术的呼唤来自它可感知的高效。客户端不会产生轮询方式特有的传输浪费,一旦事件发生,就会被发布到客户端。 ? 如何实现长连接?

DWR 2开始就新引入的概念为反转Ajax。该机制将服务端事件“推”给客户端。客户端DWR代码透明的处理连接建立和应答解析,所以从开发人员的角度来看,事件可以从服务端Java代码简单的发布到客户端。 一个称为ServerContext的接口提供DWR的反转Ajax魔法。ServerContext知道查看当前页面的所有Web客户端并且可以提供一个ScriptSession用来与每个客户端交流。 实现就是客户端向服务器请求后,服务器不立即回应,从而导致一个http长连接,等到有更新数据的时候,再利用这个连接“主动”向客户端回送。 下面是一个非常简单的dwr应用,让服务器每隔5秒钟推送1次数据到客户端显示。 ? Web.xml

xmlns=\

xmlns:xsi=\ xsi:schemaLocation=\ http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\

dwr-invoker

org.directwebremoting.servlet.DwrServlet

debug true

dwr-invoker /dwr/* dwr.xml

\ \

? Publisher.java 需要dwr.jar包

public class Publisher implements Runnable { private ServerContext sctx; public Publisher() {

System.out.println(\初始化Publisher\

// WebContext类获得DWR应用的WEB上下文 WebContext wctx = WebContextFactory.get();

sctx = ServerContextFactory.get(wctx.getServletContext()); ServletContext获得DWRServlet的上下文 new Thread(this).start(); }

public void onPush(String text) {

// 用 ScriptBuffer script = new ScriptBuffer();

script.appendScript(\//将调用界面的receive回调函数

Set sessions = new HashSet(); // 从Java代码推JavaScript片段到客户端。 sessions.addAll(sctx.getAllScriptSessions()); // 获取所有客户端, 数据 System.out.println(\当前客服端数量:\ Iterator it = sessions.iterator(); while (it.hasNext()) {

ScriptSession session = (ScriptSession) it.next(); session.addScript(script); } }

Public void run(){ // 每5秒向客户端推送数据 while (true) { try {

Thread.sleep(5000);

SimpleDateFormat sdf = new SimpleDateFormat(\

this.onPush(\当前系统时间:\e.printStackTrace(); } } } }

? Receive.jsp

<%@ page language=\

? 关于ScriptSession的几点说明

在DWR中,我们可以通过WebContextFactory.get()来取得一个WebContext对象,进而通过WebContext的getScriptSession()取得ScriptSession对象。 ScriptSession不会与HttpSession同时创建,当我们访问一个页面的时候,如果是第一次访问,就会创建一个新的HttpSession,之后再访问的时候,就会保持当前的Session,即使是刷新,也能保持当前的HttpSession。但是,ScriptSession不同,第一次访问,会创建一个ScriptSession,但是,如果你刷新,就会创建一个新的ScriptSession.


Ajax反转技术.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016-2017学年 粤教版必修1 《孔雀东南飞》 教案9

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: