DWR介绍:

DWR本身是一个AJAX框架。

作用:

允许开发人员在客户端通过JavaScript代码调用服务器端的Java方法。

可以使用DWR中的util.js文件中包含了一些工具函数,通过这些函数的帮助,将简化JavaScript操作。

DWR框架主要由两部分组成:
1.客户端 JavaScript 代码直接调用服务器端 Java 方法.
2.服务器上运行的 DWR 核心 Servlet 负责处理客户端请求,将客户端请求委托到实际的 Java 对象进行处理,并将结果返回给客户端.

DWR 的使用步骤:
1. 添加 dwr.jar 包到项目中
2. 在 web.xml 中配置 DwrServlet
3. 与 web.xml 同级目录下创建 dwr.xml 配置文件
4. 在页面中引用 JS 文件 ,实现与服务器交互(DWR 框架中如果返回的是自定义类型,则需要作类型转换
<convert match="返回类的完整路径" converter="bean"></convert>)

DWR使用
好了,下面对于DWR的使用来具体说明一下:
1.下载DWR框架:
DWR的官方站点:
http://directwebremoting.org/dwr/downloads/index.html
各下载项说明:
JAR File :该选项仅下载 dwr.jar 文件
WAR File :该选项下载 dwr.jar 文件及其其他依赖的类库,还包括 DWR 的使用范例
Sources :该选项下载 DWR 的源文件

2.添加dwr.jar包到项目中:
将dwr.jar包放入到WEB-INF的lib文件夹下,并且这里也要把commons-logging.jar包夜放到其中,因为dwr依赖于commons-logging.jar这个包。
3.在 web.xml 中配置 DwrServlet:
修改 web.xml 文件,添加如下代码:
<strong><servlet-name>dwr_invoker</servlet-name>
<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></strong>


3. 与 web.xml 同级目录下创建 dwr.xml 配置文件:

创建dwr.xml文件:
web.xml文件位于同一目录
该文件用于定义Java类和JavaScript之间的对应关系,将Java类的方法暴露给客户端
其结构如下:
<span style="font-size:10px;"><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
     "http://getahead.org/dwr/dwr20.dtd">
<dwr>
    <allow>
        <create creator="..." javascript="..." scope="...">
            <param name="..." value="..."/>
            <include method="…"/>
            <exclude method="…"/>
        </create>
        <convert converter="..." match="..."/>
    </allow>
</dwr></span>
eg:
<dwr>
    	<allow>
    		<create creator="new" javascript="jDate">
    			<param name="class" value="java.util.Date"></param>
    			<include method="toLocaleString"/>
    		</create>
    		
    		<create creator="new" javascript="jMybean">
    			<param name="class" value="com.huaxin.test.TestMyBean"></param>
    		</create>
    		
    		<convert match="com.huaxin.bean.MyBean" converter="bean"></convert>
    	</allow>
    </dwr>


<allow> 元素:定义了 DWR 能够创建和转换的类,是 dwr.xml 中最重要的元素
<create> 元素:创建器定义如何将一个 Java 类转换成 JavaScript 对象
<convert> 元素:类型转换器,用于定义 Java 类型和 JavaScript 类型之间的对应关系

<create> 元素的属性:
creator 属性: DWR 内置多个创建器用于处理多种类型 Java
javascript 属性:在客户端给创建的 JavaScript 对象命名。该名字将在页面里作为 js 被导入
<create> 元素的子元素:
< param > 元素:用来指定创建器的参数。其中 name 属性用来指定参数名称, value 指定参数的值
<include> 元素:定义允许访问的方法列表
<exclude> 元素:定义不允许访问的方法列表,其中 method 属性指定不被暴露给客户端的方法

还有,creator和javascript是必须属性,其他可以忽略。creator包含有以下几个值:
  new:Java用“new”关键字创造对象
  none:它不创建对象 (v1.1+)
  scripted:通过BSF使用脚本语言创建对象,例如BeanShell或Groovy
  spring:通过Spring框架访问Bean
  struts:使用Struts的FormBean (v1.1+)
  jsf:使用JSF的Bean (v1.1+)
  pageflow:访问Weblogic或Beehive的PageFlow (v1.1+)
  ejb3:使用EJB3 session bean (v2.0+)

