DWR框架搭建以及使用

1 篇文章 0 订阅

1DWR介绍

DWRDirect Web Remoting)是一个用于改善web页面Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。

它包含两个主要的部分:允许JavaScriptWEB服务器上一个遵循了AJAX原则的Servlet中获取数据.另外一方面一个JavaScript库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容.

2安装配置

2.1安装dwr.jar包和commos-loggings.jar

dwr.jar包是DWR框架的核心包。可在官网下载:

地址:http://directwebremoting.org/dwr/downloads/index.html


dwrdemo.war是官方提供的参考war包,有基本DWR框架的配置,也有dwr.jar包和commos-loggings.jar包

2.2 配置wel.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="dwr">
  <servlet>
    <servlet-name>dwr-invoker</servlet-name>
    <display-name>DWR Servlet</display-name>
    <description>Direct Web Remoter Servlet</description>
    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>true</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>dwr-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>
</web-app>


规定这样配置,复制即可。

注意:<url-pattern>/dwr/*</url-pattern>中的dwr就是页面(下图)的src路径中dwr


2.3 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>
        <!--配置的一个演示类,javascript="test" 表示可以在页面中用test这个名称指向DwrTest这个java类,类中的方法可以在前台调用 -->
        <!-- creater="new"表示每调用一次时,都需要new一个 -->
        <create creator="new" javascript="test">
            <param name="class" value="com.dwr.DwrTest" />
        </create>
        <!-- 配置javaBean类 -->
       <convert match="com.dwr.User" converter="bean"/>  
    </allow>
</dwr>


dwrdemo.war包中有配置模板,可以复制过来做修改即可。


2.4 jsp页面配置


jsp页面如果要使用DWR框架,需提交上图的代码,src路径中的dwrweb.xml文件中<url-pattern>/dwr/*</url-pattern>节点的dwr.       engine.js,util.js,interface是规定格式,testdwr.xml配置文件javascript属性的值test

以下是dwr.xml配置的补充,了解即可。

<create>标签是dwr中重要的标签,用来描述java(服务器端) 与javascript (客户端)的交互方式。其基本格式如下:

<allow>

  <create creator="..." javascript="..." scope="...">
	
    <param name="..." value="..."/>

    <auth method="..." role="..."/>

    <exclude method="..."/>

    <include method="..."/>

  </create>
	...

</allow>

creator属性 是必须的 -它用来指定使用那种创造器。

默认情况下DWR1.1有8种创造器。它们是:

· new: 用Java的new关键字创造对象。

· none: 它不创建对象,看下面的原因。 (v1.1+)

· scripted: 通过BSF使用脚本语言创建对象,例如BeanShell或Groovy。

· spring: 通过Spring框架访问Bean。

· jsf: 使用JSF的Bean。 (v1.1+)

· struts: 使用Struts的FormBean。 (v1.1+)

· pageflow: 访问Beehive或Weblogic的PageFlow。 (v1.1+)

 

如果你需要写自己的创造器,你必须在init部分注册它。

javascript属性 用于指定浏览器中这个被创造出来的对象的名字。你不能使用Javascript的关键字。

scope属性 非常类似servlet规范中的scope。它允许你指定这个bean在什么生命范围。选项有"application", "session", "request" 和"page"。这些值对于Servlet和JSP开发者来说应该相当熟悉了。

scope属性是可选的。默认是"page"。如果要使用"session"需要cookies。当前的DWR不支持ULR重写。

param元素 被用来指定创造器的其他参数,每种构造器各有不同。例如,"new"创造器需要知道要创建的对象类型是什么。每一个创造器的参数在各自的文档中能找到。请查看上面的链接。

include和exclude元素 允许创造器来限制类中方法的访问。一个创造器必须指定include列表或exclude列表之一。如果是include列表则暗示默认的访问策略是"拒绝";如果是exclude列表则暗示默认的访问策略是"允许"。

例如要拒绝防范除了setWibble()以外的所有方法,你应该把如下内容添加到dwr.xml中。

<create creator="new" javascript="Fred"> <param name="class" value="com.example.Fred"/> <include method="setWibble"/></create>

对于加入到create元素中的类的所有方法都是默认可见的。

auth元素 允许你指定一个J2EE的角色作为将来的访问控制检查:

<create creator="new" javascript="Fred"> <param name="class" value="com.example.Fred"/> <auth method="setWibble" role="admin"/></create>


3DWR的简单使用

3.1 java DWR实现类DwrTest

package com.dwr;

import java.util.List;
import java.util.Map;
/***
 * DWR的实现类
 * @author ZhongBingLin
 *
 */
public class DwrTest {
	/**
	 * 
	 * @param list 存有实体类User对象的list对象  页面传过来的值
	 * @return list 存有实体类User对象的list对象  在页面可以得到
	 */
	public List<User> list(List<User> list)
	{
		for (User user : list) {
			System.out.println(user.toString());
		}
		return list;
	}
	/**
	 * 
	 * @param map Map<String,User>对象  页面传过来的值
	 * @return map Map<String,User>对象  在页面可以得到
	 */
	public Map<String,User> map(Map<String,User> map)
	{
		for (String str: map.keySet()) {
			System.out.println(str+","+map.get(str).toString());
		}
		return map;
	}
}


3.2 javaBeanUser

package com.dwr;

public class User {
	private int id;
	private String name;
	private String addr;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public String toString() {
		return "[id=" + id + ", name=" + name + ", addr=" + addr + "]";
	}	
}


3.3 Jsp页面 test.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>dwr test</title>
<script type="text/javascript" src="<%=request.getContextPath()%>/dwr/engine.js"></script>
<script type="text/javascript" src="<%=request.getContextPath()%>/dwr/util.js"></script>
<script type="text/javascript" src="<%=request.getContextPath()%>/dwr/interface/test.js"></script>
</head>
<script type="text/javascript">
function list()
{
	var a = {id:1,name:"肖亮亮",addr:"湖南永州"};
	var b = {id:2,name:"唐为强",addr:"广东深圳"};
	test.list([a,b],function(userList)
	{
		 for(var i=0;i<userList.length;i++){
		     alert("id="+userList[i].id+",name="+userList[i].name+",addr="+userList[i].addr);
		  }
	});
}
function map()
{
	var a = {id:1,name:"肖亮亮",addr:"湖南永州"};
	var b = {id:2,name:"唐为强",addr:"广东深圳"};
	test.map({"id1":a,"id2":b},function(userMap){
		for(var key in userMap){
			alert(key+": "+userMap[key].id+","+userMap[key].name+","+userMap[key].addr);
		}
	});
}
</script>
<body>
	<button οnclick="list()">list</button>
	<button οnclick="map()">map</button>
</body>
</html>


3.4页面效果

图1:    

图2:


页面点击list按钮触发事件,jstest对象调用了DwrTest类的list方法,打印图1效果,传了一个参数list对象,返回值userList传入回调函数,在函数中跳出图效果。

点击map按钮有类似效果,这里就不再描述了。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值