DWR入门实例(二)
DWR(Direct Web Remoting)
DWR is a Java library that enables Java on the server and JavaScript in a browser to interact and call each other as simply as possible.
Dwr能让在server端的java代码和浏览器client的javascript代码尽可能简单的相互调用。
DWR is Easy Ajax for Java!
官网:http://directwebremoting.org/dwr/index.html
一、 环境搭建
1. 新建webproject。
2. 从官网下载dwr3.0 rc2,也是当前最新版本号,并引入类路径。
3. dwr依赖于logging.jar,也须要引入类路径以下。
4. 配置web.xml例如以下:

<servlet>
<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>

5. 新建一个java类。代码例如以下:

package com.yokoboy.dwr.service;
public class DwrDemo {
public String getHello(String name) {
return name + " 你好!";
}
}

6. 在web.xml 同文件夹以下新建dwr.xml,代码例如以下:

<?xml version="1.0" encoding="UTF-8"?>
<dwr>
<allow>
<!--配置的一个演示类,javascript="Demo" 表示能够在页面中用Demo这个名称指向DwrDemo这个java类,类中的方法能够在前台调用 -->
<!-- creater="new"表示每调用一次时,都须要new一个 -->
<create creator="new" javascript="Demo">
<param name="class" value="com.yokoboy.dwr.service.DwrDemo" />
</create> <!-- java类库类 -->
<create creator="new" javascript="MyDate">
<param name="class" value="java.util.Date" />
</create> <!-- 測试阶段使用,运营阶段不要使用 -->
<!-- convert元素用于数据类型转换,即java类和javascript之间相互转换 -->
<convert converter="exception" match="java.lang.Exception" />
<convert converter="bean" match="java.lang.StackTraceElement" />
</allow>
</dwr>

6. 新建MyDwr.jsp文件,代码例如以下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%> <!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>">
<title>Dwr Demo</title>
<script type='text/javascript' src='${pageContext.request.contextPath}/dwr/engine.js'></script>
<script type='text/javascript' src='${pageContext.request.contextPath}/dwr/util.js'></script>
<script type='text/javascript' src='${pageContext.request.contextPath}/dwr/interface/Demo.js'></script>
<script type='text/javascript' src='${pageContext.request.contextPath}/js/jquery1.8.js'></script>
<script type="text/javascript">
//此函数中能够调用java类的方法。除了java方法本身的參数外,还要将回调函数名作为參数传给java方法
function sayHello(name) {
Demo.getHello(name, dwrHandler);
} //这是dwr的一个回调函数,data參数即java方法getHello(String name)的返回值
function dwrHandler(data) {
alert(data);
}
</script>
</head> <body>
<input>
<button onclick="sayHello($('input').val());">提交</button>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%> <!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>">
<title>Dwr Demo</title>
<script type='text/javascript' src='${pageContext.request.contextPath}/dwr/engine.js'></script>
<script type='text/javascript' src='${pageContext.request.contextPath}/dwr/util.js'></script>
<script type='text/javascript' src='${pageContext.request.contextPath}/dwr/interface/Demo.js'></script>
<script type='text/javascript' src='${pageContext.request.contextPath}/js/jquery1.8.js'></script>
<script type="text/javascript">
//此函数中能够调用java类的方法,除了java方法本身的參数外,还要将回调函数名作为參数传给java方法
function sayHello(name) {
Demo.getHello(name, dwrHandler);
} //这是dwr的一个回调函数,data參数即java方法getHello(String name)的返回值
function dwrHandler(data) {
alert(data);
}
</script>
</head> <body>
<input>
<button onclick="sayHello($('input').val());">提交</button>
</body>
</html>

