<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>