加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

DWR入门教程

发布时间:2020-12-15 21:44:09 所属栏目:百科 来源:网络整理
导读:DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在 浏览器 里的代码使用运行在 WEB服务器 上的JAVA函数,就像它就在浏览器里一样。 一、引入DWR裤架的步骤 (

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

一、引入DWR裤架的步骤

(1)添加dwr.jar和commons-logging.jar到WEB-INF/lib目录下

(2)修改web.xml 添加DWRServlet配置信息

(3)在WEB-INF目录下面添加dwr.xml文件

(4)在html或者JSP页面中通过JS代码调用服务器段的java方法

二、下面通过一个demo来熟悉如何在工程里面使用dwr框架

(1)下面是该demo的工程结构


(1)修改web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<display-name></display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	
	<!-- 配置DWR -->
	<servlet>
		<servlet-name>dwr-invoker</servlet-name>
		<servlet-class>uk.ltd.getahead.dwr.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>
(3)添加dwr.xml文件

<!DOCTYPE dwr PUBLIC
    "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
    "http://www.getahead.ltd.uk/dwr/dwr10.dtd">

<dwr>
	<allow>
<!--配置js段能够方法的java类-->
		<create creator="new" javascript="DwrDemo">
			<param name="class" value="cn.gov.zjport.dwr.DwrDemo" />
		</create>
<!--配置服务器段的javabean和前段javascript对象之间的转换-->
		<convert match="cn.gov.zjport.dwr.Person"  converter="bean"></convert>
	</allow>
</dwr>
(4)修改index.jsp文件,引入dwr需要的js文件

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	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>Dwr Demo</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<script type='text/javascript' src='/DwrDemo/dwr/engine.js'></script><!--引入dwr的engine.js文件 核心文件-->
<script type='text/javascript' src='/DwrDemo/dwr/util.js'></script><!--dwr提供的工具文件-->
<script type='text/javascript' src='/DwrDemo/dwr/interface/DwrDemo.js'></script><!--dwr自动生成的js文件 这三个文件会缓存在前段浏览器里面-->
<script type="text/javascript">
	function dwrdemo() {
		//调用服务器段的DwrDemo类的getServerData方法,serverReturn是回调方法
		DwrDemo.getServerData(serverReturn);
	}
	function serverReturn(data) {
		 dwr.util.setValue("val",data);
	}
	function dwrdemo1() {
		DwrDemo.getPerson(serverReturn1);
	}
	function serverReturn1(data) {
		 dwr.util.setValue("val1",data.name+":"+data.age+":"+data.address);
	}
</script>
</head>

<body>
	<button name="btn" onclick="dwrdemo()" title="click me">click
		me</button>
	返回值:<input type="text" id="val" name="val">
	
	<button name="btn1" onclick="dwrdemo1()">获得用户</button>
	用户信息:<input type="text" id="val1" name="val1">
	
</body>
</html>
DwrDemo.js文件:

if (typeof dwr == 'undefined' || dwr.engine == undefined) throw new Error('You must include DWR engine before including this file');

(function() {
  if (dwr.engine._getObject("DwrDemo") == undefined) {
    var p;
    
    p = {};
    p._path = '/DwrDemo/dwr';

    /**
     * @param {function|Object} callback callback function or options object
     */
    p.getServerData = function(callback) {
      return dwr.engine._execute(p._path,'DwrDemo','getServerData',arguments);
    };

    /**
     * @param {function|Object} callback callback function or options object
     */
    p.getPerson = function(callback) {
      return dwr.engine._execute(p._path,'getPerson',arguments);
    };
    
    dwr.engine._setObject("DwrDemo",p);
  }
})();


(5)编写后台对应的业务类DwrDemo.class

package cn.gov.zjport.dwr;

public class DwrDemo {

	public String getServerData() {
		return "Message from server";
	}
	
	public Person getPerson(){
		Person person = new Person() ;
		person.setName("张三") ;
		person.setAge(32) ;
		person.setAddress("杭州下城区") ;
		return person ;
	}
}
package cn.gov.zjport.dwr;

public class Person {
	
	private String name ;
	private int age ;
	private String address ;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
}
(6)运行结果


当点击 click me和获得用户这两个按钮的时候,前段的js会想DWRServlet发送请求,DWRServlet拦截到请求以后会通过反射的方式调用具体的java类里面的方法。并将结果返回到前段。由此可见DWRServlet是dwr框架后台的一个核心控制类负责处理前段的请求。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读