DWR(二)基本類和json之間的轉換

<p>使用DWR的框架能夠輕鬆的進行一個類和json之間的轉換。</p> <h2>首先是一個基本的DWR的框架的環境的配置</h2> <p>:web.xml中進行的配置和咱們的struts相似的,我沒有去看過源碼,估計也是一個進行的攔截進行一個操做的過程,無論那麼多,先讓程序跑起來:</p> <h3>web.xml:</h3> <blockquote> <p>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; <br />&lt;web-app xmlns:xsi=&quot;<a href="http://www.w3.org/2001/XMLSchema-instance&quot;">http://www.w3.org/2001/XMLSchema-instance&quot;</a> xmlns=&quot;<a href="http://java.sun.com/xml/ns/javaee&quot;">http://java.sun.com/xml/ns/javaee&quot;</a> xmlns:web=&quot;<a href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot;">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot;</a> xsi:schemaLocation=&quot;<a href="http://java.sun.com/xml/ns/javaee">http://java.sun.com/xml/ns/javaee</a> <a href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot;">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot;</a> version=&quot;2.5&quot;&gt; <br />&#160; &lt;servlet&gt; <br />&#160;&#160;&#160; &lt;display-name&gt;DWR Servlet&lt;/display-name&gt; <br />&#160;&#160;&#160; &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; <br />&#160;&#160;&#160; &lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;/servlet-class&gt; <br />&#160;&#160;&#160; &lt;init-param&gt; <br />&#160;&#160;&#160;&#160;&#160; &lt;param-name&gt;debug&lt;/param-name&gt; <br />&#160;&#160;&#160;&#160;&#160; &lt;param-value&gt;true&lt;/param-value&gt; <br />&#160;&#160;&#160; &lt;/init-param&gt; <br />&#160; &lt;/servlet&gt; <br />&#160; &lt;servlet-mapping&gt; <br />&#160;&#160;&#160; &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; <br />&#160;&#160;&#160; &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt; <br />&#160; &lt;/servlet-mapping&gt; <br />&#160; &lt;welcome-file-list&gt; <br />&#160;&#160;&#160; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt; <br />&#160; &lt;/welcome-file-list&gt; <br />&lt;/web-app&gt;</p> </blockquote> <p>創建一個咱們要進行數據轉換的java類,</p> <h3>User:</h3> <blockquote> <p>package com.fww.po;</p> <p>public class User { <br />&#160;&#160;&#160; private Integer id; <br />&#160;&#160;&#160; private String name; <br />&#160;&#160;&#160; private String phone; <br />&#160;&#160;&#160; public User() { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; super(); <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; public User(Integer id, String name, String phone) { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; super(); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.id = id; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.name = name; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.phone = phone; <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; public Integer getId() { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return id; <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; public void setId(Integer id) { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.id = id; <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; public String getName() { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return name; <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; public void setName(String name) { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.name = name; <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; public String getPhone() { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return phone; <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; public void setPhone(String phone) { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.phone = phone; <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; <br />} <br /></p> </blockquote> <p>配合咱們的測試出現的一個</p> <h3>Test類:</h3> <blockquote> <p>package com.fww.service;</p> <p>import java.util.ArrayList; <br />import java.util.List;</p> <p>import com.fww.po.User;</p> <p>public class Test { <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; public Test() { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; // TODO Auto-generated constructor stub <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println(&quot;test 的初始化的操做!&quot;); <br />&#160;&#160;&#160; }</p> <p>&#160;&#160;&#160; public int add(int a,int b){ <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println(a+b); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return a+b; <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; public User findById(Integer id){ <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; User user = new User(id,&quot;fuweiwei&quot;,&quot;1234&quot;); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return user; <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; public List&lt;User&gt; findAll(){ <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; List&lt;User&gt; users = new ArrayList&lt;User&gt;(); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; for (int i = 0; i &lt; 5; i++) { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; users.add(new User(i,&quot;fuweiwei&quot;+i,&quot;123&quot;+i)); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; } <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return users; <br />&#160;&#160;&#160; } <br />} <br /></p> </blockquote> <h3>配置咱們的dwr.xml:</h3> <blockquote> <p>&lt;!DOCTYPE dwr PUBLIC <br />&#160;&#160;&#160; &quot;-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN&quot; <br />&#160;&#160;&#160; &quot;<a href="http://getahead.org/dwr/dwr30.dtd&quot;">http://getahead.org/dwr/dwr30.dtd&quot;</a>&gt;</p> <p>&lt;dwr&gt; <br />&lt;!-- allow表示中間的這些類是要進行暴漏的類,把他們先是給咱們的js --&gt; <br />&#160; &lt;allow&gt; <br />&#160; <br />&#160; &lt;!-- creator使用來指定哪種生成方式的,DWR默認的是由幾種創造奇蹟的 <br />&#160; new:用java的new的關鍵字進行的對象的建立 <br />&#160; none:它不進行對象的建立 <br />&#160; scripted:經過BSf使用的腳本語言進行的對象的建立,如BeanShell <br />&#160; spring:是全部的是spring的框架進行的bean的訪問 <br />&#160; jsf:使用的jsf的bean <br />&#160; struts;使用的是struts的formbean(struts1) <br />&#160;&#160;&#160;&#160;&#160; 等--&gt; <br />&#160; &lt;!-- javascript:表示的是在指定的瀏覽器中被建立出來之後的名字 --&gt; <br />&#160; &lt;!-- 在這裏也能夠指定一個範圍,使用的是scope:數值有page\request\session\application --&gt; <br />&#160;&#160;&#160; &lt;create creator=&quot;new&quot; javascript=&quot;test&quot;&gt; <br />&#160;&#160;&#160; &lt;!-- param表示的是指定的創造奇建立出來的其餘的參數, --&gt; <br />&#160;&#160;&#160;&#160;&#160; &lt;param name=&quot;class&quot; value=&quot;com.fww.service.Test&quot;/&gt; <br />&#160;&#160;&#160;&#160;&#160; &lt;!-- 能夠在create中進行一個include和exclude的子節點的配置,表示的意思是其中的方法被包含或者是不被包含 --&gt; <br />&#160;&#160;&#160; &lt;/create&gt; <br />&#160;&#160;&#160; &lt;convert converter=&quot;bean&quot; match = &quot;com.fww.po.User&quot;/&gt; <br />&#160; &lt;/allow&gt; <br />&lt;/dwr&gt;</p> </blockquote> <p>&#160;</p> <p>能夠在咱們的項目進行啓動以後,去咱們的項目下的/dwr/*查看咱們的配置是否是準確,咱們須要的js是否能夠正確的生成:</p> <p>在咱們的jsp頁面進行導入操做:</p> <h3>個人jsp:</h3> <blockquote> <p>&lt;%@ page language=&quot;java&quot; import=&quot;java.util.*&quot; pageEncoding=&quot;UTF-8&quot;%&gt; <br />&lt;% <br />String path = request.getContextPath(); <br />String basePath = request.getScheme()+&quot;://&quot;+request.getServerName()+&quot;:&quot;+request.getServerPort()+path+&quot;/&quot;; <br />%&gt; <br />&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt; <br />&lt;html&gt; <br />&#160; &lt;head&gt; <br />&#160;&#160;&#160; &lt;title&gt;My JSP 'index.jsp' starting page&lt;/title&gt; <br />&#160;&#160;&#160; &lt;script type='text/javascript' src='/dwr_002/dwr/interface/test.js'&gt;&lt;/script&gt; <br />&#160; &lt;script type='text/javascript' src='/dwr_002/dwr/engine.js'&gt;&lt;/script&gt; <br />&#160; &lt;script type=&quot;text/javascript&quot;&gt; <br />&#160; var mm = document.getElementById(&quot;divid&quot;); <br />&#160;&#160;&#160;&#160;&#160; function fun(){ <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; test.add(1,2,function(result){ <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; mm.innerHTML = result; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }); <br />&#160;&#160;&#160;&#160;&#160; } <br />&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160; function fun2(){ <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; test.findById(1,function(user){ <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; document.getElementById(&quot;divid&quot;).innerHTML = user.name; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }); <br />&#160;&#160;&#160;&#160;&#160; } <br />&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160; function fun3(){ <br />&#160;&#160;&#160;&#160;&#160; var mm = document.getElementById(&quot;divid&quot;); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; test.findAll(function(list){ <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(var i=0;i&lt;list.length;i++){ <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; mm.innerHTML += &quot;&lt;br&gt;&lt;div&gt;&quot;+list[i].name+&quot;&lt;/div&gt;&quot;; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; } <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }); <br />&#160;&#160;&#160;&#160;&#160; } <br />&#160; &lt;/script&gt; <br />&#160; &lt;/head&gt; <br />&#160; <br />&#160; &lt;body&gt; <br />&#160;&#160;&#160; &lt;input id=&quot;testid&quot;&gt;&lt;br&gt; <br />&#160;&#160;&#160; &lt;input type=&quot;button&quot; onclick=&quot;fun3();&quot; value=&quot;點擊我進行一個測試&quot;/&gt;&lt;br&gt; <br />&#160;&#160;&#160; &lt;hr&gt; <br />&#160;&#160;&#160; &lt;div id=&quot;divid&quot;&gt;&lt;/div&gt; <br />&#160; &lt;/body&gt; <br />&lt;/html&gt; <br /></p> </blockquote> <p>這個jsp中提供了三個能夠操做的方法,千萬不要忘記咱們的js的導入的操做,不然咱們進行的全部的操做,在最後的時候咱們沒有去使用。在jsp中三個方法,其中第一個實現的是在div中顯示json轉會來以後的字符串,第二個方法是檢測json的轉換,第三個測試的是一個list的形式的json。</p>javascript

相關文章
相關標籤/搜索