<convert>元素:
DWR 默认支持的类型有:
所有基本类型, boolean int double 等等
包装类, Boolean Integer 等等
java.lang.String
日期类型,如: java.util.Date java.sql.Times java.sql.Timestamp
数组 ( 存放以上类型的 )
集合类型 (List Set Map Iterator 等等 )

Bean 转换器
用于完成 JavaBean 对象和 JavaScript 对象之间的转换
DWR 默认关闭 Bean 转换器
如果需要进行 JavaBean 对象和 JavaScript 对象之间的转换,需要在 dwr.xml 中显式设置

4. 在页面中引用 JS 文件 ,实现与服务器交互:
可以通过这种方式获得页面中所需要的JS文件:
因为在上面的web.xml中有这段配置:
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
所以可以进入debug页面进行调试:




图片中圈出的就是: 在你的JavaScript使用这个类所需要的脚本。
将这段脚本copy到页面文件中即可。 然后就可以编写具体的 javascript代码了。





最后介绍一下, DWR中工具类中的两个重要的函数的使用:

util.js文件中包含了一些工具函数,通过这些函数的帮助,将简化JavaScript操作
util.js提供一些基本的页面操作函数,通过这些函数可以方便的操作HTML元素
util.js文件与DWR框架关系不是特别大,可以在任何不同的网页中使用(即便该工程没有DWR支持)

列表操作函数:
dwr.util.removeAllOption s (id) :用于删除列表中的所有项
dwr.util.addOptions () :用于添加列表项
表格操作函数:
DWR 提供两个函数帮助我们操作表格:
-dwr.util.removeAllRows (id) :删除 table 中所有行
-dwr.util.addRows ( id,array,cellFuncs ,[options]) :向表中添加数据行

使用方法:


1.首先,要在页面文件中放入图片中圈出来的脚本才能使用DWR的JS文件中的一些工具方法。
2.在页面文件中的js标签中使用具体的函数方法
eg:
<%@ 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>My JSP 'test.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='/DWRstudy/dwr/util.js'></script>

<script type="text/javascript">
	function showCity(){
		var array = [{name:'山东',value:'鲁'},{name:'湖南',value:'湘'},{name:'北京',value:'京'}];
		dwr.util.removeAllOptions("s1");
		dwr.util.addOptions("s1","name","value");
	}
</script>

</head>
<body>
	城市:<select id="s1"></select>
	<input type="button" value="显示城市列表" onclick="showCity()">
</body>
</html>

效果演示:


DWR的使用以及DWR中工具JS文件的使用的更多相关文章

  1. html5 拖拽及用 js 实现拖拽功能的示例代码

    这篇文章主要介绍了html5 拖拽及用 js 实现拖拽,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  3. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. amaze ui 的使用详细教程

    这篇文章主要介绍了amaze ui 的使用详细教程,本文通过多种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. HTML5适合的情人节礼物有纪念日期功能

    这篇文章主要介绍了HTML5适合的情人节礼物有纪念日期功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. HTML5 WebSocket实现点对点聊天的示例代码

    这篇文章主要介绍了HTML5 WebSocket实现点对点聊天的示例代码的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. html5简介_动力节点Java学院整理

    这篇文章主要介绍了html5简介,用于指定构建网页的元素,这些元素中的大多数都用于描述网页内容,有兴趣的可以了解一下

  8. xcode – Cordova plugin.xml添加“Header Search Paths”条目

    我希望将Cordova插件添加到Xcode项目后,在“HeaderSearchPaths”下添加一个新条目.如何在Cordovaplugin.xml文件中进行配置?

  9. ios 8 Homescreen webapp,关闭和打开iPad停止javascript

    我有一个适用于iPad的全屏HTML5网络应用程序,并且刚刚安装了IOS8来试用它,它一切正常,直到你关闭并重新启动iPad.一旦web应用程序重新启动javascript就会停止并加载新页面不会重新启动它.在iPad上的Safari中打开同一页面时,关闭和打开iPad会继续按预期工作.其他人注意到了这个或想出了一个解决方案吗?解决方法这似乎是我在iOS8.1.1更新中解决的.

  10. ios – 有关多个连接/提要/视图的XML解析的设计/实现建议

    >我应该在每个视图中都有解析器类/对象或解析XML提要吗?

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部