2016-01-12 84 views
1

好的,在MyServlet.java如何在Javascript客戶端解碼XML消息(從Servlet響應)?

public void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws IOException { 
    String chat=req.getParameter("chat"); 
    String last=req.getParameter("last"); 

    //String text="<message>data here</message>";--> does not work because it contains <message> 
    String text="...."; 
    resp.setContentType("text/xml"); 
    String xml="<?xml version=\"1.0\" ?><root>"+ 
    "<message id=\"0\">"+ 
    "<user>1</user>" + 
    "<text>"+ text + "</text>"+ 
    "<time>10:30</time>"+ 
    "</message>"+ 
    "</root>"; 

    resp.getWriter().println(xml); 
} 

ajaxchat.html

//Function for handling the return of chat text 
     function handleReceiveChat() { 
      if (receiveReq.readyState == 4) { 
       var chat_div = document.getElementById('div_chat'); 
       var xmldoc = receiveReq.responseXML; 
       var message_nodes = xmldoc.getElementsByTagName("message"); 
       var n_messages = message_nodes.length 
       for (i = 0; i < n_messages; i++) { 
        var user_node = message_nodes[i].getElementsByTagName("user"); 
        var text_node = message_nodes[i].getElementsByTagName("text"); 
        var time_node = message_nodes[i].getElementsByTagName("time"); 
        chat_div.innerHTML += user_node[0].firstChild.nodeValue + '&nbsp;'; 
        chat_div.innerHTML += '<font class="chat_time">' + time_node[0].firstChild.nodeValue + '</font><br />'; 
        chat_div.innerHTML += text_node[0].firstChild.nodeValue + '<br />'; 
        chat_div.scrollTop = chat_div.scrollHeight; 
        lastMessage = (message_nodes[i].getAttribute('id')); 
       } 
       mTimer = setTimeout('getChatText();',2000); //Refresh our chat in 2 seconds 
      } 
     } 

的2上面的代碼很好地工作。但是,我遇到了一個嚴重的問題。也就是說,如果用戶發送的郵件中包含類似於「<message>」,「</message>」,「<user>」,「</user>」等標籤的文字,則不起作用。

所以我的問題是:

如何在JavaScript客戶端解碼XML消息(即從Servlet的responsed)?

回答

0

您需要在消息中添加轉義字符,因爲它包含一些預定義的xml標記。

下載此lib unbescapeHtmlEscape.escapeHtml4())。

下面是修改後的代碼:

public void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws IOException { 
    String chat=req.getParameter("chat"); 
    String last=req.getParameter("last"); 

    //String text="<message>data here</message>";--> does not work because it contains <message> 
    String text="...."; 
    text = HtmlEscape.escapeHtml4(text); // add escape characters 
    resp.setContentType("text/xml"); 
    String xml="<?xml version=\"1.0\" ?><root>"+ 
    "<message id=\"0\">"+ 
    "<user>1</user>" + 
    "<text>"+ text + "</text>"+ 
    "<time>10:30</time>"+ 
    "</message>"+ 
    "</root>"; 

    resp.getWriter().println(xml); 
} 

當你正在使用JavaScript你不需要刪除轉義字符讓網絡瀏覽器這一請求。 Html通過它自行完成。

希望它能幫助你。

+0

但它有另一個問題,當用戶輸入「** 文本 **」時,那麼消息應該是「** 文本 **」。但是,它只顯示「**文本**」 – Tom

+0

您是否使用過我的解決方案? – chandil03

+0

我做了&我看不到「」 – Tom

相關問題