GlassFish Comet实现范例1

未完

在GlassFish配置页面当中server-config default上面,网络配置,网络监听程序,http-listener-1和http-listener-2的HTTP协议里面的COMET打钩,以启动COMET模式

对于GlassFish当中有comet的实现库。添加即可

实现的效果是:打开两个浏览器,在其中一个浏览器当中点击count按钮,会出现一个递增的数字,第二个浏览器也会随着递增,两个浏览器页面当中的内容完全一致


在GlassFish控制台页面,打开应用程序,点击启动,会出现两个不同端口的监听程序,点击即打开两个浏览器页面,可以进行comet操作


[java]  view plain copy
  1. package com.hjc.testComet;  
  2.   
  3. import com.sun.grizzly.comet.CometContext;  
  4. import com.sun.grizzly.comet.CometEngine;  
  5. import com.sun.grizzly.comet.CometEvent;  
  6. import com.sun.grizzly.comet.CometHandler;  
  7. import java.io.IOException;  
  8. import java.io.PrintWriter;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. public class CounterHandler implements CometHandler<HttpServletResponse> {  
  12.   
  13.     private HttpServletResponse response;  
  14.   
  15.     public void onInitialize(CometEvent event) throws IOException {  
  16.     }  
  17.   
  18.     public void onInterrupt(CometEvent event) throws IOException {  
  19.         removeThisFromContext();  
  20.     }  
  21.   
  22.     public void onTerminate(CometEvent event) throws IOException {  
  23.         removeThisFromContext();  
  24.     }  
  25.   
  26.     public void attach(HttpServletResponse attachment) {  
  27.         this.response = attachment;  
  28.     }  
  29.   
  30.     @Override  
  31.     public void onEvent(CometEvent ce) throws IOException {  
  32.          
  33.         if (CometEvent.NOTIFY == ce.getType())   
  34.         {  
  35.             int count = HiddenCometServlet.counter.get();  
  36.             PrintWriter writer = response.getWriter();  
  37.             writer.write("<script type='text/javascript'>"  
  38.                     + "parent.counter.updateCount('" + count + "')"  
  39.                     + "</script>\n");  
  40.             writer.flush();  
  41.             ce.getCometContext().resumeCometHandler(this);  
  42.         }  
  43.     }  
  44.   
  45.     private void removeThisFromContext() throws IOException {  
  46.         response.getWriter().close();  
  47.         CometContext context =  
  48.                 CometEngine.getEngine().getCometContext(HiddenCometServlet.contextPath);  
  49.         context.removeCometHandler(this);  
  50.     }  
  51. }  


[java]  view plain copy
  1. package com.hjc.testComet;  
  2.   
  3. import com.sun.grizzly.comet.CometContext;  
  4. import com.sun.grizzly.comet.CometEngine;  
  5. import java.io.IOException;  
  6. import java.util.concurrent.atomic.AtomicInteger;  
  7. import javax.servlet.ServletConfig;  
  8. import javax.servlet.ServletContext;  
  9. import javax.servlet.ServletException;  
  10. import javax.servlet.http.HttpServlet;  
  11. import javax.servlet.http.HttpServletRequest;  
  12. import javax.servlet.http.HttpServletResponse;  
  13.   
  14. /** 
  15.  * 
  16.  * @author Administrator 
  17.  */  
  18. public class HiddenCometServlet extends HttpServlet {  
  19.       
  20.     static AtomicInteger counter = new AtomicInteger();  
  21.     static final long serialVersionUID = 1L;  
  22.     static String contextPath = null;  
  23.   
  24.     @Override  
  25.     public void init(ServletConfig config) throws ServletException {  
  26.   
  27.         ServletContext context = config.getServletContext();  
  28.         contextPath = context.getContextPath() + "/hidden_comet";  
  29.         CometEngine engine = CometEngine.getEngine();  
  30.         CometContext cometContext = engine.register(contextPath);  
  31.         cometContext.setExpirationDelay(30 * 1000);  
  32.   
  33.     }  
  34.   
  35.     @Override  
  36.     protected void doGet(HttpServletRequest req,  
  37.             HttpServletResponse res)  
  38.             throws ServletException, IOException {  
  39.           
  40.         CounterHandler handler = new CounterHandler();  
  41.         handler.attach(res);  
  42.         CometEngine engine = CometEngine.getEngine();  
  43.         CometContext context = engine.getCometContext(contextPath);  
  44.         context.addCometHandler(handler);  
  45.     }  
  46.   
  47.   
  48.     @Override  
  49.     protected void doPost(HttpServletRequest req, HttpServletResponse res)  
  50.             throws ServletException, IOException {  
  51.           
  52.         counter.incrementAndGet();  
  53.         CometEngine engine = CometEngine.getEngine();  
  54.         CometContext<?> context = engine.getCometContext(contextPath);  
  55.         context.notify(null);  
  56.         req.getRequestDispatcher("button.html").forward(req, res);  
  57.     }  
  58.       
  59. }  

[java]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="3.0"   
  3.          xmlns="http://java.sun.com/xml/ns/javaee"   
  4.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  
  7.   <servlet>  
  8.             <servlet-name>HiddenCometServlet</servlet-name>  
  9.             <servlet-class>  
  10.                 com.hjc.testComet.HiddenCometServlet  
  11.             </servlet-class>  
  12.             <load-on-startup>0</load-on-startup>  
  13.         </servlet>  
  14.         <servlet-mapping>  
  15.             <servlet-name>HiddenCometServlet</servlet-name>  
  16.             <url-pattern>/hidden_comet</url-pattern>  
  17.         </servlet-mapping>  
  18. </web-app>  


[java]  view plain copy
  1. <html>  
  2.     <head>  
  3.     </head>  
  4.         <body>  
  5.             <center>  
  6.                 <form method="post" action="hidden_comet">  
  7.                     <input type="submit" value="Click">  
  8.                 </form>  
  9.             </center>  
  10.         </body>  
  11. </html>  

[java]  view plain copy
  1. <html>  
  2.   <head>  
  3.     <script type='text/javascript'>  
  4.       function updateCount(c) {  
  5.         document.getElementById('count').innerHTML = c;  
  6.         // comment location.href if it is Http Streaming   
  7.         parent.hidden.location.href = "hidden_comet";  
  8.       };  
  9.     </script>  
  10.   </head>  
  11.   <body>  
  12.     <center>  
  13.       <h3>Comet Example: Counter with Hidden Frame</h3>  
  14.       <p>  
  15.       <b id="count"> </b>  
  16.       <p>  
  17.     </center>  
  18.   </body>  
  19. </html>  


[java]  view plain copy
  1. <html>  
  2.   <head>  
  3.     <title>Comet Example: Counter with Hidden Frame</title>  
  4.   </head>  
  5.   <body>  
  6.     <frameset>   
  7.       <iframe name="hidden" src="hidden_comet" frameborder="0" height="0" width="100%"></iframe>  
  8.       <iframe name="counter" src="count.html" frameborder="0" height="70%" width="100%"></iframe>  
  9.       <iframe name="button" src="button.html" frameborder="0" height="30%" width="100%"></iframe>  
  10.     </frameset></iframe>  
  11.   </body>  
  12. </html>  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值