📄 dwr 入門與應用(三) - 林信良(良葛格)的专栏 - csdnblog.htm
字号:
google_ad_type = "text_image";google_ad_channel = "";//--></SCRIPT>
<SCRIPT src="DWR 入門與應用(三) - 林信良(良葛格)的专栏 - CSDNBlog.files/show_ads.js"
type=text/javascript></SCRIPT>
</CENTER><A title=用狗狗订阅
href="http://www.gougou.com/sub/http://blog.csdn.net/caterpillar_here/rss.aspx"
target=_blank><IMG
src="DWR 入門與應用(三) - 林信良(良葛格)的专栏 - CSDNBlog.files/71BECA09AC1D86E81DCF45BABAC3536DDF268EA1.png"
border=0></A>
<H3 class=listtitle>文章</H3>
<UL class=list>
<LI class=listitem><A
href="http://blog.csdn.net/caterpillar_here/category/279207.aspx">Ajax</A><A
href="http://blog.csdn.net/caterpillar_here/category/279207.aspx/rss">(RSS)</A>
<LI class=listitem><A
href="http://blog.csdn.net/caterpillar_here/category/204361.aspx">Java</A><A
href="http://blog.csdn.net/caterpillar_here/category/204361.aspx/rss">(RSS)</A>
<LI class=listitem><A
href="http://blog.csdn.net/caterpillar_here/category/207054.aspx">Study</A><A
href="http://blog.csdn.net/caterpillar_here/category/207054.aspx/rss">(RSS)</A></LI></UL>
<H3 class=listtitle>收藏</H3>
<UL class=list></UL>
<H3 class=listtitle>相册</H3><!--category title-->
<UL class=list></UL>
<H3 class=listtitle>Java</H3>
<UL class=list>
<LI class=listitem><A href="http://blog.csdn.net/nuke" target=_self>夏昕的专栏</A>
<LI class=listitem><A href="http://caterpillar.onlyfun.net/Gossip/"
target=_self>良葛格学习笔记</A></LI></UL>
<H3 class=listtitle>存档</H3>
<UL class=list>
<LI><A
href="http://blog.csdn.net/caterpillar_here/archive/2007/02.aspx">2007年02月(5)</A>
<LI><A
href="http://blog.csdn.net/caterpillar_here/archive/2006/12.aspx">2006年12月(1)</A>
<LI><A
href="http://blog.csdn.net/caterpillar_here/archive/2006/11.aspx">2006年11月(1)</A>
<LI><A
href="http://blog.csdn.net/caterpillar_here/archive/2006/09.aspx">2006年09月(4)</A>
<LI><A
href="http://blog.csdn.net/caterpillar_here/archive/2006/08.aspx">2006年08月(2)</A>
<LI><A
href="http://blog.csdn.net/caterpillar_here/archive/2006/07.aspx">2006年07月(5)</A>
<LI><A
href="http://blog.csdn.net/caterpillar_here/archive/2006/06.aspx">2006年06月(5)</A>
<LI><A
href="http://blog.csdn.net/caterpillar_here/archive/2006/05.aspx">2006年05月(5)</A></LI></UL><SPAN
id=Anthem_RecentComments_ltlComments__><SPAN id=RecentComments_ltlComments>
<H3 class=listtitle>最近评论</H3>
<UL class=list>
<LI class=listitem>DL88250:<A title=点击查看《回复:连csdn.net终於快一些了…》
href="http://blog.csdn.net/caterpillar_here/archive/2007/02/08/1505773.aspx#540473">呵呵,是啊。。。。快不少呢!</A>
<LI class=listitem>yuyebuguijia:<A title=点击查看《回复:连csdn.net终於快一些了…》
href="http://blog.csdn.net/caterpillar_here/archive/2007/02/08/1505773.aspx#540258">同感.</A>
<LI class=listitem>aldreamlau:<A title=点击查看《回复:我只是一个小讲师、小作者。。。》
href="http://blog.csdn.net/caterpillar_here/archive/2006/07/23/965773.aspx#532636">不知道良葛格老师你会不会不适应大陆这边的事情,开骂和人身攻击的太多了,会有点压抑。<BR></A>
<LI class=listitem>wei121363:<A title="点击查看《回复:[影音教學]Java SE 6從安裝到API查詢》"
href="http://blog.csdn.net/caterpillar_here/archive/2006/12/19/1449110.aspx#529777">请问林老师,在您的书中p71写到:<BR>public
class SpringDemo{<BR>public static void main(String
args[])<BR>ApplicationContext context=new
ClassPathXmlApplicationContext("beans-config.xml");<BR>context.publ……</A>
<LI class=listitem>zhanming666:<A title=点击查看《回复:我只是一个小讲师、小作者。。。》
href="http://blog.csdn.net/caterpillar_here/archive/2006/07/23/965773.aspx#529087">非常感谢林老师,我认真的看了你的java学习笔记,合到一起只用了不到一天的时间,虽然有一些没完全悟透.但基本的知识点没有问题了.感谢你帮我节约了时间,祝你在2007年再创事业佳绩,多写点这样让人共呜的笔记(书籍).</A></LI></UL></SPAN></SPAN><BR><BR></DIV>
<DIV id=main>
<DIV class=Tag>
<SCRIPT language=javascript
src="DWR 入門與應用(三) - 林信良(良葛格)的专栏 - CSDNBlog.files/urltag.aspx"></SCRIPT>
<DIV style="CLEAR: both"></DIV></DIV>
<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>
<DIV class=post>
<DIV class=postTitle><A
href="http://blog.csdn.net/caterpillar_here/archive/2006/09/30/1311605.aspx"><IMG
height=13 src="DWR 入門與應用(三) - 林信良(良葛格)的专栏 - CSDNBlog.files/authorship.gif"
width=15 border=0> DWR 入門與應用(三)</A> </DIV>
<DIV class=postText><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中有
getText(),則在客戶端可以用message.text這樣的方式來存取。 <BR><BR>接著是簡單的客戶端網頁… <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></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>Insert title here</title><BR> <BR><script src=<FONT class=java-string>"dwr/interface/Chat.js"</FONT> type=<FONT class=java-string>"text/javascript"</FONT>></script><BR><script src=<FONT class=java-string>"dwr/engine.js"</FONT> type=<FONT class=java-string>"text/javascript"</FONT>></script><BR><script src=<FONT class=java-string>"dwr/util.js"</FONT> type=<FONT class=java-string>"text/javascript"</FONT>></script><BR> <BR><script type=<FONT class=java-string>"text/javascript"</FONT>><BR>function sendMessage() <FONT class=java-bracket>{</FONT><BR> var text = DWRUtil.getValue(<FONT class=java-string>"text"</FONT>);<BR> DWRUtil.setValue(<FONT class=java-string>"text"</FONT>, <FONT class=java-string>""</FONT>);<BR> Chat.addMessage(text, gotMessages);<BR><FONT class=java-bracket>}</FONT><BR> <BR>function gotMessages(messages) <FONT class=java-bracket>{</FONT><BR> var chatlog = <FONT class=java-string>""</FONT>;<BR> <FONT class=java-reserved_word><STRONG>for</STRONG></FONT> (var data in messages) <FONT class=java-bracket>{</FONT><BR> chatlog = <FONT class=java-string>"<div>"</FONT> + messages[data].text +<BR> <FONT class=java-string>"</div>"</FONT> + chatlog;<BR> <FONT class=java-bracket>}</FONT><BR> DWRUtil.setValue(<FONT class=java-string>"chatlog"</FONT>, chatlog);<BR> setTimeout(<FONT class=java-string>"queryMessage()"</FONT>, 2000);<BR><FONT class=java-bracket>}</FONT><BR> <BR>function queryMessage() <FONT class=java-bracket>{</FONT><BR> Chat.getMessages(gotMessages);<BR><FONT class=java-bracket>}</FONT><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><div id=<FONT class=java-string>"chatlog"</FONT>></div><BR> <BR></body><BR></html><BR></PRE></TD></TR></TBODY></TABLE><BR><BR>當List物件傳回時,它成為gotMessages(messages)中的messages物件,而messages物件中包括
Message物件轉換後對應的JavaScript物件,由於我們已經設定了Converter,所以可以用messages[data].text來
取得傳回的訊息… <BR><BR>簡單抓個畫面… </SPAN><BR><IMG alt=""
src="DWR 入門與應用(三) - 林信良(良葛格)的专栏 - CSDNBlog.files/2.jpg"><BR><BR>
<P id=TBPingURL>Trackback:
http://tb.blog.csdn.net/TrackBack.aspx?PostId=1311605</P><BR></DIV>
<DIV class=postFoot>
<SCRIPT src=""></SCRIPT>
[<A 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),'keyit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();">收藏到我的网摘</A>]
良葛格发表于 2006年09月30日 13:41:00 </DIV></DIV><LINK
href="http://blog.csdn.net/caterpillar_here/Services/Pingback.aspx"
rel=pingback><!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"><rdf:Descriptionrdf:about="http://blog.csdn.net/caterpillar_here/archive/2006/09/30/1311605.aspx"dc:identifier="http://blog.csdn.net/caterpillar_here/archive/2006/09/30/1311605.aspx"dc:title="DWR 入門與應用(三)"trackback:ping="http://tb.blog.csdn.net/TrackBack.aspx?PostId=1311605" /></rdf:RDF>-->
<SCRIPT>function hide(){showComment();}</SCRIPT>
<BR>
<DIV class=post>
<DIV class=postTitle>相关文章:</DIV>
<UL class=postText>
<LI><A href="http://blog.csdn.net/anson2003/archive/2006/06/13/795223.aspx"
target=_blank>DWR1.0(AJAX)入门</A> 2006-06-13 <A
href="http://blog.csdn.net/anson2003/" target=_blank>anson2003</A>
<LI><A href="http://blog.csdn.net/lannos/archive/2005/02/03/279704.aspx"
target=_blank>使用ActionForm類別 </A>2005-02-03 <A
href="http://blog.csdn.net/lannos/" target=_blank>lannos</A>
<LI><A href="http://blog.csdn.net/lyj_china/archive/2006/06/29/849537.aspx"
target=_blank>JSF最佳入门</A> 2006-06-29 <A href="http://blog.csdn.net/lyj_china/"
target=_blank>lyj_china</A>
<LI><A href="http://blog.csdn.net/lannos/archive/2005/02/04/280079.aspx"
target=_blank>ActionError與ActionMessage </A>2005-02-04 <A
href="http://blog.csdn.net/lannos/" target=_blank>lannos</A>
<LI><A href="http://blog.csdn.net/cs828/archive/2005/12/28/563955.aspx"
target=_blank>迭代器(Iterator)(收录)</A> 2005-12-28 <A
href="http://blog.csdn.net/cs828/"
target=_blank>cs828</A></LI></UL></DIV><BR><BR>
<DIV class=post id=csdn_zhaig_ad_yahoo></DIV><SPAN
id=Anthem_Comments.ascx_ltlComments__><SPAN id=Comments.ascx_ltlComments><BR>
<DIV id=comments>
<H3></H3>
<DIV class=post>
<DIV class=postTitle><A title="permalink: 回复:DWR 入門與應用(三)"
href="http://blog.csdn.net/caterpillar_here/archive/2006/09/30/1311605.aspx#499660">#</A> <A
name=499660> </A>cyh 发表于2006-10-01 21:54:00 IP:
221.221.242.*</DIV>
<DIV class=postText>支持,希望林老师继续写下去。期待!!!!!</DIV></DIV><BR>
<DIV class=post>
<DIV class=postTitle><A title="permalink: 回复:DWR 入門與應用(三)"
href="http://blog.csdn.net/caterpillar_here/archive/2006/09/30/1311605.aspx#499783">#</A> <A
name=499783> </A>Ming 发表于2006-10-02 08:42:00 IP:
218.16.196.*</DIV>
<DIV class=postText>这篇文章比前两篇难度高了不少,值得学习,谢谢老师!</DIV></DIV><BR>
<DIV class=post>
<DIV class=postTitle><A title="permalink: 回复:DWR 入門與應用(三)"
href="http://blog.csdn.net/caterpillar_here/archive/2006/09/30/1311605.aspx#499961">#</A> <A
name=499961> </A>邱方纯 发表于2006-10-03 19:08:00 IP:
221.12.59.*</DIV>
<DIV class=postText>这篇文章写的好,比前面的难度提高了很多,在实际应用中也很不错, <BR>老师,继续阿 <BR><BR>我们期盼着呢
<BR><BR></DIV></DIV><BR>
<DIV class=post>
<DIV class=postTitle><A title="permalink: 回复:DWR 入門與應用(三)"
href="http://blog.csdn.net/caterpillar_here/archive/2006/09/30/1311605.aspx#500128">#</A> <A
name=500128> </A><A href="http://blog.163.com./junhuang" target=_blank
rel=nofollow>JUN HUANG</A> 发表于2006-10-04 19:33:00 IP:
218.79.200.*</DIV>
<DIV class=postText>我还是个菜鸟,看了深有感触.受益非浅.</DIV></DIV><BR>
<DIV class=post>
<DIV class=postTitle><A title="permalink: 回复:DWR 入門與應用(三)"
href="http://blog.csdn.net/caterpillar_here/archive/2006/09/30/1311605.aspx#500137">#</A> <A
name=500137> </A>小蛇 发表于2006-10-05 00:14:00 IP:
125.93.25.*</DIV>
<DIV class=postText>教程也清晰 希望老师能出个DWR相关的书带领带领我们`` <BR><BR>我第一个支持</DIV></DIV><BR>
<DIV class=post>
<DIV class=postTitle><A title="permalink: 回复:DWR 入門與應用(三)"
href="http://blog.csdn.net/caterpillar_here/archive/2006/09/30/1311605.aspx#500933">#</A> <A
name=500933> </A>angin 发表于2006-10-08 20:43:00 IP:
58.50.129.*</DIV>
<DIV class=postText>林老师 <BR>什么时候出关于dwr的书啊? <BR>早点最好! <BR>最好出一本spring Hibernate
dwr的书 <BR>准备去买你的jdk5.0学习笔记</DIV></DIV><BR>
<DIV class=post>
<DIV class=postTitle><A title="permalink: 回复:DWR 入門與應用(三)"
href="http://blog.csdn.net/caterpillar_here/archive/2006/09/30/1311605.aspx#501633">#</A> <A
name=501633> </A>哎, 发表于2006-10-11 09:34:00 IP:
59.61.87.*</DIV>
<DIV class=postText>servlet里面有构造函数,但愿林老师是一时手误.</DIV></DIV><BR>
<DIV class=post>
<DIV class=postTitle><A title="permalink: 回复:DWR 入門與應用(三)"
href="http://blog.csdn.net/caterpillar_here/archive/2006/09/30/1311605.aspx#506444">#</A> <A
name=506444> </A>学到了 发表于2006-10-26 10:36:00 IP:
202.134.114.*</DIV>
<DIV
class=postText>很好,学到东西了,期待林老师继续下去,dwr.xml里还有很多配置,需要您的例程来指导我们去理解!</DIV></DIV><BR>
<DIV class=post>
<DIV class=postTitle><A title="permalink: 回复:DWR 入門與應用(三)"
href="http://blog.csdn.net/caterpillar_here/archive/2006/09/30/1311605.aspx#511177
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -