本帖最后由 oonxt 于 2010-10-14 15:12:03 编辑

解决方案 »

  1.   

    没人回答吗?
    1.改tomcat 的协议
    2.建个CometProcessor
    public class FightCometServlet  extends HttpServlet implements CometProcessor{
        private static Log log = LogFactory.getLog(FightCometServlet.class);    
        private static final Integer TIMEOUT = 60 * 1000;
        private FightLogic fightLogic;       @Override
        public void init() throws ServletException {
            ServletContext servletContext = this.getServletContext();
            this.fightLogic = (FightLogic)WebApplicationContextUtils.getWebApplicationContext(servletContext).getBean("fightLogic");
            
        }
        
        public void event(final CometEvent event) throws IOException, ServletException {
            HttpServletRequest request = event.getHttpServletRequest();
            HttpServletResponse response = event.getHttpServletResponse();
            response.setContentType("text/plain");
                response.setCharacterEncoding("UTF-8");
            HttpSession session = request.getSession(true);
            PrintWriter writer = response.getWriter();        
          
            Message message = null;
            if (event.getEventType() == CometEvent.EventType.BEGIN) {
                
                
                writer.println("什么什么");
                log.info("Writing:" + messageStr);
                writer.flush();
             writer.close();
            } else if (event.getEventType() == CometEvent.EventType.ERROR) {
                log.info("Error for session: " + request.getSession(true).getId());
                event.close();
            } else if (event.getEventType() == CometEvent.EventType.END) {
                log.info("End for session: " + request.getSession(true).getId());
                event.close();
            } else if (event.getEventType() == CometEvent.EventType.READ) {
                throw new UnsupportedOperationException("This servlet does not acceptdata");
            }    }}主要就是这个event了。在这里调用你的业务逻辑,然后转json,写到页面上吧。
    3.ajax调用这个servlet的路径。
    如果后台有新的返回值就可以随时响应
    ------
    继续抛砖本色
      

  2.   

    感谢楼上的兄台。
    但是这样不是相当于在struts之外单独使用servlet了吗?我想的是在struts之在的实现,是否可行?
      

  3.   

    回楼上,不知道是不是我写得不对,使用CometProcessor执行的效率还不如我自己写的好,所以才想写到Struts当中。现在来看,比较担心手工阻塞IO之后会导致其它用户无法访问。自己再研究一下。谢谢。结帖。