📄 dwr 入門與應用(三) - 林信良(良葛格)的专栏 - csdnblog.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0069)http://blog.csdn.net/caterpillar_here/archive/2006/09/30/1311605.aspx -->
<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>DWR 入門與應用(三) - 林信良(良葛格)的专栏 - CSDNBlog</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META content=良葛格 name=author>
<META content=Csdn name=Copyright>
<META
content="原發表於http://www.javaworld.com.tw/jute/post/view?bid=49&amp;id=167679&amp;sty=1&amp;tpg=1&amp;age=-1<br />繁簡術語不同,為免名詞誤會,不做轉換…Orz..."
name=description>
<META content=良葛格,j2ee,w3c,dwr,servlet,chatroomservlet, name=keywords><LINK
href="http://profile.csdn.net/caterpillar_here/picture/1.ico"
rel="Shortcut Icon"><LINK media=all
href="DWR 入門與應用(三) - 林信良(良葛格)的专栏 - CSDNBlog.files/Cogitation_1.css"
type=text/css rel=stylesheet><LINK media=all
href="DWR 入門與應用(三) - 林信良(良葛格)的专栏 - CSDNBlog.files/csdn_favbykimi.css"
type=text/css rel=stylesheet>
<SCRIPT src="DWR 入門與應用(三) - 林信良(良葛格)的专栏 - CSDNBlog.files/jquery-1.2.3.pack.js"
type=text/javascript></SCRIPT>
<SCRIPT src="DWR 入門與應用(三) - 林信良(良葛格)的专栏 - CSDNBlog.files/jquery.highlighter.js"
type=text/javascript></SCRIPT>
<SCRIPT src="DWR 入門與應用(三) - 林信良(良葛格)的专栏 - CSDNBlog.files/highlighter.js"
type=text/javascript></SCRIPT>
<LINK title=RSS href="http://blog.csdn.net/caterpillar_here/rss.aspx"
type=application/rss+xml rel=alternate>
<META content="MSHTML 6.00.2900.5726" name=GENERATOR></HEAD>
<BODY id=defaultuser>
<DIV id=csdnblog_allwrap>
<FORM id=Form1 name=Form1 action=1311605.aspx method=post><INPUT
id=" __VIEWSTATE" type=hidden name=__VIEWSTATE>
<DIV id=csdnblog_midwrap>
<DIV id=csdnblog_header>
<H1><A id=Header1_HeaderTitle
href="http://blog.csdn.net/caterpillar_here/">林信良(良葛格)的专栏</A></H1>
<H2>http://caterpillar.onlyfun.net/ </H2>
<UL id=personalnav>
<LI><A href="http://passport.csdn.net/UserLogin.aspx">登录</A></LI>
<LI><A href="http://passport.csdn.net/CSDNUserRegister.aspx">注册</A></LI></UL>
<UL id=blogsearchsty>
<LI><INPUT class=bolgsearch id=inputSearch
onkeydown="return keyb(event)"></LI>
<LI class=selectsty><SELECT id=Search_ddlSearchScope
name=Search:ddlSearchScope><OPTION value=all selected>全站</OPTION><OPTION
value=caterpillar_here>当前博客</OPTION></SELECT></LI>
<LI><INPUT class=bolggobtn onclick=checkNull() type=button value=搜索></LI></UL>
<UL id=menu>
<LI><A href="http://hi.csdn.net/caterpillar_here">空间</A></LI>
<LI><A class=on href="http://blog.csdn.net/caterpillar_here">博客</A></LI>
<LI><A
href="http://hi.csdn.net/caterpillar_here/profile/contactlist/1.html">好友</A></LI>
<LI><A href="http://album.hi.csdn.net/" target=_blank>相册</A></LI>
<LI><A class=last
href="http://hi.csdn.net/caterpillar_here/profile/notebook/1.html">留言</A></LI></UL></DIV>
<DIV id=csdnblog_content>
<DIV class=gutter>
<DIV class=default_contents>
<DIV class=user_article>
<SCRIPT src="DWR 入門與應用(三) - 林信良(良葛格)的专栏 - CSDNBlog.files/LoadFeedbackCount.js"
type=text/javascript></SCRIPT>
<H1 class=title_txt><IMG height=16 alt=原创
src="DWR 入門與應用(三) - 林信良(良葛格)的专栏 - CSDNBlog.files/authorship.gif" width=15
border=0> DWR 入門與應用(三)<CITE class=fav_csdnstylebykimi><A
class=fav_csdnstylebykimi title=收藏到我的网摘中,并分享给我的朋友
href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();">收藏</A></CITE></H1>
<DIV class=blogstory>
<SCRIPT>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</SCRIPT>
<SPAN class=javascript
id=text167679>來寫個AJAX版的聊天室吧!先看看直接使用AJAX要如何做到,首先需要一個簡單的聊天室Servlet… <BR>
<TABLE class=java cellSpacing=1 cellPadding=3 bgColor=#999999 border=0>
<TBODY>
<TR>
<TD vAlign=top align=left width=1 bgColor=#dddddd><PRE><FONT color=#555555>1<BR>2<BR>3<BR>4<BR>5<BR>6<BR>7<BR>8<BR>9<BR>10<BR>11<BR>12<BR>13<BR>14<BR>15<BR>16<BR>17<BR>18<BR>19<BR>20<BR>21<BR>22<BR>23<BR>24<BR>25<BR>26<BR>27<BR>28<BR>29<BR>30<BR>31<BR>32<BR>33<BR>34<BR>35<BR>36<BR>37<BR>38<BR>39<BR>40<BR>41<BR>42<BR>43<BR>44<BR>45<BR>46<BR>47<BR>48<BR>49<BR>50<BR>51<BR>52<BR>53<BR>54<BR>55<BR></FONT></PRE></TD>
<TD vAlign=top align=left bgColor=#ffffff><PRE><FONT class=java-reserved_word><STRONG>package</STRONG></FONT> onlyfun.caterpillar;<BR> <BR><FONT class=java-reserved_word><STRONG>import</STRONG></FONT> java.io.IOException;<BR><FONT class=java-reserved_word><STRONG>import</STRONG></FONT> java.io.PrintWriter;<BR><FONT class=java-reserved_word><STRONG>import</STRONG></FONT> java.util.LinkedList;<BR><FONT class=java-reserved_word><STRONG>import</STRONG></FONT> java.util.List;<BR> <BR><FONT class=java-reserved_word><STRONG>import</STRONG></FONT> javax.servlet.ServletException;<BR><FONT class=java-reserved_word><STRONG>import</STRONG></FONT> javax.servlet.http.HttpServletRequest;<BR><FONT class=java-reserved_word><STRONG>import</STRONG></FONT> javax.servlet.http.HttpServletResponse;<BR> <BR> <FONT class=java-reserved_word><STRONG>public</STRONG></FONT> <FONT class=java-reserved_word><STRONG>class</STRONG></FONT> ChatRoomServlet <FONT class=java-reserved_word><STRONG>extends</STRONG></FONT> javax.servlet.http.HttpServlet <FONT class=java-reserved_word><STRONG>implements</STRONG></FONT> javax.servlet.Servlet <FONT class=java-bracket>{</FONT><BR> <FONT class=java-reserved_word><STRONG>private</STRONG></FONT> <FONT class=java-reserved_word><STRONG>static</STRONG></FONT> LinkedList<Message> messages = <FONT class=java-reserved_word><STRONG>new</STRONG></FONT> LinkedList<Message>();<BR> <BR> <FONT class=java-reserved_word><STRONG>public</STRONG></FONT> ChatRoomServlet() <FONT class=java-bracket>{</FONT><BR> <FONT class=java-reserved_word><STRONG>super</STRONG></FONT>(); <BR> <FONT class=java-bracket>}</FONT><BR> <BR> <FONT class=java-reserved_word><STRONG>private</STRONG></FONT> List<Message> addMessage(String text) <FONT class=java-bracket>{</FONT><BR> <FONT class=java-reserved_word><STRONG>if</STRONG></FONT> (text != <FONT class=java-reserved_word><STRONG>null</STRONG></FONT> && text.trim().length() > 0) <FONT class=java-bracket>{</FONT><BR> messages.addFirst(<FONT class=java-reserved_word><STRONG>new</STRONG></FONT> Message(text));<BR> <FONT class=java-reserved_word><STRONG>while</STRONG></FONT> (messages.size() > 10) <FONT class=java-bracket>{</FONT><BR> messages.removeLast();<BR> <FONT class=java-bracket>}</FONT><BR> <FONT class=java-bracket>}</FONT><BR> <BR> <FONT class=java-reserved_word><STRONG>return</STRONG></FONT> messages;<BR> <FONT class=java-bracket>}</FONT><BR> <BR> <FONT class=java-reserved_word><STRONG>private</STRONG></FONT> List<Message> getMessages() <FONT class=java-bracket>{</FONT><BR> <FONT class=java-reserved_word><STRONG>return</STRONG></FONT> messages;<BR> <FONT class=java-bracket>}</FONT><BR> <BR> <FONT class=java-reserved_word><STRONG>protected</STRONG></FONT> <FONT class=java-reserved_word><STRONG>void</STRONG></FONT> doPost(HttpServletRequest request, HttpServletResponse response) <FONT class=java-reserved_word><STRONG>throws</STRONG></FONT> ServletException, IOException <FONT class=java-bracket>{</FONT><BR> List<Message> list = <FONT class=java-reserved_word><STRONG>null</STRONG></FONT>;<BR> <BR> <FONT class=java-reserved_word><STRONG>if</STRONG></FONT>(<FONT class=java-string>"send"</FONT>.equals(request.getParameter(<FONT class=java-string>"task"</FONT>))) <FONT class=java-bracket>{</FONT><BR> list = addMessage(request.getParameter(<FONT class=java-string>"msg"</FONT>));<BR> <FONT class=java-bracket>}</FONT><BR> <FONT class=java-reserved_word><STRONG>else</STRONG></FONT> <FONT class=java-reserved_word><STRONG>if</STRONG></FONT>(<FONT class=java-string>"query"</FONT>.equals(request.getParameter(<FONT class=java-string>"task"</FONT>)))<FONT class=java-bracket>{</FONT><BR> list = getMessages();<BR> <FONT class=java-bracket>}</FONT><BR> <BR> PrintWriter out = response.getWriter();<BR> response.setContentType(<FONT class=java-string>"text/xml"</FONT>);<BR> response.setHeader(<FONT class=java-string>"Cache-Control"</FONT>, <FONT class=java-string>"no-cache"</FONT>);<BR> <BR> out.println(<FONT class=java-string>"<response>"</FONT>);<BR> <FONT class=java-reserved_word><STRONG>for</STRONG></FONT>(<FONT class=java-reserved_word><STRONG>int</STRONG></FONT> i = 0; i < list.size(); i++) <FONT class=java-bracket>{</FONT><BR> String msg = list.get(i).getText();<BR> out.println(<FONT class=java-string>"<message>"</FONT> + msg + <FONT class=java-string>"</message>"</FONT>);<BR> <FONT class=java-bracket>}</FONT><BR> out.println(<FONT class=java-string>"</response>"</FONT>);<BR> <FONT class=java-bracket>}</FONT> <BR><FONT class=java-bracket>}</FONT> </PRE></TD></TR></TBODY></TABLE><BR><BR>Message物件如下…
<BR>
<TABLE class=java cellSpacing=1 cellPadding=3 bgColor=#999999 border=0>
<TBODY>
<TR>
<TD vAlign=top align=left width=1 bgColor=#dddddd><PRE><FONT color=#555555>1<BR>2<BR>3<BR>4<BR>5<BR>6<BR>7<BR>8<BR>9<BR>10<BR>11<BR>12<BR>13<BR>14<BR>15<BR>16<BR>17<BR>18<BR>19<BR>20<BR>21<BR>22<BR>23<BR></FONT></PRE></TD>
<TD vAlign=top align=left bgColor=#ffffff><PRE><FONT class=java-reserved_word><STRONG>package</STRONG></FONT> onlyfun.caterpillar;<BR> <BR><FONT class=java-reserved_word><STRONG>public</STRONG></FONT> <FONT class=java-reserved_word><STRONG>class</STRONG></FONT> Message <FONT class=java-bracket>{</FONT><BR> <FONT class=java-reserved_word><STRONG>private</STRONG></FONT> <FONT class=java-reserved_word><STRONG>long</STRONG></FONT> id = System.currentTimeMillis();<BR> <FONT class=java-reserved_word><STRONG>private</STRONG></FONT> String text;<BR> <BR> <FONT class=java-reserved_word><STRONG>public</STRONG></FONT> Message(String newtext) <FONT class=java-bracket>{</FONT><BR> text = newtext;<BR> <FONT class=java-reserved_word><STRONG>if</STRONG></FONT> (text.length() > 256) <FONT class=java-bracket>{</FONT><BR> text = text.substring(0, 256);<BR> <FONT class=java-bracket>}</FONT><BR> text = text.replace(<FONT class=java-string>'<'</FONT>, <FONT class=java-string>'['</FONT>);<BR> text = text.replace(<FONT class=java-string>'&'</FONT>, <FONT class=java-string>'_'</FONT>);<BR> <FONT class=java-bracket>}</FONT><BR> <BR> <FONT class=java-reserved_word><STRONG>public</STRONG></FONT> <FONT class=java-reserved_word><STRONG>long</STRONG></FONT> getId() <FONT class=java-bracket>{</FONT><BR> <FONT class=java-reserved_word><STRONG>return</STRONG></FONT> id;<BR> <FONT class=java-bracket>}</FONT><BR> <BR> <FONT class=java-reserved_word><STRONG>public</STRONG></FONT> String getText() <FONT class=java-bracket>{</FONT><BR> <FONT class=java-reserved_word><STRONG>return</STRONG></FONT> text;<BR> <FONT class=java-bracket>}</FONT><BR><FONT class=java-bracket>}</FONT> </PRE></TD></TR></TBODY></TABLE><BR><BR>Servlet接受訊息新增與查詢,判斷的方式是檢查請求參數task是send或query。
<BR><BR>Servlet會以XML傳回目前List當中的訊息,客戶端可以查詢或插入新訊息時,取得目前List中的訊息,接著在web.xml中設定一下…
<BR>
<TABLE class=java cellSpacing=1 cellPadding=3 bgColor=#999999 border=0>
<TBODY>
<TR>
<TD vAlign=top align=left width=1 bgColor=#dddddd><PRE><FONT color=#555555>1<BR>2<BR>3<BR>4<BR>5<BR>6<BR>7<BR>8<BR>9<BR>10<BR>11<BR>12<BR>13<BR>14<BR>15<BR>16<BR>17<BR>18<BR>19<BR>20<BR>21<BR>22<BR></FONT></PRE></TD>
<TD vAlign=top align=left bgColor=#ffffff><PRE><?xml version=<FONT class=java-string>"1.0"</FONT> encoding=<FONT class=java-string>"UTF-8"</FONT>?><BR><web-app id=<FONT class=java-string>"WebApp_ID"</FONT> version=<FONT class=java-string>"2.4"</FONT> xmlns=<FONT class=java-string>"http://java.sun.com/xml/ns/j2ee"</FONT> xmlns:xsi=<FONT class=java-string>"http://www.w3.org/2001/XMLSchema-instance"</FONT> xsi:schemaLocation=<FONT class=java-string>"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</FONT>><BR> <servlet><BR> <description><BR> </description><BR> <display-name><BR> ChatRoomServlet</display-name><BR> <servlet-name>ChatRoomServlet</servlet-name><BR> <servlet-class><BR> onlyfun.caterpillar.ChatRoomServlet</servlet-class><BR> </servlet><BR> <BR> <servlet-mapping><BR> <servlet-name>ChatRoomServlet</servlet-name><BR> <url-pattern>/ChatRoomServlet</url-pattern><BR> </servlet-mapping><BR> <session-config><BR> <session-timeout><BR> 30<BR> </session-timeout><BR> </session-config> <BR></web-app><BR></PRE></TD></TR></TBODY></TABLE><BR><BR>在網頁中,使用者可以在輸入訊息後按下按鈕送出資訊,並在XML回應取得時,將訊息以一列一列的表格方式顯示出來,另外還設定了週期性的輪詢,即使不輸入新訊息,也可以週期性的取得新的聊天訊息…
<BR>
<TABLE class=java cellSpacing=1 cellPadding=3 bgColor=#999999 border=0>
<TBODY>
<TR>
<TD vAlign=top align=left width=1 bgColor=#dddddd><PRE><FONT color=#555555>1<BR>2<BR>3<BR>4<BR>5<BR>6<BR>7<BR>8<BR>9<BR>10<BR>11<BR>12<BR>13<BR>14<BR>15<BR>16<BR>17<BR>18<BR>19<BR>20<BR>21<BR>22<BR>23<BR>24<BR>25<BR>26<BR>27<BR>28<BR>29<BR>30<BR>31<BR>32<BR>33<BR>34<BR>35<BR>36<BR>37<BR>38<BR>39<BR>40<BR>41<BR>42<BR>43<BR>44<BR>45<BR>46<BR>47<BR>48<BR>49<BR>50<BR>51<BR>52<BR>53<BR>54<BR>55<BR>56<BR>57<BR>58<BR>59<BR>60<BR>61<BR>62<BR>63<BR>64<BR>65<BR>66<BR>67<BR>68<BR>69<BR>70<BR>71<BR>72<BR>73<BR>74<BR>75<BR>76<BR>77<BR>78<BR>79<BR>80<BR>81<BR>82<BR>83<BR>84<BR>85<BR>86<BR>87<BR>88<BR>89<BR>90<BR>91<BR>92<BR>93<BR>94<BR>95<BR>96<BR>97<BR></FONT></PRE></TD>
<TD vAlign=top align=left bgColor=#ffffff><PRE><!DOCTYPE HTML PUBLIC <FONT class=java-string>"-//W3C//DTD HTML 4.01 Transitional//EN"</FONT>><BR><html><BR><head><BR><meta http-equiv=<FONT class=java-string>"Content-Type"</FONT> content=<FONT class=java-string>"text/html; charset=BIG5"</FONT>><BR><title>Chat Room</title><BR> <BR><script type=<FONT class=java-string>"text/javascript"</FONT>><BR>var xmlHttp;<BR> <BR>function createXMLHttpRequest() <FONT class=java-bracket>{</FONT><BR> <FONT class=java-reserved_word><STRONG>if</STRONG></FONT> (window.ActiveXObject) <FONT class=java-bracket>{</FONT><BR> xmlHttp = <FONT class=java-reserved_word><STRONG>new</STRONG></FONT> ActiveXObject(<FONT class=java-string>"Microsoft.XMLHTTP"</FONT>);<BR> <FONT class=java-bracket>}</FONT> <BR> <FONT class=java-reserved_word><STRONG>else</STRONG></FONT> <FONT class=java-reserved_word><STRONG>if</STRONG></FONT> (window.XMLHttpRequest) <FONT class=java-bracket>{</FONT><BR> xmlHttp = <FONT class=java-reserved_word><STRONG>new</STRONG></FONT> XMLHttpRequest();<BR> <FONT class=java-bracket>}</FONT><BR><FONT class=java-bracket>}</FONT><BR> <BR>function sendMessage() <FONT class=java-bracket>{</FONT><BR> var msg = document.getElementById(<FONT class=java-string>"text"</FONT>).value;<BR> <BR> <FONT class=java-reserved_word><STRONG>if</STRONG></FONT>(msg == <FONT class=java-string>""</FONT>) <FONT class=java-bracket>{</FONT><BR> refreshMessage();<BR> <FONT class=java-reserved_word><STRONG>return</STRONG></FONT>;<BR> <FONT class=java-bracket>}</FONT><BR> <BR> var param = <FONT class=java-string>"task=send&msg="</FONT> + msg;<BR> ajaxRequest(param);<BR> document.getElementById(<FONT class=java-string>"text"</FONT>).value = <FONT class=java-string>""</FONT>;<BR><FONT class=java-bracket>}</FONT><BR> <BR>function queryMessage() <FONT class=java-bracket>{</FONT><BR> var param = <FONT class=java-string>"task=query"</FONT>;<BR> ajaxRequest(param);<BR><FONT class=java-bracket>}</FONT><BR> <BR>function ajaxRequest(param) <FONT class=java-bracket>{</FONT><BR> var url = <FONT class=java-string>"ChatRoomServlet?timestamp"</FONT> + <FONT class=java-reserved_word><STRONG>new</STRONG></FONT> Date().getTime();<BR> createXMLHttpRequest();<BR> xmlHttp.onreadystatechange = refreshMessage;<BR> xmlHttp.open(<FONT class=java-string>"POST"</FONT>, url, <FONT class=java-reserved_word><STRONG>true</STRONG></FONT>);<BR> xmlHttp.setRequestHeader(<FONT class=java-string>"Content-Type"</FONT>,<BR> <FONT class=java-string>"application/x-www-form-urlencoded;"</FONT>);<BR> xmlHttp.send(param);<BR><FONT class=java-bracket>}</FONT><BR> <BR>function refreshMessage() <FONT class=java-bracket>{</FONT><BR> <FONT class=java-reserved_word><STRONG>if</STRONG></FONT>(xmlHttp.readyState == 4) <FONT class=java-bracket>{</FONT><BR> <FONT class=java-reserved_word><STRONG>if</STRONG></FONT>(xmlHttp.status == 200) <FONT class=java-bracket>{</FONT><BR> var messages = xmlHttp.responseXML.getElementsByTagName(<FONT class=java-string>"message"</FONT>);<BR> <BR> var table_body = document.getElementById(<FONT class=java-string>"dynamicUpdateArea"</FONT>);<BR> var length = table_body.childNodes.length;<BR> <FONT class=java-reserved_word><STRONG>for</STRONG></FONT> (var i = 0; i < length; i++) <FONT class=java-bracket>{</FONT><BR> table_body.removeChild(table_body.childNodes[0]);<BR> <FONT class=java-bracket>}</FONT><BR> <BR> var length = messages.length;<BR> <FONT class=java-reserved_word><STRONG>for</STRONG></FONT>(var i = length - 1; i >= 0 ; i--) <FONT class=java-bracket>{</FONT><BR> var message = messages[i].firstChild.data;<BR> var row = createRow(message);<BR> <BR> table_body.appendChild(row); <BR> <FONT class=java-bracket>}</FONT><BR> setTimeout(<FONT class=java-string>"queryMessage()"</FONT>, 2000);<BR> <FONT class=java-bracket>}</FONT><BR> <FONT class=java-bracket>}</FONT><BR><FONT class=java-bracket>}</FONT><BR> <BR>function createRow(message) <FONT class=java-bracket>{</FONT><BR> var row = document.createElement(<FONT class=java-string>"tr"</FONT>);<BR> var cell = document.createElement(<FONT class=java-string>"td"</FONT>);<BR> var cell_data = document.createTextNode(message);<BR> cell.appendChild(cell_data);<BR> row.appendChild(cell);<BR> <FONT class=java-reserved_word><STRONG>return</STRONG></FONT> row;<BR><FONT class=java-bracket>}</FONT><BR> <BR></script><BR> <BR></head><BR><body><BR> <BR><p><BR> Your Message:<BR> <input id=<FONT class=java-string>"text"</FONT>/><BR> <input type=<FONT class=java-string>"button"</FONT> value=<FONT class=java-string>"Send"</FONT><BR> onclick=<FONT class=java-string>"sendMessage()"</FONT>/><BR></p><BR> <BR><p>Messages:</p><BR> <table align=<FONT class=java-string>"left"</FONT>><BR> <tbody id=<FONT class=java-string>"dynamicUpdateArea"</FONT>></tbody><BR> </table><BR> <BR></body><BR></html><BR></PRE></TD></TR></TBODY></TABLE><BR><BR>簡單抓個畫面…
</SPAN><BR><IMG alt=""
src="DWR 入門與應用(三) - 林信良(良葛格)的专栏 - CSDNBlog.files/1.jpg"><BR><BR><SPAN
class=javascript
id=text167681>直接用AJAX,後端用JSP/Servlet,您要對請求參數做些判斷,看看是新增訊息或查詢,並要自行輸出XML,有的沒的…
<BR><BR>改成DWR的話,就很簡單了,寫個簡單的Java物件… <BR>
<TABLE class=java cellSpacing=1 cellPadding=3 bgColor=#999999 border=0>
<TBODY>
<TR>
<TD vAlign=top align=left width=1 bgColor=#dddddd><PRE><FONT color=#555555>1<BR>2<BR>3<BR>4<BR>5<BR>6<BR>7<BR>8<BR>9<BR>10<BR>11<BR>12<BR>13<BR>14<BR>15<BR>16<BR>17<BR>18<BR>19<BR>20<BR>21<BR>22<BR>23<BR></FONT></PRE></TD>
<TD vAlign=top align=left bgColor=#ffffff><PRE><FONT class=java-reserved_word><STRONG>package</STRONG></FONT> onlyfun.caterpillar;<BR> <BR><FONT class=java-reserved_word><STRONG>import</STRONG></FONT> java.util.LinkedList;<BR><FONT class=java-reserved_word><STRONG>import</STRONG></FONT> java.util.List;<BR> <BR><FONT class=java-reserved_word><STRONG>public</STRONG></FONT> <FONT class=java-reserved_word><STRONG>class</STRONG></FONT> Chat <FONT class=java-bracket>{</FONT><BR> <FONT class=java-reserved_word><STRONG>private</STRONG></FONT> <FONT class=java-reserved_word><STRONG>static</STRONG></FONT> LinkedList<Message> messages = <FONT class=java-reserved_word><STRONG>new</STRONG></FONT> LinkedList<Message>();<BR> <BR> <FONT class=java-reserved_word><STRONG>public</STRONG></FONT> List addMessage(String text) <FONT class=java-bracket>{</FONT><BR> <FONT class=java-reserved_word><STRONG>if</STRONG></FONT> (text != <FONT class=java-reserved_word><STRONG>null</STRONG></FONT> && text.trim().length() > 0) <FONT class=java-bracket>{</FONT><BR> messages.addFirst(<FONT class=java-reserved_word><STRONG>new</STRONG></FONT> Message(text));<BR> <FONT class=java-reserved_word><STRONG>while</STRONG></FONT> (messages.size() > 10) <FONT class=java-bracket>{</FONT><BR> messages.removeLast();<BR> <FONT class=java-bracket>}</FONT><BR> <FONT class=java-bracket>}</FONT><BR> <BR> <FONT class=java-reserved_word><STRONG>return</STRONG></FONT> messages;<BR> <FONT class=java-bracket>}</FONT><BR> <BR> <FONT class=java-reserved_word><STRONG>public</STRONG></FONT> List getMessages() <FONT class=java-bracket>{</FONT><BR> <FONT class=java-reserved_word><STRONG>return</STRONG></FONT> messages;<BR> <FONT class=java-bracket>}</FONT><BR><FONT class=java-bracket>}</FONT> </PRE></TD></TR></TBODY></TABLE><BR><BR>接著…在dwr.xml中開放一下…
<BR>
<TABLE class=java cellSpacing=1 cellPadding=3 bgColor=#999999 border=0>
<TBODY>
<TR>
<TD vAlign=top align=left width=1 bgColor=#dddddd><PRE><FONT color=#555555>1<BR>2<BR>3<BR>4<BR>5<BR>6<BR>7<BR>8<BR>9<BR>10<BR>11<BR>12<BR>13<BR></FONT></PRE></TD>
<TD vAlign=top align=left bgColor=#ffffff><PRE><?xml version=<FONT class=java-string>"1.0"</FONT> encoding=<FONT class=java-string>"UTF-8"</FONT>?><BR><!DOCTYPE dwr PUBLIC <FONT class=java-string>"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"</FONT> <FONT class=java-string>"http://www.getahead.ltd.uk/dwr/dwr10.dtd"</FONT>><BR> <BR><dwr><BR> <allow><BR> <BR> <create creator=<FONT class=java-string>"new"</FONT> javascript=<FONT class=java-string>"Chat"</FONT>><BR> <param name=<FONT class=java-string>"class"</FONT> value=<FONT class=java-string>"onlyfun.caterpillar.Chat"</FONT>/><BR> </create><BR> <BR> <convert converter=<FONT class=java-string>"bean"</FONT> match=<FONT class=java-string>"onlyfun.caterpillar.Message"</FONT>/> <BR> </allow><BR></dwr><BR></PRE></TD></TR></TBODY></TABLE><BR><BR>使用者取得訊息時,是直接傳回List物件,而List中裝的是Message物件,Message物件是自訂物件,conterver設定為
bean,表示DWR會自動將Message的getter名稱轉換為傳回客戶端的JavaScript物件中的屬性,例如Message中有
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -