使用异步Servlet扩展AJAX应用程序.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
作为Web应用程序模型的AJAX的出现使服务器端的面貌发生了巨大的变化。用 户对着Web页面填写表单并单击提交按钮转到下一个链接的典型Web使用模式现在正在 转变为更先进的客户端JavaScript以及功能更丰富的用户界面,只要对表单进行操作 ,比如单击一个复选框、按下一个键或将鼠标移到一个选项卡上,该用户界面就会不 断地与服务器交互。 考虑一下从客户端传输到服务器的数据量有多大。从可用性的角度来看,用户在一个 薄客户端浏览器上获得了富用户界面,无需安装任何东西。但是,当在服务器端扩展 这些应用程序时就要付出代价了。AJAX应用程序的典型容量规划数可能会是标准Web应 用程序的3到4倍。 有人可能会问:这对WebLogic Server有何影响?每个发送给WebLogic的HTTP请求都要 使用一个执行线程。根据AJAX编程的性质以及许多短期的请求会以轮询的形式不断发 送的情况,该行为模式可能造成大量客户端请求不断冲击服务器的局面。多年来, WebLogic都将这一问题考虑在内,并构建了一个相当棒的特性,即 FutureResponseServlet。该范型构建于异步servlet理念的基础之上。从版本6.1开始 ,该功能就允许开发人员提供真正异步的来自服务器的通知,而无需对事件进行客户 端轮训并在服务器端使用执行线程。在9.x之前,BEA还不急于公开该类。 如何在现实中利用该类呢?我们来看一个例子。假定业务需求是要构建一个基于Web的 应用程序,该应用程序以近乎实时的方式向服务器发送数据而无需刷新浏览器。这样 的应用程序可以向服务器提交一个需要花很长时间处理的请求,而仍然能够接收到关 于其状态的异步事件并监听事件。从技术角度来看,这有许多实现方法。其中一种方 法就是使用一个与Java Servlet通信的Java Applet来获得异步信息。这是一种不错的 方法,但是对于用户来说有些不太方便,因为他们必须下载一个JVM,还要下载一个 applet到浏览器。此外,还必须维护一个从客户端到服务器的持久性套接字连接,以 便接收异步消息。设想一下,如果有1000个用户使用该applet,那么就有1000个执行 线程几乎是在空等着发送事件通知到客户端。当然了,还有其它方法,比如从applet 或AJAX应用程序构建轮询机制来定期检查新数据。而如果不经常接收到数据,那么轮 询就显得无用了,而且还浪费了服务器资源,占用了执行线程。反之,服务器可以定 期轮询,将事件传播回客户端,并维护套接字线程,而无需使用持久性执行线程。这 非常类似于Java NIO的运行方式。理想情况下,我们都希望构建一个从服务器“异步 ”接收事件通知而无需在服务器端使用持久性执行线程的应用程序,不管它是一个 applet还是一个基于AJAX的薄Web应用程序。 此问题的一种解决方案是创建一个扩展FutureResponseServlet类的servlet。浏览器 建立了到FutureResponseServlet类的单一连接,并在另一个线程中将它自身注册为一 个监听程序。只要在服务器端接收到一个事件,线程就向客户端通知该事件。服务器 与客户端保持异步,无需使用持久性执行线程。该模型可扩展用于多个并发用户的情 况。 本文并不打算介绍如何构建AJAX应用程序。这方面的文章已经有很多了。本文的重点 在于讨论表示层(比如AJAX、applet或者任何前端应用程序)的异步处理的重要性。 清单1展示了一个例子。 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; import 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 notif

文档评论(0)

精品资料 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档