跪求servlet3.0新特性的一个最简单的长连接的例子,求大神帮忙,在线等 要求如下:前台只请求一次,然后一直保持连接,后台(servlet)随机产生一个数字,然后在前台页面一直更新随机产生的这个数字,不要用while循环。就是一个简单的comet的实现,这个对大神肯定很简单,随便给个简单例子就行了,我找了好多例子都不能用啊,拜托了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 IBM developerWorks 上有一个例子Servlet 3.0 实战:异步 Servlet 与 Comet 风格应用程序http://www.ibm.com/developerworks/cn/java/j-lo-comet/index.html 网上现成的例子貌似没有? help package test;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.AsyncContext;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang.StringUtils;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;@WebServlet(urlPatterns = { "/asyncDispatch2Async" }, asyncSupported = true)public class AsyncContextDispatch2AsyncServlet extends HttpServlet { private static final long serialVersionUID = 46172233331022236L; private static final Log log = LogFactory .getLog(AsyncContextDispatch2AsyncServlet.class); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Cache-Control", "private"); response.setHeader("Pragma", "no-cache"); response.setHeader("Connection", "Keep-Alive"); response.setHeader("Proxy-Connection", "Keep-Alive"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println(createNumber()); out.flush(); if (!request.isAsyncSupported()) { log.info("the servlet is not supported Async"); return; } request.startAsync(request, response); if (request.isAsyncStarted()) { AsyncContext asyncContext = request.getAsyncContext(); asyncContext.setTimeout(1L * 60L * 1000L);// 60sec try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } ServletRequest request1 = asyncContext.getRequest(); String disUrl = request1.getParameter("disUrl"); if (StringUtils.equals("self", disUrl)) { asyncContext.dispatch(); }} } public int createNumber(){ return((int)(Math.random()*9000)+1000); }}真的好意思贴出来,不停的请求自己貌似是能达到我的要求,不过感觉这个跟死循环没什么区别,现在只是模拟弄个,到时候要去读电表的数据的,实时 说错了,真不好意思贴出来,新手的悲剧啊,以前没用过servlet都 一直显示随机数,好奇怪的需求。你这个为什么要用长连接,javascript间隔一段时间访问servlet不行吗? 既然都是随机数了,在页面直接用js连servlet都不需要用到! http://www.blogjava.net/yongboy/archive/2011/01/17/346201.html LZ可以参照这个,实在不行的话把邮箱给我 我解答 有长连接吗servlet?无状态的不行的吧就是以异步的方式不断请求并不断得到回应的需求了,楼主的例子感觉也差不多了 表达式求解 急!!!求助 上传文件时禁止其他的操作(也就是页面置灰) 关于一个一面跳转问题 tomcat启动错误,大家帮帮我吧,谢谢! 宇宙霹雳无敌超级世界最虚心的请求一个问题....关于日历的..欢迎进来! 一个小问题``` 为什么Tomcat服务器的地址输入的大小写要与页面名的大小写一样才能访问? 请教问题 java jni 调用C c 实现openssl 加密和解密 关于session监听的问题 实在不明白跳转失败,servlet,初学者
http://www.ibm.com/developerworks/cn/java/j-lo-comet/index.html
import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@WebServlet(urlPatterns = { "/asyncDispatch2Async" }, asyncSupported = true)
public class AsyncContextDispatch2AsyncServlet extends HttpServlet {
private static final long serialVersionUID = 46172233331022236L;
private static final Log log = LogFactory .getLog(AsyncContextDispatch2AsyncServlet.class);
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setHeader("Cache-Control", "private");
response.setHeader("Pragma", "no-cache");
response.setHeader("Connection", "Keep-Alive");
response.setHeader("Proxy-Connection", "Keep-Alive");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println(createNumber());
out.flush();
if (!request.isAsyncSupported()) {
log.info("the servlet is not supported Async");
return;
} request.startAsync(request, response);
if (request.isAsyncStarted()) {
AsyncContext asyncContext = request.getAsyncContext();
asyncContext.setTimeout(1L * 60L * 1000L);// 60sec
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
ServletRequest request1 = asyncContext.getRequest();
String disUrl = request1.getParameter("disUrl");
if (StringUtils.equals("self", disUrl)) {
asyncContext.dispatch();
}
}
}
public int createNumber(){
return((int)(Math.random()*9000)+1000);
}
}
真的好意思贴出来,不停的请求自己貌似是能达到我的要求,不过感觉这个跟死循环没什么区别,现在只是模拟弄个,到时候要去读电表的数据的,实时