HTML 5 Event Source

客户端:

<script>
        if(typeof(EventSource)!=="undefined"){
            var source=new EventSource("sendMessage");//sendMessage后台的访问路径
            source.onmessage=function(event){
                  document.getElementById("result").innerHTML+=event.data + "<br />";
              };
        }else{
            document.getElementById("result").innerHTML="对不起,您的浏览器不支持服务器发送的事件…";
        }
</script>

服务端:

import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SendMessageAction {

    private static final long serialVersionUID = 4066471571990512480L;
    
    private Logger logger = LoggerFactory.getLogger(SendMessageAction.class);
    
    /**
     * HTML 5 服务器发送事件 EventSource (W3School)
     * 向客户端推送新消息
     */
    public void sendMessage() {
        try{
            HttpServletResponse response = ServletActionContext.getResponse();
            response.setContentType("text/event-stream");
            response.setHeader("Cache-Control", "no-cache");
            response.setCharacterEncoding("UTF-8");
            
            //获取服务端发送的信息
            String message = "更新的信息内容:";
            
            PrintWriter writer = response.getWriter();
            /*
             * 格式必须是:"data:" + "更新的信息" + "\n\n"
             */
            writer.write("data: " + message + new Date().toString() + "\n\n");
            try {
                Thread.sleep(1000);
            } catch (Exception e) {
                e.printStackTrace();
            }
            writer.close();
         } catch (Exception e) {
             e.printStackTrace();
             logger.debug("SendMessageAction sendMessage() e = " + e);
         }
    }
}

---------------------------------------------------------------------------------------------------------------------

上面的案例,只是在页面打印更新的时间,是基于struts2

如果你遇到错误:

Google浏览器{EventSource's response has a MIME type ("text/html") that is not "text/event-stream". Aborting the connection.}

Firefox浏览器{Firefox 无法建立到 http://localhost:9011/zpms_portal_management_web/sendMessage 服务器的连接。}

问题原因:极可能是因为你的访问服务端路径不正确(前提你是按上面的方式写的)

本例子只是向页面打印当前系统时间,如果你想知道怎么获得服务中,像QQ的好友提醒一样,提醒具体信息,请等待下一篇。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值