使用异步servlet扩展ajax应用程序

上传人:子 文档编号:41868565 上传时间:2018-05-31 格式:DOC 页数:5 大小:26.50KB
返回 下载 相关 举报
使用异步servlet扩展ajax应用程序_第1页
第1页 / 共5页
使用异步servlet扩展ajax应用程序_第2页
第2页 / 共5页
使用异步servlet扩展ajax应用程序_第3页
第3页 / 共5页
使用异步servlet扩展ajax应用程序_第4页
第4页 / 共5页
使用异步servlet扩展ajax应用程序_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《使用异步servlet扩展ajax应用程序》由会员分享,可在线阅读,更多相关《使用异步servlet扩展ajax应用程序(5页珍藏版)》请在金锄头文库上搜索。

1、使用异步使用异步 ServletServlet 扩展扩展 AJAXAJAX 应用程序应用程序作为 Web 应用程序模型的 AJAX 的出现使服务器端的面貌发生了巨大的变化。用户对着 Web 页面填写表单并单击提交按钮转到下一个链接的典型 Web 使用模式现在正在转变为更先进的客户端 JavaScript以及功能更丰富的用户界面,只要对表单进行操作,比如单击一个复选框、按下一个键或将鼠标移到一个选项卡上,该用户界面就会不断地与服务器交互。考虑一下从客户端传输到服务器的数据量有多大。从可用性的角度来看,用户在一个薄客户端浏览器上获得了富用户界面,无需安装任何东西。但是,当在服务器端扩展这些应用程序

2、时就要付出代价了。AJAX 应用程序的典型容量规划数可能会是标准 Web 应用程序的 3 到 4 倍。有人可能会问:这对 WebLogic Server 有何影响?每个发送给WebLogic 的 HTTP 请求都要使用一个执行线程。根据 AJAX 编程的性质以及许多短期的请求会以轮询的形式不断发送的情况,该行为模式可能造成大量客户端请求不断冲击服务器的局面。多年来,WebLogic 都将这一问题考虑在内,并构建了一个相当棒的特性,即 FutureResponseServlet。该范型构建于异步 servlet 理念的基础之上。从版本 6.1 开始,该功能就允许开发人员提供真正异步的来自服务器的

3、通知,而无需对事件进行客户端轮训并在服务器端使用执行线程。在 9.x 之前,BEA 还不急于公开该类。如何在现实中利用该类呢?我们来看一个例子。假定业务需求是要构建一个基于 Web 的应用程序,该应用程序以近乎实时的方式向服务器发送数据而无需刷新浏览器。这样的应用程序可以向服务器提交一个需要花很长时间处理的请求,而仍然能够接收到关于其状态的异步事件并监听事件。从技术角度来看,这有许多实现方法。其中一种方法就是使用一个与 Java Servlet 通信的 Java Applet 来获得异步信息。这是一种不错的方法,但是对于用户来说有些不太方便,因为他们必须下载一个 JVM,还要下载一个 appl

4、et 到浏览器。此外,还必须维护一个从客户端到服务器的持久性套接字连接,以便接收异步消息。设想一下,如果有 1000 个用户使用该 applet,那么就有 1000 个执行线程几乎是在空等着发送事件通知到客户端。当然了,还有其它方法,比如从 applet 或 AJAX 应用程序构建轮询机制来定期检查新数据。而如果不经常接收到数据,那么轮询就显得无用了,而且还浪费了服务器资源,占用了执行线程。反之,服务器可以定期轮询,将事件传播回客户端,并维护套接字线程,而无需使用持久性执行线程。这非常类似于 Java NIO 的运行方式。理想情况下,我们都希望构建一个从服务器“异步”接收事件通知而无需在服务器

5、端使用持久性执行线程的应用程序,不管它是一个 applet 还是一个基于 AJAX 的薄 Web 应用程序。以下是引用片段:import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import java.util.Stack; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import weblogic.servlet.FutureResponseServlet; imp

6、ort weblogic.servlet.FutureServletResponse; / An AsynchronousServlet that handles HTTP requests from a “separate“ thread and / not the execute thread used to invoke this servlet. public class AsynchronousServerResponseServlet extends FutureResponseServlet private final Notifier notifier; public Asyn

7、chronousServerResponseServlet() this.notifier = new Notifier(); this.notifier.start(); public void service(HttpServletRequest request, FutureServletResponse response) throws IOException,ServletException / push this clients request to a buffer and return immediately. / asynchronous processing occurs

8、in the run method of the Notifier Thread notifier.poll(request, response); class Notifier extends Thread private static Stack clients = new Stack(); void poll (HttpServletRequest request, FutureServletResponse response) clients.push(new Client(request, response); public void run() while (!clients.em

9、pty() Client client = null; try client = (Client) clients.pop(); PrintWriter pw = client.response.getWriter(); for(int j = 0; j 10; j+) pw.println(“Time is:“ + new Date() + “); pw.flush(); pw.close(); catch(Throwable t) t.printStackTrace(); finally try client.response.send(); catch(IOException ioe)

10、ioe.printStackTrace(); / inner class that holds o-n to the clients http request and response class Client private HttpServletRequest request; private FutureServletResponse response; private Client(HttpServletRequest request, FutureServletResponse response) this.request = request; this.response = res

11、ponse; 此问题的一种解决方案是创建一个扩展 FutureResponseServlet 类的 servlet。浏览器建立了到FutureResponseServlet 类的单一连接,并在另一个线程中将它自身注册为一个监听程序。只要在服务器端接收到一个事件,线程就向客户端通知该事件。服务器与客户端保持异步,无需使用持久性执行线程。该模型可扩展用于多个并发用户的情况。本文并不打算介绍如何构建 AJAX 应用程序。这方面的文章已经有很多了。本文的重点在于讨论表示层(比如 AJAX、applet 或者任何前端应用程序)的异步处理的重要性。清单 1 展示了一个例子。可以看出,该例子非常简单。Asy

12、nchronousServerResponseServlet 类扩展了 FutureResponseServlet,并重写了 service 方法。只使用一个线程(即 Notifier 类)来处理所有的客户端连接响应。对于每个 HTTP 请求,servlet 向 Notifier 线程注册套接字连接,然后返回。异步事件被交付给客户端,而持久性套接字连接被维持。单个线程可管理多个客户端连接!run()方法可用于根据某种消息选择条件回调事件到客户端。该例子只执行了一个服务器端的push 操作,有些过分简单了。线程池可被用于某些类型的事件处理。总而言之,在处理长期运行的任务时,FutureResponseServlet是一个好特性,它允许开发人员提高性能

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号