`
L.G.Alexander
  • 浏览: 158397 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

三、DWR配置文件详解与bean转换

阅读更多
DWR配置文件详解与bean转换

1、了解DWR内置配置文件
DWR内置配置文件提供了框架配置所需要的一些内容,框架加载的时候把这些信息加载到框架中。dwr内置配置文件也为dwr.xml,和我们在外面配置的dwr.xml是同一个dtd,但是为什么要内置?因为dwr在加载的时候会去加载这个默认的配置文件,目的是什么?我们先看一下,
<init>
    <creator id="jsf" class="org.directwebremoting.faces.JsfCreator"/>
    <creator id="none" class="org.directwebremoting.create.NullCreator"/>
    <creator id="new" class="org.directwebremoting.create.NewCreator"/>
    <creator id="pageflow" class="org.directwebremoting.beehive.PageFlowCreator"/>
    <creator id="spring" class="org.directwebremoting.spring.SpringCreator"/>
    <creator id="script" class="org.directwebremoting.create.ScriptedCreator"/>
    <creator id="struts" class="org.directwebremoting.struts.StrutsCreator"/>
    <creator id="ejb3" class="org.directwebremoting.create.Ejb3Creator"/>

    <converter id="null" class="org.directwebremoting.convert.NullConverter"/>
    <converter id="enum" class="org.directwebremoting.convert.EnumConverter"/>
    <converter id="primitive" class="org.directwebremoting.convert.PrimitiveConverter"/>
    <converter id="bignumber" class="org.directwebremoting.convert.BigNumberConverter"/>
    <converter id="string" class="org.directwebremoting.convert.StringConverter"/>
    <converter id="array" class="org.directwebremoting.convert.ArrayConverter"/>
    <converter id="map" class="org.directwebremoting.convert.MapConverter"/>
    <converter id="collection" class="org.directwebremoting.convert.CollectionConverter"/>
    <converter id="date" class="org.directwebremoting.convert.DateConverter"/>
    <converter id="dom" class="org.directwebremoting.convert.DOMConverter"/>
    <converter id="dom4j" class="org.directwebremoting.convert.DOM4JConverter"/>
    <converter id="jdom" class="org.directwebremoting.convert.JDOMConverter"/>
    <converter id="xom" class="org.directwebremoting.convert.XOMConverter"/>
    <converter id="servlet" class="org.directwebremoting.convert.ServletConverter"/>
    <converter id="bean" class="org.directwebremoting.convert.BeanConverter"/>
    <converter id="object" class="org.directwebremoting.convert.ObjectConverter"/>
    <converter id="hibernate2" class="org.directwebremoting.hibernate.H2BeanConverter"/>
    <converter id="hibernate3" class="org.directwebremoting.hibernate.H3BeanConverter"/>
    <converter id="url" class="org.directwebremoting.convert.URLConverter"/>
    <converter id="exception" class="org.directwebremoting.convert.ExceptionConverter"/>
    <converter id="miniException" class="org.directwebremoting.convert.MinimalistExceptionConverter"/>
  </init>
它有<init></init>初始化的标签。这个初始化的标签目的就是说在dwr的框架中呢,需要一些转换器生成器,这个转换器生成器说明因为我们需要在客户端调用后台的java业务逻辑,调用这些业务逻辑必须要实例化它,所以dwr为我们提供了很多的生成器,生成器负责生成我们后台的对应的业务逻辑对象的实例。通过这些实例来去调用它们的行为或者说是方法。配置文件中给我们提供了内置的8种生成器,常用的是new生成器,这是基本的创建对象的方式,其它的方式是通过整合其他的框架来生成的。看一下new生成器,一个是id,一个是class。id这个属性指定了它唯一的标识,class指定它对应的类org.directwebremoting.create.NewCreator。
默认配置文件提供了很多转换器,转换器的目的就是前台需要参数传递到后台,参数可以是基本的数据类型,也可以是我们自定义数据类型,也可以是我们其他框架所包装的一些类。这方面dwr做得很好,包括集合类型,jdom等一些指定框架下的对象的转换器都提供了。所以在这个默认的dwr.xml文件中是dwr被默认指定的生成器和转换器。
<converter id="null" class="org.directwebremoting.convert.NullConverter"/>
    <converter id="enum" class="org.directwebremoting.convert.EnumConverter"/>
    <converter id="primitive" class="org.directwebremoting.convert.PrimitiveConverter"/>
    <converter id="bignumber" class="org.directwebremoting.convert.BigNumberConverter"/>
    <converter id="string" class="org.directwebremoting.convert.StringConverter"/>
    <converter id="array" class="org.directwebremoting.convert.ArrayConverter"/>
    <converter id="map" class="org.directwebremoting.convert.MapConverter"/>
    <converter id="collection" class="org.directwebremoting.convert.CollectionConverter"/>
    <converter id="date" class="org.directwebremoting.convert.DateConverter"/>
    <converter id="dom" class="org.directwebremoting.convert.DOMConverter"/>
    <converter id="dom4j" class="org.directwebremoting.convert.DOM4JConverter"/>
    <converter id="jdom" class="org.directwebremoting.convert.JDOMConverter"/>
    <converter id="xom" class="org.directwebremoting.convert.XOMConverter"/>
    <converter id="servlet" class="org.directwebremoting.convert.ServletConverter"/>
    <converter id="bean" class="org.directwebremoting.convert.BeanConverter"/>
    <converter id="object" class="org.directwebremoting.convert.ObjectConverter"/>
    <converter id="hibernate2" class="org.directwebremoting.hibernate.H2BeanConverter"/>
    <converter id="hibernate3" class="org.directwebremoting.hibernate.H3BeanConverter"/>
    <converter id="url" class="org.directwebremoting.convert.URLConverter"/>
    <converter id="exception" class="org.directwebremoting.convert.ExceptionConverter"/>
    <converter id="miniException" class="org.directwebremoting.convert.MinimalistExceptionConverter"/>
转换器converter也有两个属性id和class。id指定转换器是针对哪一种类型的转换,class是指定转换器对应的类。init中为什么要指定生成器和转换器两种?这样理解:是双方向的,这点很重要。前台调用后台的时候,需要参数传递到后台,这种情况需要转换,后台处理完返回给前台或者是bean或者是基本数据类型也需要转换。所以说转换是双方向的,共有的。
dwr的作用就是前台的js可以直接访问后台的业务逻辑。实现前台直接访问后台的效果。后台方法使用前类必须要实例化,所以有creator;然后参数的传递需要转换所以有converter.所以dwr的默认配置文件里的init就是初始化生成器和转换器。注册进来以供后面我们使用。总结出一点,每一种框架都会有自生的配置文件。这也是框架的特性,所有的配置文件都有自身的配置信息。这些配置文件的作用 就是将配置的信息保存到框架有关的类对象中,然后把它们加载到内存里。通过这种方式在开发中就会应用这些配置的信息来完成我们的业务逻辑。所以这里的默认配置文件中的生成器和转换器是框架提供给我们的生成器和转换器。我们要自己实现自己的转换器也是可以的。这就体现了框架的扩展性。框架的目的就是给我们提供了一个平台上的平台。基于平台上的平台,我们可以在它上面开发一些项目。开发项目的时候可以提高开发项目的效率。通过框架给我们提供的规范约束,通过规范约束去扩展它。然后来做我们需要的操作。而不要去管它内部的执行流程。这种执行流程是框架给我们提供好的。没有必要去了解它的细节。开发中可以体现出一种高效率的方式。使用框架时注意一点,实现框架提供的接口,是扩展框架的良好方式。体现了框架的良好扩展性。dwr为我们提供了2个接口,对于creator提供了一个,对于convertor也提供了一个。creator这个接口和convertor这个接口就是为了我们以后扩展使用的。看一下这两个接口creator:
Interface Creator
All Known Implementing Classes: 
AbstractCreator, BeanCreator, Ejb3Creator, GuiceCreator, JsfCreator, NewCreator, NullCreator, PageFlowCreator, ScriptedCreator, SingletonCreator, 

SpringCreator, StrutsCreator 

--------------------------------------------------------------------------------

public interface CreatorA base class for all AllowedClasses 

我们自己如果要扩展,就去实现Creator接口,实现后配置在我们定义的dwr.xml文件中。也是通过init,采用默认dwr.xml文件的配置方式配置。
convertor接口:
Interface Converter
All Known Subinterfaces: 
NamedConverter 
All Known Implementing Classes: 
ArrayConverter, BaseV10Converter, BaseV20Converter, BasicObjectConverter, BeanConverter, BigNumberConverter, CharArrayConverter, 

CollectionConverter, ConstructorConverter, DateConverter, DOM4JConverter, DOMConverter, EnumConverter, ExceptionConverter, H2BeanConverter, 

H3BeanConverter, JDOMConverter, MapConverter, MinimalistExceptionConverter, NullConverter, ObjectConverter, PrimitiveConverter, ServletConverter, 

StringConverter, URLConverter, XOMConverter 

--------------------------------------------------------------------------------

public interface ConverterAn interface for converting types from a string to some other type. 
我们自己如果要扩展,就去实现Converter接口,实现后配置在我们定义的dwr.xml文件中。也是通过init,采用默认dwr.xml文件的配置方式配置。
dwr在初始化的时候,先加载默认的dwr.xml文件,加载完后,加载我们定义的web里面的dwr.xml文件。
下面看一下allow(允许)标签:
dwr中,我想用这个框架,必须允许做什么?inint仅仅是初始化框架中的信息,但是这些转换器生成器能不能在dwr中使用呢?就是在dwr中的allow指定的。如果没有allow,这个框架任何东西都是做不了的。
<allow>
    <convert converter="null" match="void"/>
    <convert converter="null" match="java.lang.Void"/>

    <convert converter="miniException" match="java.lang.Throwable"/>

    <convert converter="primitive" match="boolean"/>
    <convert converter="primitive" match="byte"/>
    <convert converter="primitive" match="short"/>
    <convert converter="primitive" match="int"/>
    <convert converter="primitive" match="long"/>
    <convert converter="primitive" match="float"/>
    <convert converter="primitive" match="double"/>
    <convert converter="primitive" match="char"/>
    <convert converter="primitive" match="java.lang.Boolean"/>
    <convert converter="primitive" match="java.lang.Byte"/>
    <convert converter="primitive" match="java.lang.Short"/>
    <convert converter="primitive" match="java.lang.Integer"/>
    <convert converter="primitive" match="java.lang.Long"/>
    <convert converter="primitive" match="java.lang.Float"/>
    <convert converter="primitive" match="java.lang.Double"/>
    <convert converter="primitive" match="java.lang.Character"/>

    <convert converter="bignumber" match="java.math.BigInteger"/>
    <convert converter="bignumber" match="java.math.BigDecimal"/>

    <convert converter="string" match="java.lang.String"/>
    <convert converter="date" match="java.util.Date"/>
    <convert converter="date" match="java.sql.Date"/>
    <convert converter="date" match="java.sql.Time"/>
    <convert converter="date" match="java.sql.Timestamp"/>
    <convert converter="date" match="java.util.Calendar"/>
    <convert converter="url" match="java.net.URL"/>

    <convert converter="array" match="[Z"/>
    <convert converter="array" match="[B"/>
    <convert converter="array" match="[S"/>
    <convert converter="array" match="[I"/>
    <convert converter="array" match="[J"/>
    <convert converter="array" match="[F"/>
    <convert converter="array" match="[D"/>
    <convert converter="array" match="[C"/>
    <convert converter="array" match="[L*"/>

    <!--
    The catch for the next 2 is that we really mean java.util.Collection<String>
    and java.util.Map<String, String> but we need to do more work before this
    syntax is enabled
    -->
    <convert converter="collection" match="java.util.Collection"/>
    <convert converter="map" match="java.util.Map"/>

    <convert converter="dom" match="org.w3c.dom.Node"/>
    <convert converter="dom" match="org.w3c.dom.Element"/>
    <convert converter="dom" match="org.w3c.dom.Document"/>
    <convert converter="dom4j" match="org.dom4j.Document"/>
    <convert converter="dom4j" match="org.dom4j.Element"/>
    <convert converter="dom4j" match="org.dom4j.Node"/>
    <convert converter="jdom" match="org.jdom.Document"/>
    <convert converter="jdom" match="org.jdom.Element"/>
    <convert converter="xom" match="nu.xom.Document"/>
    <convert converter="xom" match="nu.xom.Element"/>
    <convert converter="xom" match="nu.xom.Node"/>

    <convert converter="servlet" match="javax.servlet.ServletConfig"/>
    <convert converter="servlet" match="javax.servlet.ServletContext"/>
    <convert converter="servlet" match="javax.servlet.http.HttpServletRequest"/>
    <convert converter="servlet" match="javax.servlet.http.HttpServletResponse"/>
    <convert converter="servlet" match="javax.servlet.http.HttpSession"/>

  </allow>
allow提供了很多,convert转换,converter转换器是通过inint里指定的id来提供的。举例: <convert converter="null" match="void"/>里面的converter对应init里面id为null的converter.match匹配的是void,说明函数的返回值是void.其他的也为我们提供了各种的转换。

2、了解WEB应用中的dwr.xml文件和DWR中BEAN转换
WEB应用中的dwr.xml文件也就是我们在所建项目中创建的dwr.xml文件。现在先创建一个项目DWRBEAN:
创建后首先做的是把dwr.xml和它所需要的jar包放进去。
转换是双向的,前台传递参数到后台要转换,后台传到前台也要转换。前台可以用new的方式,在javascript总结里面讲过,这样就可以传递到后台,生成我们所需要的javabean。这种javabean处理完之后返回我们所需要的结果。现在仅仅要完成的功能是前台传递一个类似javabean的对象,然后通过转换器传递到后台的javabean,然后javabean处理后返回这个处理后的javabean给前台。前台获得后显示出结果。
javabean:
package com.lukuijun.bean;
public class User {
	private String userName;
	private String password;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}
业务逻辑:
package com.lukuijun.bean;
public class UserLogic {
	public User alterUser(User user){
		user.setUserName("lukuijun");
		user.setPassword("lukuijun");
		return user;
	}
}

配置dwr.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd">
<dwr>
    <allow>
        <create creator="new" javascript="UserLogic"> <!-- javascript指定前台用的是UserLogic,产生UserLogic.js文件 -->
            <param name="class" value="com.lukuijun.UserLogic"/><!-- name指定类,value指定哪个类来生成 -->
            <include method="alterUser"/><!-- include表示在这个类中我允许那些方法暴露给客户端,允许客户端调用,注意一点,用了include就不能用

exclude,它们是互斥的。 -->
        </create>
        <convert match="com.lukuijun.bean.User" converter="bean"><!-- converter转换器用bean,match匹配返回类型com.lukuijun.bean.User -->
            <param name="include" value="userName,password"></param><!-- name指定属性,value指定属性的值,这里是包含属性,值userName,password可以

使用 -->
        </convert>
    </allow>
</dwr>
配置web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
      <servlet-name>dwr</servlet-name>
      <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>dwr</servlet-name>
      <url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
index.html页面:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	<script type="text/javascript" src="dwr/engine.js"></script>
	<script type="text/javascript" src="dwr/util.js"></script>
	<script type="text/javascript" src="dwr/interface/UserLogic.js"></script>
	<script type="text/javascript">
	    function show(){
	        var userName=$("userName").value;
	        var password=$("password").value;
	        var obj={userName:userName,password:password};
	        UserLogic.alterUser(obj,function(data){
	            $("userName").value=data.userName;
	            $("password").value=data.password;
	        });
	    
	    }
	</script>
  </head>
  
  <body>
    userName:<input id="userName" type="text" value=""/><br>
    password:<input id="password" type="text" value=""/><br>
    <input type="button" value="alter" onclick="show()"/><br>
       
  </body>
</html>
分别输入123,123,点击alter显示lukuijun,lukuijun
这就是javabean的转换。
另一种创建对象的方式:
	<script type="text/javascript">
	    function show(){
	        var userName=$("userName").value;
	        var password=$("password").value;
	        var obj=new objBean(userName,password);
	        UserLogic.alterUser(obj,function(data){
	            $("userName").value=data.userName;
	            $("password").value=data.password;
	        });
	    
	    }
            function objBean(name,password){
                this.name=name;
                this.password=password;
            }
	</script>


分享到:
评论
1 楼 xyang81 2012-07-25  
学习了,讲解得很详细!

相关推荐

    DWR配置文件详解,DWR配置

    **DWR配置文件详解** Direct Web Remoting (DWR) 是一种开源的Java库,它允许Web应用程序在客户端JavaScript和服务器端Java之间进行双向通信。DWR的核心配置文件是`dwr.xml`,该文件定义了DWR允许访问的Java对象、...

    dwr配置文件详解

    在DWR配置文件中,主要分为以下几个部分: 1. **DOCTYPE声明**: 首先,`&lt;!DOCTYPE&gt;`声明指定了DWR的文档类型,这是对DWR版本的引用,确保解析器知道如何解析配置文件。在这个例子中,它引用的是DWR 1.0的DTD...

    DWR配置文件详解

    ### DWR配置文件详解 #### 一、基本概念与术语 在深入了解DWR配置文件之前,我们首先需要明确几个核心概念: 1. **参数转换**(Conversion):DWR能够处理客户端与服务器端的数据交互,这包括将客户端的...

    DWR.xml配置文件说明

    #### 一、DWR配置文件结构与作用 DWR(Direct Web Remoting)是一个开源的Ajax框架,它允许在浏览器端JavaScript代码直接调用服务器端Java方法,从而简化了传统的AJAX编程。DWR.xml是DWR的核心配置文件,用于定义...

    dwr配置文件!开发,培训,学习

    【DWR配置文件详解】 DWR(Direct Web Remoting)是一种强大的AJAX(Asynchronous JavaScript and XML)框架,专门用于Java开发,它允许在Web浏览器中通过JavaScript直接调用后台的Java方法,实现了客户端和服务器...

    Dwr配置详解.doc

    DWR配置详解 DWR(Direct Web Remoting)是一种基于Java的AJAX框架,用于实现Web应用程序的远程方法调用。下面是DWR配置的详细解释: 一、配置环境 1. 导入DWR的依赖jar包,包括dwr.jar和commons-logging.jar。 2...

    DWR配置详解

    在DWR配置中, dwr.xml 文件扮演着核心角色,它负责定义远程Bean的配置信息,包括创造器、参数、范围、身份验证等。 ### 术语 在DWR配置中,有一些重要的术语需要理解: * 参数(Parameter):在DWR中,参数是指...

    DWR笔记 DWR.xml配置文件说明书 DWR技术分析

    **DWR.xml配置文件详解** 1. **DWR.xml结构**:DWR.xml文件通常位于Web应用的WEB-INF目录下,它是DWR引擎的配置中心,定义了哪些Java类可以被远程调用,以及如何处理这些调用。文件主要由三部分组成:`&lt;dwr&gt;`根元素...

    dwr配置参考,java编程工具中

    在提供的DWR配置文件片段中,我们可以看到一个XML格式的配置文件。这份配置文件定义了DWR如何处理特定类型的对象以及创建特定的服务实例。 ##### 标签解析 1. **`&lt;?xml version="1.0" encoding="UTF-8"?&gt;`**:这是...

    spring与dwr的整合

    6. **生成DWR配置文件**:运行DWR的初始化脚本,生成`dwr.xml`配置文件,该文件包含了所有可被JavaScript调用的Java类和方法的信息。 7. **JavaScript调用**:在HTML或JavaScript文件中,引入DWR的JavaScript库,并...

    dwr+ssh项目

    2. **创建dwr.xml** - 在WEB-INF目录下创建dwr.xml配置文件。这个文件用于配置DWR的行为,包括哪些Java对象可以被远程调用,以及如何转换这些对象到JavaScript。 在dwr.xml中,`&lt;allow&gt;`标签定义了允许客户端访问...

    DWR开发入门教程--配置与开发

    ##### 2.1 配置文件dwr.xml详解 在DWR项目中,最重要的配置文件是`dwr.xml`。该文件定义了哪些Java类可以通过JavaScript访问,并且规定了具体的访问方式。 **示例:** ```xml &lt;dwr&gt; ...

    ajax dwr+spring整合

    DWR可以通过Spring的Bean工厂来创建Java对象,这需要在DWR的配置文件中指定Spring的ApplicationContext,并在DWR的`create`元素中使用`springId`属性引用Spring Bean。 3. **安全设置** 考虑到安全性,可以使用...

    DWR中文文档(pdf)

    #### 三、DWR的配置详解 ##### 2.1 `web.xml`配置 - **主要配置**: - `&lt;servlet&gt;`和`&lt;servlet-mapping&gt;`用于定义DWR servlet。 - `&lt;filter&gt;`和`&lt;filter-mapping&gt;`用于配置DWR filter,该filter负责拦截请求并...

    DWR中处理List

    配置DWR XML文件时,处理List、Set和Map与处理单个JavaBean类似。例如,对于List类型的处理,配置如下: ```xml &lt;dwr&gt; &lt;param name="class" value="com.dwr.TestClass"/&gt; &lt;convert converter="bean" ...

    dwr.xml配置描述及JSP上的引用_1

    《DWR(Direct Web Remoting)配置详解与JSP页面应用实践》 DWR,全称为Direct Web Remoting,是一个开源Java库,它允许在浏览器和服务器之间进行实时的、安全的JavaScript到Java的调用,实现了AJAX的核心功能。在...

Global site tag (gtag.js) - Google Analytics