客户端:
<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的好友提醒一样,提醒具体信息,请等待下一篇。