AJAX and DWR<br />a little introduce to<br />By SweNz<br />swenz@live.it<br />
1<br />Introduce to AJAX<br />2<br />Introduce to DWR<br />focus on Reverse AJAX<br />3<br />Contents<br />
What is AJAX ?<br />AJAX is ..<br />AJAX : Asynchronous JavaScript and XML<br />Asynchronous<br />JavaScript<br />AJAX was...
Defining AJAX<br />dynamic display and interaction using the Document Object Model (DOM)<br />Standards - based presentati...
uninterrupted<br />user operation while data is being fetched<br />display and interact with the information presented<br ...
Still<br />browser incompatibility<br />is hard to maintain and debug<br />JavaScript<br />make<br />AJAX Disadvantage<br />
Compare classic and AJAX web application model<br />
XMLHttpRequest<br />
Creating XMLHttpRequest<br />native JavaScriptObject (Other Browsers)<br />varxhr;<br />function createXMLHttpRequest() {<...
Use XMLHttpRequest<br />function run() {  varreq = createXMLHttpRequest(); //สร้าง Object  req.open(&apos;GET&apos;, ‘abc....
About readyState property<br />
Standard XMLHttpRequest Operation<br />
Standard XMLHttpRequest Properties<br />
Processing the Server Response<br />XMLHttpRequest object provides two properties that provide access to the server respon...
implement basic AJAX<br />Entering an invalid date<br />Entering an valid date<br />
17<br />Date Validation<br />Create validation.jsp page<br />&lt;body&gt;<br />    &lt;h1&gt;Ajax Validation Example&lt;/h...
18<br />Date Validation<br />Create XMLHttpRequest object<br />var xmlHttp;<br />function createXMLHttpRequest(){<br />if ...
19<br />Date Validation<br />Create validate() method <br />function validate() {<br />createXMLHttpRequest();<br />      ...
20<br />Date Validation<br />Create callback() method<br />function callback(){<br />            if (xmlHttp.readyState== ...
Date Validation<br />Set output ‘s format for display in jsp page<br />function setMessage(message, isValid) {<br />varmes...
Date Validation<br />Create servlet to validate date from jsp page<br />PrintWriter out = response.getWriter();<br />     ...
Date Validation<br />private booleanvalidateDate(String date) {<br />booleanisValid = true;<br />        if(date != null) ...
DWR ( Direct web Remoting)<br />DWR is a RPC library which makes it easy to call Java functions from JavaScript and to cal...
DWR consist ..<br />	DWR consists of two main parts<br />A Java Servlet running on the server that processes requests and ...
How it work ? (1)<br />AJAX Style<br />
How it work ? (2)<br />Reverse  AJAX<br />
Prepare to use DWR<br />1&gt; We have to download and install DWR.jar to <br />	WEB-INF/libalso requires commons-logging.<...
web.xml<br />The &lt;servlet&gt; section needs to go with the other &lt;servlet&gt; sections, <br />and likewise with the ...
dwr.xml<br />The &lt;servlet&gt; section needs to go with the other &lt;servlet&gt; sections, <br />and likewise with the ...
if everything ok ..<br /> start your web server such as Tomcat<br /> then open URL :  [YOUR-WEBAPP]/dwr/ <br /> e.g. : htt...
get JavaScript code<br />DWR will generate JavaScript file for knew JAVA class , you can see by click on class name<br />	...
ServiceEmployee.java (1)<br />package com.dwr.service;<br />import com.dwr.bean.EmployeeBean;<br />import java.sql.*;<br /...
ServiceEmployee.java (2)<br />Class.forName(&quot;sun.jdbc.odbc.JdbcOdbcDriver&quot;).newInstance();<br />               C...
EmployeeBean.java<br />package com.dwr.bean;<br />public class EmployeeBean{<br />  private String id;<br />  private Stri...
Test DWR (1)<br />Create employee.jsp like this :<br />&lt;script type=&apos;text/javascript&apos; src=&apos;dwr/interface...
Test DWR (2)<br />&lt;BODY&gt;<br />&lt;h1&gt;Employee Service&lt;/h1&gt;<br />&lt;table&gt;<br />	&lt;tr&gt;<br />	&lt;td...
Result :<br />
RESTRICTION<br />DWR has a few restrictions <br />Avoid reserved JavaScript words<br />Methods named after reserved words ...
What is Reverse AJAX<br />	“Reverse Ajax is the biggest new feature in DWR 2.0. <br />	It gives you the ability to asynchr...
Polling<br />This is where the browser makes a request of the server at regular and frequent intervals, say every 3 second...
Comet AKA long lived http, server push<br />allows the server to start answering the browser&apos;s request for informatio...
Piggyback ( Passive Mode)<br />	the server, having an update to send, waits for the next time the browser makes a connecti...
Active and Passive Reverse Ajax<br />DWR can be configured to use Comet/Polling for times when extra load is acceptable, b...
Configuring Active Reverse Ajax<br />	Active Reverse Ajax <br />	can be broken down into 3 modes:<br />Full Streaming Mode...
Full Streaming Mode<br />This is the default mode when Active Reverse Ajax is turned on (before 2.0.4 after that using Ear...
Full Streaming Mode (2)<br />WEB-INF/web.xml<br />&lt;servlet&gt; <br />		&lt;servlet-name&gt;dwr-invoker&lt;/servlet-name...
Early Closing Mode<br />	DWR holds connection open as it did in Full Streaming Mode, however it only holds the connection ...
Early Closing Mode<br />&lt;init-param&gt; <br />	&lt;param-name&gt;maxWaitAfterWrite&lt;/param-name&gt; <br />	&lt;param-...
Polling Mode<br />	If it is deemed unwise to hold connections open at all then DWR can use polling mode.<br />
Polling Mode (2)<br />you should specify the PollingServerLoadMonitor as follows:<br />&lt;init-param&gt; <br />&lt;param-...
Q & A <br />&gt; &lt;!!<br />
Reference<br />http://www.adaptivepath.com/ideas/essays/archives/000385.php<br />http://java.sun.com/developer/technicalAr...
Thank You!<br />SweNzFiXed<br />
Upcoming SlideShare
Loading in...5
×

Introduction to AJAX and DWR

4,594

Published on

little introduction to AJAX and DWR

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,594
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
170
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • by the way , I’m Thai not Italian , please e-mail me in english . Thanks for interest
  • Introduction to AJAX and DWR

    1. 1. AJAX and DWR<br />a little introduce to<br />By SweNz<br />swenz@live.it<br />
    2. 2. 1<br />Introduce to AJAX<br />2<br />Introduce to DWR<br />focus on Reverse AJAX<br />3<br />Contents<br />
    3. 3. What is AJAX ?<br />AJAX is ..<br />AJAX : Asynchronous JavaScript and XML<br />Asynchronous<br />JavaScript<br />AJAX was introduced in 18 Feb 2005 by Jesse James Garrett.<br />AJAX<br />And<br />XML<br />Ajax is a technique creating better, faster, and more interactive web applications.<br />
    4. 4. Defining AJAX<br />dynamic display and interaction using the Document Object Model (DOM)<br />Standards - based presentation using XHTML and CSS<br />asynchronous data retrieval using XMLHttpRequest<br />data interchange and manipulation using XML and XSLT<br />JavaScript binding everything together<br />
    5. 5. uninterrupted<br />user operation while data is being fetched<br />display and interact with the information presented<br />dynamically<br />platform or language, and no plug-in required <br />independent<br />AJAX Advantage<br />
    6. 6. Still<br />browser incompatibility<br />is hard to maintain and debug<br />JavaScript<br />make<br />AJAX Disadvantage<br />
    7. 7. Compare classic and AJAX web application model<br />
    8. 8.
    9. 9. XMLHttpRequest<br />
    10. 10. Creating XMLHttpRequest<br />native JavaScriptObject (Other Browsers)<br />varxhr;<br />function createXMLHttpRequest() {<br /> if (window.XMLHttpRequest) {<br />xhr= new XMLHttpRequest();<br /> }<br /> else if (window.ActiveXObject) {<br />xhr= new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);<br /> }<br />else {<br /> alert(&quot;XMLHttpRequest not supported&quot;);    return null;<br />}<br />}<br />ActiveX Object (IE)<br />
    11. 11. Use XMLHttpRequest<br />function run() {  varreq = createXMLHttpRequest(); //สร้าง Object  req.open(&apos;GET&apos;, ‘abc.isp&apos;, true); //กำหนด สถานะการทำงานของ AJAX  req.onreadystatechange = function() { //เหตุการณ์เมื่อมีการตอบกลับ    if (req.readyState == 4) {      if (req.status == 200) { //ได้รับการตอบกลับเรียบร้อย        var data = req.responseText; //ข้อความที่ได้มาจากการทำงานของ abc.jsp        document.getElementById(&quot;content&quot;).innerHTML =<br /> &quot;ข้อความที่ตอบกลับจาก server คือ &quot;+data; //แสดงผล      }    }  };  req.setRequestHeader(&quot;Content-Type&quot;, <br /> &quot;application/x-www-form-urlencoded&quot;); //Header ที่ส่งไป  req.send(null); //ทำการส่ง};<br />
    12. 12. About readyState property<br />
    13. 13. Standard XMLHttpRequest Operation<br />
    14. 14. Standard XMLHttpRequest Properties<br />
    15. 15. Processing the Server Response<br />XMLHttpRequest object provides two properties that provide access to the server response.<br />responseText- provides the response as a string.<br />responseXML - provides the response as an XML object<br />
    16. 16. implement basic AJAX<br />Entering an invalid date<br />Entering an valid date<br />
    17. 17. 17<br />Date Validation<br />Create validation.jsp page<br />&lt;body&gt;<br /> &lt;h1&gt;Ajax Validation Example&lt;/h1&gt;<br /> Birth date: <br /> &lt;input type=&quot;text&quot; size=&quot;10&quot; id=&quot;birthDate&quot; onchange=&quot;validate();&quot;/&gt;<br /> &lt;div id=&quot;dateMessage&quot;&gt;&lt;/div&gt;<br />&lt;/body&gt;<br />
    18. 18. 18<br />Date Validation<br />Create XMLHttpRequest object<br />var xmlHttp;<br />function createXMLHttpRequest(){<br />if (window.ActiveXObject) {<br /> xmlHttp = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);<br /> }<br /> else if (window.XMLHttpRequest) {<br /> xmlHttp = new XMLHttpRequest(); <br /> }<br />}<br />
    19. 19. 19<br />Date Validation<br />Create validate() method <br />function validate() {<br />createXMLHttpRequest();<br /> var date = document.getElementById(&quot;birthDate&quot;);<br /> var url = &quot;${pageContext.request.contextPath}/<br /> ValidationServlet?birthDate=&quot; + escape(date.value);<br /> xmlHttp.open(&quot;GET&quot;, url, true);<br /> xmlHttp.onreadystatechange = callback;<br /> xmlHttp.send(null);<br />}<br />
    20. 20. 20<br />Date Validation<br />Create callback() method<br />function callback(){<br /> if (xmlHttp.readyState== 4) {<br /> if (xmlHttp.status == 200) {<br />varmes= xmlHttp.responseXML.<br />getElementsByTagName(&quot;message&quot;)[0].firstChild.data;<br />varval= xmlHttp.responseXML.<br />getElementsByTagName(&quot;passed&quot;)[0].firstChild.data;<br />setMessage(mes, val);<br /> }<br /> }<br />}<br />
    21. 21. Date Validation<br />Set output ‘s format for display in jsp page<br />function setMessage(message, isValid) {<br />varmessageArea= document.getElementById(&quot;dateMessage&quot;);<br />varfontColor= &quot;red&quot;;<br /> if (isValid== &quot;true&quot;) {<br />fontColor= &quot;green&quot;;<br /> }<br />messageArea.innerHTML= &quot;&lt;font color=&quot; + fontColor+ &quot;&gt;&quot; + message + &quot; &lt;/font&gt;&quot;;<br />}<br />
    22. 22. Date Validation<br />Create servlet to validate date from jsp page<br />PrintWriter out = response.getWriter();<br /> try {<br />boolean passed = validateDate(request.getParameter(&quot;birthDate&quot;));<br /> response.setContentType(&quot;text/xml&quot;);<br /> response.setHeader(&quot;Cache-Control&quot;, &quot;no-cache&quot;);<br /> String message = &quot;You have entered an invalid date.&quot;;<br /> if (passed) {<br /> message = &quot;You have entered a valid date.&quot;;<br /> }<br /> out.println(&quot;&lt;response&gt;&quot;);<br /> out.println(&quot;&lt;passed&gt;&quot; + Boolean.toString(passed) + &quot;&lt;/passed&gt;&quot;);<br /> out.println(&quot;&lt;message&gt;&quot; + message + &quot;&lt;/message&gt;&quot;);<br /> out.println(&quot;&lt;/response&gt;&quot;);<br /> out.close();<br /> } finally { <br /> out.close();<br /> }<br />
    23. 23. Date Validation<br />private booleanvalidateDate(String date) {<br />booleanisValid = true;<br /> if(date != null) {<br />SimpleDateFormat formatter= new <br />SimpleDateFormat(&quot;MM/dd/yyyy&quot;);<br /> try {<br />formatter.parse(date);<br /> } catch (ParseExceptionpe) {<br />System.out.println(pe.toString());<br />isValid = false;<br /> }<br /> } else {<br />isValid = false;<br /> }<br /> return isValid;<br />}<br />
    24. 24. DWR ( Direct web Remoting)<br />DWR is a RPC library which makes it easy to call Java functions from JavaScript and to call JavaScript functions from Java (a.k.a Reverse Ajax).<br />
    25. 25. DWR consist ..<br /> DWR consists of two main parts<br />A Java Servlet running on the server that processes requests and sends responses back to the browser. <br />JavaScript running in the browser that sends requests and can dynamically update the webpage<br />
    26. 26. How it work ? (1)<br />AJAX Style<br />
    27. 27. How it work ? (2)<br />Reverse AJAX<br />
    28. 28. Prepare to use DWR<br />1&gt; We have to download and install DWR.jar to <br /> WEB-INF/libalso requires commons-logging.<br />2&gt; edit the config files in WEB-INF<br /> 2.1&gt; edit web.xml<br /> 2.2&gt; create dwr.xml<br />
    29. 29. web.xml<br />The &lt;servlet&gt; section needs to go with the other &lt;servlet&gt; sections, <br />and likewise with the &lt;servlet-mapping&gt; section.<br />&lt;servlet&gt; <br /> &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; <br /> &lt;display-name&gt;DWR Servlet&lt;/display-name&gt; <br /> &lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;/servlet-class&gt; <br /> &lt;init-param&gt; <br /> &lt;param-name&gt;debug&lt;/param-name&gt; <br /> &lt;param-value&gt;true&lt;/param-value&gt; <br /> &lt;/init-param&gt; <br />&lt;/servlet&gt; <br />&lt;servlet-mapping&gt; <br /> &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; <br /> &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt; <br />&lt;/servlet-mapping&gt; <br />
    30. 30. dwr.xml<br />The &lt;servlet&gt; section needs to go with the other &lt;servlet&gt; sections, <br />and likewise with the &lt;servlet-mapping&gt; section.<br />&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br />&lt;!DOCTYPE dwr PUBLIC &quot;-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN“ &quot;http://getahead.org/dwr/dwr30.dtd&quot;&gt;<br />&lt;dwr&gt;<br /> &lt;allow&gt;<br /> &lt;create creator=&quot;new&quot; javascript=&quot;EmployeeService&quot;&gt;<br /> &lt;param name=&quot;class&quot; value=&quot;com.dwr.service.EmployeeService&quot;/&gt;<br /> &lt;/create&gt;<br /> &lt;convert converter=&quot;bean&quot; match=&quot;com.dwr.bean.EmployeeBean&quot; /&gt;<br /> &lt;/allow&gt;<br />&lt;/dwr&gt;<br />
    31. 31. if everything ok ..<br /> start your web server such as Tomcat<br /> then open URL : [YOUR-WEBAPP]/dwr/ <br /> e.g. : http://localhost:8084/DwrProject/dwr/<br /> You will got web page like this : <br />
    32. 32. get JavaScript code<br />DWR will generate JavaScript file for knew JAVA class , you can see by click on class name<br /> it’ll redirect you to page like this :<br />You must put code in red circle to webpage that want to call java method.<br />
    33. 33. ServiceEmployee.java (1)<br />package com.dwr.service;<br />import com.dwr.bean.EmployeeBean;<br />import java.sql.*;<br />public class EmployeeService{<br />public EmployeeService() {} <br />public EmployeeBeangetChange(String id){<br />EmployeeBean bean = new EmployeeBean();<br />bean.setId(id);<br />bean.setName(&quot;Not found&quot;);<br />bean.setAddress(&quot;Not found&quot;);<br /> if(id!=null){<br /> try{<br /> String sql = &quot;select * from employee where employeeid like &apos;&quot;+id+&quot;&apos;&quot;;<br />
    34. 34. ServiceEmployee.java (2)<br />Class.forName(&quot;sun.jdbc.odbc.JdbcOdbcDriver&quot;).newInstance();<br /> Connection con = DriverManager.getConnection(&quot;jdbc:odbc:dwrdb&quot;);<br /> Statement stm = con.createStatement();<br />ResultSetrs = stm.executeQuery(sql);<br /> if(rs.next()) {<br />bean.setName(rs.getString(&quot;employeename&quot;));<br />bean.setAddress(rs.getString(&quot;address&quot;));<br /> }<br /> }catch(Exception ex){ ex.printStackTrace(); }<br /> }<br /> return bean;<br /> }<br />}<br />
    35. 35. EmployeeBean.java<br />package com.dwr.bean;<br />public class EmployeeBean{<br /> private String id;<br /> private String name;<br /> private String address;<br /> public EmployeeBean() {<br /> } <br /> public String getId() {<br /> return id;<br /> }<br /> public String getName() {<br /> return name;<br /> }<br /> public String getAddress() {<br /> return address;<br /> }<br />public void setId(String id) {<br /> this.id = id;<br /> }<br /> public void setName(String name) {<br /> this.name = name;<br /> }<br /> public void setAddress(String address) {<br />this.address = address;<br /> } <br />}<br />
    36. 36. Test DWR (1)<br />Create employee.jsp like this :<br />&lt;script type=&apos;text/javascript&apos; src=&apos;dwr/interface/EmployeeService.js&apos;&gt;&lt;/script&gt;<br /> &lt;script type=&apos;text/javascript&apos; src=&apos;dwr/engine.js&apos;&gt;&lt;/script&gt;<br /> &lt;script type=&apos;text/javascript&apos; src=&apos;dwr/util.js&apos;&gt;&lt;/script&gt;<br />&lt;script language=&quot;JavaScript&quot;&gt;<br />function getChange() {<br />EmployeeService.getChange(employeeid.value,loadChange);<br />}<br />function loadChange(data) {<br />EmpField.innerHTML = &quot;ID : &quot;+data.id+&quot;&lt;br&gt;Name : &quot;+data.name+&quot;&lt;br&gt;Address : &quot;+data.address;<br />}<br />&lt;/script&gt;<br />
    37. 37. Test DWR (2)<br />&lt;BODY&gt;<br />&lt;h1&gt;Employee Service&lt;/h1&gt;<br />&lt;table&gt;<br /> &lt;tr&gt;<br /> &lt;td&gt;Employee ID&lt;/td&gt;<br /> &lt;td&gt;&lt;input type=&quot;text&quot; id=&quot;employeeid&quot; <br />onblur=&quot;getChange()&quot; &gt;&lt;/input&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br />&lt;/table&gt;<br />&lt;div id=&quot;EmpField&quot;&gt;&lt;/div&gt;<br />&lt;div id=&quot;LogLayer&quot;&gt;&lt;/div&gt;<br />&lt;/BODY&gt;<br />
    38. 38. Result :<br />
    39. 39. RESTRICTION<br />DWR has a few restrictions <br />Avoid reserved JavaScript words<br />Methods named after reserved words are automatically excluded. Most JavaScript reserved words are also Java reserved words, so you won&apos;t be having a method called &quot;try()&quot; anyway. However the most common gotcha is &quot;delete()&quot;, which has special meaning from JavaScript but not Java <br />Avoid overloaded methods <br />Overloaded methods can be involved in a bit of a lottery as to which gets called<br />
    40. 40. What is Reverse AJAX<br /> “Reverse Ajax is the biggest new feature in DWR 2.0. <br /> It gives you the ability to asynchronously send data from a web-server to a browser”<br /> DWR supports 3 methods of pushing the data from to the browser: Piggyback, Polling and Comet. <br />
    41. 41. Polling<br />This is where the browser makes a request of the server at regular and frequent intervals, say every 3 seconds, to see if there has been an update to the page. It&apos;s like 5 year old in the back of the car shouting &apos;are we there yet?&apos; every few seconds.<br />
    42. 42. Comet AKA long lived http, server push<br />allows the server to start answering the browser&apos;s request for information very slowly, and to continue answering on a schedule dictated by the server. <br />
    43. 43. Piggyback ( Passive Mode)<br /> the server, having an update to send, waits for the next time the browser makes a connection and then sends it&apos;s update along with the response that the browser was expecting.<br />
    44. 44. Active and Passive Reverse Ajax<br />DWR can be configured to use Comet/Polling for times when extra load is acceptable, but faster response times are needed. This mode is called active Reverse Ajax. By default DWR starts with active Reverse Ajax turned off, allowing only the piggyback transfer mechanism.<br />to request active Reverse Ajax in a web page. This begins a Comet/polling cycle. Just call the following as part of the page load event:<br />dwr.engine.setActiveReverseAjax(true); <br />
    45. 45. Configuring Active Reverse Ajax<br /> Active Reverse Ajax <br /> can be broken down into 3 modes:<br />Full Streaming Mode<br />Early Closing Mode<br />Polling Mode<br />
    46. 46. Full Streaming Mode<br />This is the default mode when Active Reverse Ajax is turned on (before 2.0.4 after that using Early Closing). <br /> It has the fastest response characteristics because it closes connections only once every 60 seconds or so to check that the browser is still active<br />
    47. 47. Full Streaming Mode (2)<br />WEB-INF/web.xml<br />&lt;servlet&gt; <br /> &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; <br /> &lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;/servlet-class&gt;<br /> &lt;init-param&gt; &lt;param-name&gt;maxWaitAfterWrite&lt;/param-name&gt; <br /> &lt;param-value&gt;-1&lt;/param-value&gt; <br /> &lt;/init-param&gt; <br /> &lt;/servlet&gt;<br /> You also need to request Active Reverse Ajax from a web page:<br />dwr.engine.setActiveReverseAjax(true); <br />
    48. 48. Early Closing Mode<br /> DWR holds connection open as it did in Full Streaming Mode, however it only holds the connection open for 60 seconds if there is no output to the browser. Once output occurs, DWR pauses for some configurable time before closing the connection, forcing proxies to pass any messages on. <br />
    49. 49. Early Closing Mode<br />&lt;init-param&gt; <br /> &lt;param-name&gt;maxWaitAfterWrite&lt;/param-name&gt; <br /> &lt;param-value&gt;500&lt;/param-value&gt; <br />&lt;/init-param&gt; <br />
    50. 50. Polling Mode<br /> If it is deemed unwise to hold connections open at all then DWR can use polling mode.<br />
    51. 51. Polling Mode (2)<br />you should specify the PollingServerLoadMonitor as follows:<br />&lt;init-param&gt; <br />&lt;param-name&gt;org.directwebremoting.extend.ServerLoadMonitor&lt;/param-name&gt; <br />&lt;param-value&gt;org.directwebremoting.impl.PollingServerLoadMonitor&lt;/param-value&gt; <br />&lt;/init-param&gt;<br />&lt;init-param&gt; <br /> &lt;param-name&gt;disconnectedTime&lt;/param-name&gt; <br /> &lt;param-value&gt;60000&lt;/param-value&gt;<br />&lt;/init-param&gt; <br />
    52. 52. Q & A <br />&gt; &lt;!!<br />
    53. 53. Reference<br />http://www.adaptivepath.com/ideas/essays/archives/000385.php<br />http://java.sun.com/developer/technicalArticles/J2EE/AJAX/<br />https://developer.mozilla.org/en/AJAX<br />http://www.javaworld.com/javaworld/jw-06-2005/jw-0620-dwr.html<br />http://directwebremoting.org/dwr/reverse-ajax/index.html<br />http://directwebremoting.org/dwr/index.html<br />http://ajaxian.com/archives/reverse-ajax-with-dwr<br />http://en.wikipedia.org/wiki/Reverse_Ajax<br />http://en.wikipedia.org/wiki/Ajax_(programming)<br />http://www.adaptivepath.com/ideas/essays/archives/000385.php<br />http://msdn.microsoft.com/en-us/library/ms534361(VS.85).aspx<br />
    54. 54. Thank You!<br />SweNzFiXed<br />
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×