`
yxwang0615
  • 浏览: 559142 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

DWR 2.0 DEMO

    博客分类:
  • DWR
阅读更多

DWR的工作原理:

 

DWR(Direct Web Remoting)是在Java EE中较流行的AJAX框架,它的最大优势就是可以像使用本地的Javascript函数一样,调用服务器上的Java方法。

其实DWR原理也不复杂,它先在web.xml中配置一个Servlet,映射到特定的路径(通常是%CONTEXT_PATH%/dwr/*)。这个Servlet的作用就是初始化要暴露给Javascript调用的Java类(通过dwr.xml进行配置),并生成相应的代理的Javascript类代码。在XHR请求到来的时候,Servlet负责将请求的参数变成对应的Java对象,并以其为参数调用目标Java方法,并将返回值转化为Javascript代码。详情请参考:http://getahead.ltd.uk/dwr/

 

了解了原理,下面就来说一下如何创建一个简单的DWR DEMO程序,步骤如下:

 

1.新建工程,导入dwr.jar;

2.在web.xml中插入:

 <!-- DWR2.0 BEGIN -->
   <servlet>
    <servlet-name>dwrInvoker</servlet-name>
    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>classes</param-name>
    <param-value>java.lang.Object</param-value>
    </init-param>
      
      <load-on-startup>10</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>dwrInvoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>
  <!-- DWR2.0 END -->

 3. 构建业务逻辑类和相关的实体:

    User.java:

  

public class User implements Serializable{
	private int id;
	private String uname;
	private String upass;
                getter & setter...	
}

 

  

public class UserManager implements Serializable{
	
	public List getlist(){
		List users = new ArrayList();
		User u = null;
		for(int i = 0; i < 5; i++){
			u = new User();
			u.setId(i);
			u.setUname("name" + i);
			u.setUpass("pass" + i);
			System.out.println(i);
			users.add(u);
		}
		return users;
	}
	public boolean validate(String uname, String upass){
		if("admin".equals(uname)&& "admin".equals(upass)){
			return true;
		}
		return false; 
	}
	

 

 4.在和web.xml同级的目录下,新建dwr.xml:

<?xml version="1.0" encoding="UTF-8"?>
<dwr>
<!-- AJAX技术具体实现 -->
    <allow>
       <!--convert将bean的集合变成javascript中的对象数组-->
        <convert  converter="bean" match="com.wyx.test.User"></convert>
        
<!-- 业务处理类 -->
<!-- 每个被调用的类都需要一个 <create> 来定义。有几种类型的creator,最常用的是“new”关键字和Spring框架
     Javascript是用于你在js中调用这个对象时使用什么名称,建议直接使用类名,这样一样就知道它对应哪个类 -->
        <create creator="new" javascript="UserManager" class="com.wyx.test.UserManager" scope="session">
			  <!--include则规定页面只能调用某些方法. exclude可以禁止页面调用后台的某个或某些方法 -->
			  <include method="getlist"/>
			  <include method="validate"/>	
        </create>        
   </allow>
</dwr>

说明: 

(1)Creator是创建这个对象所使用的构建器,如果你希望使用传统的new方法就写成new,如果你希望使用spring来创建则写成spring,如果你使用了spring并且在creator中选择了spring,那么你需要一个叫beanName的参数,而其Value就是在spring配置文件中配置的beanName.

  

<create creator="spring" javascript="UserManager"   class="com.wyx.test.UserManager" scope="session">
         <param name="beanName" value="departmentBus"/>
</create>

 

(2)converter常用的可选值:bean、object、hibernate2、hibernate3 ,match用于告诉DWR你将需要把java中的哪些类转换成js。

5.在页面中使用DWR帮我们生成的代理JavaScript:

index.jsp:

<!--导入脚本-->
<script type="text/javascript" src="/mydwr/dwr/interface/UserManager.js"></script>
	<script type="text/javascript" src="/mydwr/dwr/engine.js"></script>
	<script type="text/javascript" src="/mydwr/dwr/util.js"></script>

<!--创建script脚本-->
<script type="text/javascript">
  	function getlist(){
  		//alert("aaa");
  		UserManager.getlist(callback1);
  	}
 	function validate(){
 		var uname = document.getElementById("txt_name").value;
 		var upass = document.getElementById("txt_pass").value;
 		UserManager.validate(uname, upass, callback2);
  	}
  	function callback1(data){
  		
  		var innerStr = "id   user   pass<br/>";
  		for(var i = 0; i< data.length; i++){
  			innerStr += data[i].id + "   " + data[i].uname + "   " + data[i].upass + "<br>"; 
  			DWRUtil.setValue("mydiv",innerStr);
  		}
  		//document.getElementById("mydiv").innerHTML = innerStr;
  	}
  	function callback2(data){
  		if(data){
  			alert("your loing messages are right!");
  		}else{
  			alert("sorry , your messages are wrong!");
  		}
  	}
  </script>

<!--使用脚本-->

<body>
    uname: <input id="txt_name" type="text" /><br>
    upass: <input id="txt_pass" type="password" /><br>
      <input type="button" value="longin" onclick="validate()"><br>
      <input type="button" value="getlist" onclick="getlist()">
    <div id="mydiv"></div>

 

 JavaScript方法的最后一个参数是回调函数的方法名字,不要连回调方法的参数也写上,仅仅是名字。

 

 util.js包含了一些使用的方法,从而帮助你利用javascript(可能)从服务器端更新你的web数据。你可以在DWR之外的地方使用它,因为它并不依赖与DWR而实现。它包含四个页面处理函数:

1 getText()作用于select lists。
2 getValue[s]()、setValue[s]()作用于除tables、lists和images以外的大多数html元素。
3 addRows()和removeAllRows()用于编辑tables。
4 addOptions()和removeAllOptions()用于编辑lists(如:select lists、ul、ol)。

再具体的可以从http://www.uml.org.cn/AJAX/200812222.asp了解。

engine.js对于DWR来说是至关重要的,因为它被动态生成的接口j avascript函数所调用,因此在使用DWR的地方都必须使用它.所有使用DWR的页面都需要加入下面代码来导入这个DWR主引擎:

<script type='text/j avascript'
   src='/[YOUR-WEB-APP]/dwr/engine.js'>
</script>

 
dwr.engine._execute is not a function???
 

 相关资料:

 

分享到:
评论

相关推荐

    dwr2.0学习例子

    这个"**dwr2.0学习例子**"提供了实践DWR 2.0特性的实例,帮助开发者快速理解和应用DWR。 **DWR框架的核心功能:** 1. **动态代理**:DWR允许服务器端的Java对象被自动暴露到客户端的JavaScript中,使得开发者无需...

    dwr2.0后台推送demo,包含第三方登陆

    dwr2.0后台推送demo,包含第三方登陆,响应成功(是根据sessionID)做的判断。 内含dwr2.0.jar,js都在包里的不用另外找的

    Spring 2.0 + Struts 1.2 + Hibernate 3.2 + DWR 2.0 的JavaEE应用示例

    如果点击其他两个按钮,是演示使用DWR 2.0实现的Ajax技术的使用。 总结,该例示注释非常详细,演示Spring托管Hibernate和Struts的Action, 以及Spring的事务声明(包括1.x与2.x的用法)与非事务声明的使用方式。 ...

    spring3.0,ibatis2.0,dwr2.0 框架整合

    本示例涉及了Spring 3.0、iBatis 2.0和DWR 2.0这三个框架的整合,旨在创建一个高效、灵活的Web应用程序。下面我们将详细探讨这三个框架及其整合的关键知识点。 首先,Spring 3.0是Java领域的一款全功能的轻量级应用...

    dwrDemo.war.zip_dwr_dwr.w

    - **demo.jsp**:这是一个JSP(JavaServer Pages)文件,可能是DWR2.0测试应用的主页面。它会包含DWR的JavaScript库引用以及调用Java方法的示例代码。 - **www.pudn.com.txt**:这可能是一个文本文件,包含了关于源...

    DWR使用方法-step by step

    DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD DirectWebRemoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd"&gt; &lt;dwr&gt; &lt;create creator="new" javascript="Demo"&gt; &lt;/dwr&gt; ``` 对于DWR 1.x版本...

    Spring2.5+Struts2.0+hibernate3.0+Dwr+jquery+displayTag

    自已写的一个demo 1 基于SSH,service采用 annotation注入减少配置 2 利用struts2 的LoginAction-validation.xml 3 在bean里把service包;暴露DWR,写了一个验证用户名的流程 4 采用jpa作为POJO,还是减少配置 5 加入...

    DWR-Getting Started.pdf

    DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD DirectWebRemoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd"&gt; &lt;dwr&gt; &lt;create creator="new" javascript="Demo"&gt; &lt;/dwr&gt; ``` - 对于DWR 1.x...

    dwr实例及常见问题

    当前的DWR版本为3.0,但鉴于某些教程可能基于旧版本(例如2.0),因此选择一个兼容的版本是明智的。对于初学者,可以跟随较早的教程,因为它们通常解释得更详尽。 在配置阶段,我们需要在WEB-INF/web.xml文件中添加...

    dwr相关文件实用指南,请仔细查看

    DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD DirectWebRemoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd"&gt; &lt;dwr&gt; &lt;create creator="new" javascript="Demo"&gt; &lt;/dwr&gt; ``` 这里的`&lt;create&gt;`...

    Struts、Spring、Hibernate整合开发、DWR集成

    - 发布应用后,访问`http://localhost:8080/demossh/dwr`,查看是否能正确显示“Classes known to DWR”页面。 - 控制台应输出类似以下的日志信息,表明DWR配置成功: ```log 55875 INFO 2008-09-08 16:20:35 ...

    springMVC综合实例

    **SHDemo2.0项目结构:** 这个项目的目录结构通常包括src/main/java、src/main/resources、src/main/webapp等。在`src/main/java`下,会有controller、service、dao、model等包,分别存放控制器、服务层、数据访问层...

    ext_js

    - **服务端系Ajax库** (例如DWR、GWT、MS Ajax.Net) 直接在服务器端生成JavaScript代码,适用于那些需要快速将数据呈现到前端的应用场景。 - **原生系Ajax库** (例如Ext.js、jQuery、Mootools) 则直接在浏览器端执行...

    struts-2.5.10-all所有jar包

    aopalliance-1.0.jar,asm-5.1.jar,asm-commons-5.1.jar,asm-tree-5.1.jar,bsh-2.0b4.jar,classworlds-1.1.jar,commons-beanutils-1.9.2.jar,commons-collections-3.2.1.jar,commons-digester-2.1.jar,commons-...

    struts-2.3.30-all所有jar包

    commons-digester-2.0.jar, commons-fileupload-1.3.2.jar, commons-io-2.2.jar, commons-lang-2.4.jar, commons-lang3-3.2.jar, commons-logging-1.1.3.jar, commons-validator-1.3.1.jar, core-0.6.2.jar, dwr-...

    271个java需要用的jar包

    struts2-osgi-demo-bundle-2.3.15.3.jar struts2-osgi-plugin-2.3.15.3.jar struts2-oval-plugin-2.3.15.3.jar struts2-pell-multipart-plugin-2.3.15.3.jar struts2-plexus-plugin-2.3.15.3.jar struts2-portlet-...

Global site tag (gtag.js) - Google Analytics