HTML5中的服务器‘推送’技术 -Server-Sent Events :http://songyishan.iteye.com/blog/1003466
html5服务器推送技术DEMO:http://viralpatel.net/blogs/html5-server-sent-events-java-servlets-example/
java 代码:
package com.forms;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MovementEventSource extends HttpServlet
{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/event-stream");
// encoding must be set to UTF-8
response.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter();
for (int i = 0; i < 10; i++)
{
writer.write("data: " + System.currentTimeMillis() + "\n\n");
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
writer.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
// TODO Auto-generated method stub
this.doPost(req, resp);
}
}
web.xml端配置:
<servlet> <servlet-name>sendServlet</servlet-name> <servlet-class>com.forms.MovementEventSource</servlet-class> </servlet> <servlet-mapping> <servlet-name>sendServlet</servlet-name> <url-pattern>/testSendServlet.do</url-pattern> </servlet-mapping>
jsp页面代码:
<body> Time: <span id="foo"></span> <br><br> <button οnclick="start()">Start</button> <script type="text/javascript"> function start() { var eventSource = new EventSource("testSendServlet.do"); eventSource.onmessage = function(event) { document.getElementById('foo').innerHTML = event.data; }; } start(); </script> </body>
复杂的html5服务器推送技术:
java代码:
package net.viralpatel.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/event-stream");
response.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter();
int upVote = 0;
int downVote = 0;
for (int i = 0; i < 20; i++) {
upVote = upVote + (int) (Math.random() * 10);
downVote = downVote + (int) (Math.random() * 10);
writer.write("event:up_vote\n");
writer.write("data: " + upVote + "\n\n");
writer.write("event:down_vote\n");
writer.write("data: " + downVote + "\n\n");
writer.flush();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
writer.close();
}
}
jsp页面代码:
var eventSource = new EventSource("HelloServlet"); eventSource.addEventListener('up_vote', function(event) { document.getElementById('up').innerHTML = event.data; }, false); eventSource.addEventListener('down_vote', function(event) { document.getElementById('down').innerHTML = event.data; }, false);