当中用到了jquery,须要自行导入。
公布站点,訪问MyDwr.jsp就可以查看效果!
二、说明
1. 查看jsp源码。最上面引入了几个js文件,实际上是不存在的。不用考虑它们在哪儿。
2. 当中engine.js和util.js是固定的。另外的一个js的名称就是dwr.xml中配置的类名。
这些js的路径基本是:app_root/dwr/....模式的,一定要写对。
3. 訪问 “app_root/dwr” ,这是dwr本身提供了一个測试环境,能够直接运行server端函数中的方法。
当中MyDate里面的函数是java.util.Date类里面的方法。
4. 打开web.xml 文件。
里面配置了一个servlet,“url-pattern”配置的是“/dwr/*”,所以拦截全部已dwr开头的请求。
url-pattern”假设改成了/ddd/*。页面中都需吧dwr该成ddd
5. 再看dwr.xml文件(这个文件名称不能改。必须是dwr)。里面“create了两个javascript”,再看源码中。确实使用Demo作为实例来引用 com.yokoboy.dwr.service.DwrDemo里面的方法。
DWR入门实例(二)的更多相关文章
- Eclipse插件开发_学习_02_GEF入门实例
一.前言 这一节,我们将会创建一个GEF入门实例 二.新建RCP项目 1. New 一个 Plug-in Project 2.输入项目名 项目名:com.ray.gef.helloworld 3.Co ...
- mybatis 详解(二)------入门实例(基于XML)
通过上一小节,mybatis 和 jdbc 的区别:http://www.cnblogs.com/ysocean/p/7271600.html,我们对 mybatis有了一个大致的了解,下面我们通过一 ...
- 无废话ExtJs 入门教程二十一[继承:Extend]
无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...
- Omnet++ 4.0 入门实例教程
http://blog.sina.com.cn/s/blog_8a2bb17d01018npf.html 在网上找到的一个讲解omnet++的实例, 是4.0下面实现的. 我在4.2上试了试,可以用. ...
- CMake入门(二)
CMake入门(二) 最后更新日期:2014-04-25 by kagula 阅读前提:<CMake入门(一)>.Linux的基本操作 环境: Windows 8.1 64bit英文版.V ...
- Asp.Net MVC2.0 Url 路由入门---实例篇
本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...
- Bootstrap入门(二十八)JS插件5:工具提醒
Bootstrap入门(二十八)JS插件5:工具提醒 工具提示在使用过程中比较常见,但是实现起来有些麻烦,而bootstrap则很好地解决了这个问题. 我们来写一个简单的实例 先引入CSS文件和JS文 ...
- Bootstrap入门(二十三)JS插件1:模态框
Bootstrap入门(二十三)JS插件1:模态框 1.静态实例 2.动态实例 3.模态框的尺寸和效果 4.包含表单的模态框 模态框经过了优化,更加灵活,以弹出对话框的形式出现,具有最小和最实用的功能 ...
- Apache Mina入门实例
一.mina是啥 ApacheMINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的 ...
随机推荐
- nutch搏斗之一
nutch搏斗之一 问题描述: 在用nutch1.0做generate 包括5亿url的crawldb时,它默认按照64M分块,分成777个map task,在运行的后期出现 Could not fi ...
- pro-engineer&UG
Pro/Engineer操作软件是美国参数技术公司(PTC)旗下的CAD/CAM/CAE一体化的三维软件.Pro/Engineer软件以参数化著称,是参数化技术的最早应用者,在目前的三维造型软件领域中 ...
- VC++ 在两个文件互相包含时会出现的错误
首先,要分别在两个文件中实现以下两个类 class Object { public: NewType ToType(); }; class NewType : public Object { } -- ...
- session深入解读
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:尽管session机制在web应用程序中被採用已经非常长时间了.可是仍然有非常多人不清楚 ...
- Go by Example
Go by Example Go is an open source programming language designed for building simple, fast, and reli ...
- [WPF]入门理解Binding 数据驱动思想
站在一个WinForm程序员的角度去考虑,他会做这样几件事情: 响应slider1的ValueChanged事件,在事件处理函数中让textBox1显示slider1的Value 响应textBox1 ...
- Android DES加密的CBC模式加密解密和ECB模式加密解密
DES加密共有四种模式:电子密码本模式(ECB).加密分组链接模式(CBC).加密反馈模式(CFB)和输出反馈模式(OFB). CBC模式加密: import java.security.Key; i ...
- windows下cocos2dx3.0开发环境及Android编译环境搭建
cocos2dx更新到了3.x版本号,自己一直没有换,如今开发组要求统一换版本号,我就把搭建好开发环境的过程记录下来. 一.Windowns下开发环境搭建 1. 所需工具 1)coc ...
- mysql 触发器和存储过程组合使用,实现定时触发操作
mysql可以实现定时触发功能,比如说定于某某时间mysql数据库做什么工作,或每隔多长时间做什么工作. 第二种情况应用还是比较广的,比如说我希望每天检查一下我的数据信息,超过一个月的无用信息清除以腾 ...
- 【剑指offer】打印单列表从尾部到头部
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25028525 剑指offer上的第五题,在九度OJ上測试通过. 时间限制:1 秒 内存限制 ...