52,797
社区成员
发帖
与我相关
我的任务
分享
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script>
function createHttpRequest() {
if(window.ActiveXObject){
try {
// MSXML2
return new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
// MSXML
return new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
return null;
}
}
} else if(window.XMLHttpRequest){
return new XMLHttpRequest();
} else {
return null;
}
}
function CometEx(aText, bText) {
var http_request = createHttpRequest();
http_request.open("GET", 'http://localhost:8080/MyComet/CometServlet', true);
http_request.onreadystatechange = function() {
var text,str;
text = http_request.responseText;
str = text.split(",");
if (http_request.readyState == 3 && http_request.status == 200) {
aText.value = text;
bText.value = text;
}
};
http_request.send(null);
}
</script>
</head>
<body>
<FORM NAME="aForm">
<!-- ONSELECT="storeCaret(this);" ONCLICK="storeCaret(this);" ONKEYUP="storeCaret(this);" -->
<TEXTAREA NAME="aTextArea" ROWS="5" COLS="80" WRAP="soft" > value:</TEXTAREA>
<BR>
<textarea name="bTextArea" rows="5" cols="80" wrap="soft"> value:</textarea>
<BR>
<INPUT TYPE="button" VALUE="Go!" ONCLICK="CometEx(this.form.aTextArea, this.form.bTextArea);">
</FORM>
</body>
</html>
public class CometServlet extends HttpServlet implements CometProcessor{
private static final long serialVersionUID = 1L;
private String word ;
/**
* @see HttpServlet#HttpServlet()
*/
public CometServlet() {
super();
// TODO Auto-generated constructor stub
}
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
word = String.valueOf(Math.random());
System.out.println("--init-----------------");
}
@Override
public void event(CometEvent e) throws IOException, ServletException {
// TODO Auto-p method stub
System.out.println("--event-----------------");
if(e.getEventType() == EventType.BEGIN){
System.out.println("--eventType BEGIN-----------------");
HttpServletResponse response = e.getHttpServletResponse();
// HttpServletRequest request = e.getHttpServletRequest();
RadomNumber ran = new RadomNumber(response);
new Thread(ran).start();
} else if(e.getEventType() == EventType.READ){
System.out.println("--eventType READ -----------------");
}
}
private class RadomNumber implements Runnable{
private ServletResponse connection;
private boolean running = true;
private String ran;
RadomNumber(ServletResponse response){
this.connection = response;
}
public void stop(){
running = false;
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("--RadomNumber RUN-----------------");
while (running) {
System.out.println("--RadomNumber WHILE-----------------");
PrintWriter out = null;
ran = String.valueOf(Math.random());
// if (!ran.equals(word)) {
try {
out = connection.getWriter();
word = word + "," + ran;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.write(word);
out.println();
out.flush();
try {
Thread.sleep(5000L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
word = ran;
// }
}
}
}
}