DWR 入門與應用(三)

來寫個AJAX版的聊天室吧!先看看直接使用AJAX要如何做到,首先需要一個簡單的聊天室Servlet…
 
 onlyfun.caterpillar;
 
java.io.IOException;
java.io.PrintWriter;
java.util.LinkedList;
java.util.List;
 
javax.servlet.ServletException;
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpServletResponse;
 
ChatRoomServlet javax.servlet.http.HttpServlet javax.servlet.Servlet
LinkedList messages = LinkedList();

ChatRoomServlet()
();


List addMessage(String text)
(text != && text.trim().length() > 0)
messages.addFirst( Message(text));
(messages.size() > 10)
messages.removeLast();


 
messages;

 
List getMessages()
messages;


doPost(HttpServletRequest request, HttpServletResponse response) ServletException, IOException
List list = ;

(.equals(request.getParameter()))
list = addMessage(request.getParameter());

(.equals(request.getParameter()))
list = getMessages();

 
PrintWriter out = response.getWriter();
response.setContentType();
response.setHeader(, );
 
out.println();
( i = 0; i < list.size(); i++)
String msg = list.get(i).getText();
out.println( + msg + );

out.println();



Message物件如下…
 
 onlyfun.caterpillar;
 
Message
id = System.currentTimeMillis();
String text;

Message(String newtext)
text = newtext;
(text.length() > 256)
text = text.substring(0, 256);

text = text.replace(, );
text = text.replace(, );

 
getId()
id;

 
String getText()
text;



Servlet接受訊息新增與查詢,判斷的方式是檢查請求參數task是send或query。

Servlet會以XML傳回目前List當中的訊息,客戶端可以查詢或插入新訊息時,取得目前List中的訊息,接著在web.xml中設定一下…
 






ChatRoomServlet

ChatRoomServlet

onlyfun.caterpillar.ChatRoomServlet


 

ChatRoomServlet
/ChatRoomServlet



30





在網頁中,使用者可以在輸入訊息後按下按鈕送出資訊,並在XML回應取得時,將訊息以一列一列的表格方式顯示出來,另外還設定了週期性的輪詢,即使不輸入新訊息,也可以週期性的取得新的聊天訊息…
 




Chat Room
 

 


 


Your Message:

οnclick=/>


 

Messages:





 




簡單抓個畫面… 
DWR 入門與應用(三)_第1张图片

直接用AJAX,後端用JSP/Servlet,您要對請求參數做些判斷,看看是新增訊息或查詢,並要自行輸出XML,有的沒的…

改成DWR的話,就很簡單了,寫個簡單的Java物件…
 
 onlyfun.caterpillar;
 
java.util.LinkedList;
java.util.List;
 
Chat
LinkedList messages = LinkedList();
 
List addMessage(String text)
(text != && text.trim().length() > 0)
messages.addFirst( Message(text));
(messages.size() > 10)
messages.removeLast();



messages;

 
List getMessages()
messages;



接著…在dwr.xml中開放一下…
 





 









使用者取得訊息時,是直接傳回List物件,而List中裝的是Message物件,Message物件是自訂物件,conterver設定為 bean,表示DWR會自動將Message的getter名稱轉換為傳回客戶端的JavaScript物件中的屬性,例如Message中有 getText(),則在客戶端可以用message.text這樣的方式來存取。

接著是簡單的客戶端網頁…
 




Insert title here
 



 

 


 


Your Message:

οnclick=/>


 

Messages:



 




當List物件傳回時,它成為gotMessages(messages)中的messages物件,而messages物件中包括 Message物件轉換後對應的JavaScript物件,由於我們已經設定了Converter,所以可以用messages[data].text來 取得傳回的訊息…

簡單抓個畫面…
DWR 入門與應用(三)_第2张图片

你可能感兴趣的:(Java,Ajax)