深圳培训课程分类
深圳网校课程
深圳免费公开课讲座
深圳培训资讯网
深圳考试资讯
深圳培训机构视频展示
深圳培训机构
深圳培训资讯网首页 深圳硕士学历培训 深圳自学考试培训 深圳成考远程培训 深圳外语培训 深圳IT培训 深圳资格认证培训 深圳出国留学 深圳就业技能培训 深圳基础教育培训
课程搜索
资料搜索
当前位置:IT培训 -> Java培训

进阶:使用异步Servlet扩展AJAX应用程序


导航教育中心热点导读
 
 
  深圳成人高考网
· 华杰MBA09年考前辅导热招 ·南昌大学08年成考热门专业招生
· 中南财大金融硕士\华中项目硕士 ·深圳商祺人力资源管理师培训热招
· 深圳物流师认证培训课程大全 ·亚洲(澳门)公开大学MBA深圳热生
· 深圳营养师认证培训课程大全 ·香港财经大学工商管理博士(DBA)
 




 作为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 notifier;
  
  public AsynchronousServerResponseServlet() {
  this.notifier = new Notifier();
  this.notifier.start();
  }
  
  public void service(HttpServletRequest request, FutureServletResponse response) throws IOException,ServletException {
  // push this client's request to a buffer and return immediately.
  // asynchronous processing occurs in the run method of the Notifier Thread
  notifier.poll(request, response);
  }

发布日期: (2008-5-12) 来源:互联网
本文关键字:使用异步Servlet扩展AJAX应用程序
打印】 【收藏】 【关闭窗口





·深圳雅思强化(保6分)全日班、晚班、周末班
·深圳MBA:亚洲(澳门)国际公开大学MBA招生
·加拿大皇家大学MBA学位班深圳招生
·深圳上海新世界日语套餐班
·华杰MBA精品班保过班热招
·深圳国家物流师职业资格认证培训
关键词
关键词
  • 进阶:使用异步Servlet扩展AJAX应用程序  2008-5-12
  • Java语言深入--Java中日期的使用方法  2008-5-12
  • J2SE综合--让你更深入的了解String  2008-5-12
  • J2ME综合--J2ME应用程序内存优化三招  2008-5-12
  • J2EE--如何实现servlet中的发信功能?  2008-4-28
  • J2EE基础--为什么jsp不能取代servlet?  2008-4-28

  • | 关于我们 | | 网站地图 | | 联系我们 | | 合作伙伴 | | 设为首页 | 加入收藏 |

    版权所有:深圳培训资讯网 | 深圳市导航教育服务有限公司
    Copyright©2004 szedu.com.cn Inc. All Rights Reserved
    Mailto: Postmaster@szedu.com.cn