未完
在GlassFish配置页面当中server-config default上面,网络配置,网络监听程序,http-listener-1和http-listener-2的HTTP协议里面的COMET打钩,以启动COMET模式
对于GlassFish当中有comet的实现库。添加即可
实现的效果是:打开两个浏览器,在其中一个浏览器当中点击count按钮,会出现一个递增的数字,第二个浏览器也会随着递增,两个浏览器页面当中的内容完全一致
在GlassFish控制台页面,打开应用程序,点击启动,会出现两个不同端口的监听程序,点击即打开两个浏览器页面,可以进行comet操作
- package com.hjc.testComet;
- import com.sun.grizzly.comet.CometContext;
- import com.sun.grizzly.comet.CometEngine;
- import com.sun.grizzly.comet.CometEvent;
- import com.sun.grizzly.comet.CometHandler;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.http.HttpServletResponse;
- public class CounterHandler implements CometHandler<HttpServletResponse> {
- private HttpServletResponse response;
- public void onInitialize(CometEvent event) throws IOException {
- }
- public void onInterrupt(CometEvent event) throws IOException {
- removeThisFromContext();
- }
- public void onTerminate(CometEvent event) throws IOException {
- removeThisFromContext();
- }
- public void attach(HttpServletResponse attachment) {
- this.response = attachment;
- }
- @Override
- public void onEvent(CometEvent ce) throws IOException {
- if (CometEvent.NOTIFY == ce.getType())
- {
- int count = HiddenCometServlet.counter.get();
- PrintWriter writer = response.getWriter();
- writer.write("<script type='text/javascript'>"
- + "parent.counter.updateCount('" + count + "')"
- + "</script>\n");
- writer.flush();
- ce.getCometContext().resumeCometHandler(this);
- }
- }
- private void removeThisFromContext() throws IOException {
- response.getWriter().close();
- CometContext context =
- CometEngine.getEngine().getCometContext(HiddenCometServlet.contextPath);
- context.removeCometHandler(this);
- }
- }
- package com.hjc.testComet;
- import com.sun.grizzly.comet.CometContext;
- import com.sun.grizzly.comet.CometEngine;
- import java.io.IOException;
- import java.util.concurrent.atomic.AtomicInteger;
- import javax.servlet.ServletConfig;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- /**
- *
- * @author Administrator
- */
- public class HiddenCometServlet extends HttpServlet {
- static AtomicInteger counter = new AtomicInteger();
- static final long serialVersionUID = 1L;
- static String contextPath = null;
- @Override
- public void init(ServletConfig config) throws ServletException {
- ServletContext context = config.getServletContext();
- contextPath = context.getContextPath() + "/hidden_comet";
- CometEngine engine = CometEngine.getEngine();
- CometContext cometContext = engine.register(contextPath);
- cometContext.setExpirationDelay(30 * 1000);
- }
- @Override
- protected void doGet(HttpServletRequest req,
- HttpServletResponse res)
- throws ServletException, IOException {
- CounterHandler handler = new CounterHandler();
- handler.attach(res);
- CometEngine engine = CometEngine.getEngine();
- CometContext context = engine.getCometContext(contextPath);
- context.addCometHandler(handler);
- }
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- counter.incrementAndGet();
- CometEngine engine = CometEngine.getEngine();
- CometContext<?> context = engine.getCometContext(contextPath);
- context.notify(null);
- req.getRequestDispatcher("button.html").forward(req, res);
- }
- }
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="3.0"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
- <servlet>
- <servlet-name>HiddenCometServlet</servlet-name>
- <servlet-class>
- com.hjc.testComet.HiddenCometServlet
- </servlet-class>
- <load-on-startup>0</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>HiddenCometServlet</servlet-name>
- <url-pattern>/hidden_comet</url-pattern>
- </servlet-mapping>
- </web-app>
- <html>
- <head>
- </head>
- <body>
- <center>
- <form method="post" action="hidden_comet">
- <input type="submit" value="Click">
- </form>
- </center>
- </body>
- </html>
- <html>
- <head>
- <script type='text/javascript'>
- function updateCount(c) {
- document.getElementById('count').innerHTML = c;
- // comment location.href if it is Http Streaming
- parent.hidden.location.href = "hidden_comet";
- };
- </script>
- </head>
- <body>
- <center>
- <h3>Comet Example: Counter with Hidden Frame</h3>
- <p>
- <b id="count"> </b>
- <p>
- </center>
- </body>
- </html>
- <html>
- <head>
- <title>Comet Example: Counter with Hidden Frame</title>
- </head>
- <body>
- <frameset>
- <iframe name="hidden" src="hidden_comet" frameborder="0" height="0" width="100%"></iframe>
- <iframe name="counter" src="count.html" frameborder="0" height="70%" width="100%"></iframe>
- <iframe name="button" src="button.html" frameborder="0" height="30%" width="100%"></iframe>
- </frameset></iframe>
- </body>
- </html>