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