function createXMLHttpRequest() { if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } }
function sendMessage() { var msg = document.getElementById("text").value;
// 定時查詢用這個 function queryMessage() { var param = "task=query"; ajaxRequest(param); }
function ajaxRequest(param) { var url = "ChatRoomServlet?timeStamp=" + new Date().getTime(); createXMLHttpRequest(); xmlHttp.onreadystatechange = refreshMessage; xmlHttp.open("POST", url); xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;"); xmlHttp.send(param); }
function refreshMessage() { if(xmlHttp.readyState == 4) { if(xmlHttp.status == 200) { // 處理顯示訊息的表格區域 var table_body = document.getElementById("dynamicUpdateArea"); var length = table_body.childNodes.length; var i; for (i = 0; i // 先移除原有的列(row) table_body.removeChild(table_body.childNodes[0]); }
// 處理取回的訊息 var messages = xmlHttp.responseXML.getElementsByTagName("message"); length = messages.length; for(i = length - 1; i >= 0 ; i--) { var message = messages[i].firstChild.data; // 在表格中新增一列來排列訊息 var row = createRow(message); table_body.appendChild(row); } // 下次2秒後會再查詢一下有無新訊息 setTimeout(queryMessage, 2000); } } }
function createRow(message) { var row = document.createElement("tr"); var cell = document.createElement("td"); var cell_data = document.createTextNode(message); cell.appendChild(cell_data); row.appendChild(cell); return row; }
public class ChatRoomServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { private static LinkedList messages = new LinkedList();
private List addMessage(String text) { if (text != null && text.trim().length() > 0) { messages.addFirst(new Message(text)); while (messages.size() > 10) { messages.removeLast(); } }
return messages; }
private List getMessages() { return messages; }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List list = null;
if("send".equals(request.getParameter("task"))) { String msg = request.getParameter("msg"); // 中文處理 msg = new String(msg.getBytes("ISO-8859-1"), "UTF8"); list = addMessage(msg); } else if("query".equals(request.getParameter("task"))){ list = getMessages(); }
PrintWriter out = response.getWriter(); out.println(""); for(int i = 0; i String msg = list.get(i).getText(); out.println("" + msg + ""); } out.println(""); out.close(); } }
Message.java
package onlyfun.caterpillar;
public class Message { private String text;
public Message(String newtext) { text = newtext; if (text.length() > 256) { text = text.substring(0, 256); } text = text.replace(' text = text.replace('&', '_'); }