dwr学习(一):简单dwr实例
最近写ajax写烦了,想着能不能有个更简单的“ajax”,一问就问到这个dwr了。赶紧去官网学习了下,这里写个博客记录一下实例。
测试环境:tomcat6.0
1、新建一个web项目(这里比较简单,我就不赘述了),我这里的是TestWeb。
2、安装dwr。
主要用到两个jar包。
一个是dwr.jar:这个是dwr的主要文件,可以去官网下载。
下载链接:http://directwebremoting.org/dwr/downloads/index.html。
另一个是commons-logging.jar,这个jar包比较常用,那个版本的都没问题。我这里用的是commons-logging-1.0.4.jar。
将commons-logging-1.0.4.jar和dwr.jar拷贝到TestWeb项目的/WEB-INF/lib目录下。
至此安装完毕。
3、将dwr用到的servlet配置到web.xml中。
- <servlet>
- <display-name>DWR Servlet</display-name>
- <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>
也可以从http://directwebremoting.org/dwr/introduction/getting-started.html中拷贝。
4、添加dwr.xml。
在/WEB-INF新建dwr.xml,名称必须为dwr.xml不能随便取。内容为:
- <!DOCTYPE dwr PUBLIC
- "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
- "http://getahead.org/dwr/dwr30.dtd">
- <dwr>
- <allow>
- <!-- 调用系统类 -->
- <create creator="new" javascript="JDate">
- <param name="class" value="java.util.Date"/>
- </create>
- <!-- 调用自定义的类:带一个参数 -->
- <create creator="new" javascript="Base64">
- <param name="class" value="com.wjl.test.Base64"></param>
- </create>
- </allow>
- </dwr>
具体什么意思可以先不了解,也可以去官网上看或者下载附件进行了解。 官网链接: http://directwebremoting.org/dwr/introduction/getting-started.html。
我这里除了定义了一个系统自带的java.util.Date,还有一个自定义的com.wjl.test.Base64,其代码如下:
- public class Base64 {
- // 加密
- public static String encode(String str) {
- byte[] b = null;
- String s = null;
- try {
- b = str.getBytes("utf-8");
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- if (b != null) {
- s = new BASE64Encoder().encode(b);
- //据RFC 822规定,每76个字符,还需要加上一个回车换行去掉换行符
- s = s.replaceAll("[\\s*\t\n\r]", "");
- }
- return s;
- }
- // 解密
- public static String decode(String s) {
- byte[] b = null;
- String result = null;
- if (s != null) {
- BASE64Decoder decoder = new BASE64Decoder();
- try {
- b = decoder.decodeBuffer(s);
- result = new String(b, "utf-8");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return result;
- }
- }
5、新建jsp页面进行调用。
a、在webRoot根目录下新建testDwrDemo.jsp,html代码为:
- <input type="button" value="获取当前月份" onclick="getMonth();" /><br />
- 当前月份:<span id="curMonth"></span>
- <br />
- <br />
- 加密数据:<input type="text" id="encodeStr" size="45"/><br />
- 加密后:<input type="text" id="encodeResult" size="45"/><br />
- <input type="button" value="加密" onclick="encode();" />
以上代码定义了两个两个方法,分别用来测试第4步中的两个类。
b、在jsp页面引入JS文件:
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/interface/JDate.js"></script>
<script type="text/javascript" src="dwr/interface/Base64.js"></script>
这里有几个注意点:
第一点:所有的js文件必须以dwr开头,即便项目中并不存在dwr文件夹,也不存在以上的四个js。
第二点:engine.js必须要引用。utils.js可以不引用,只有当需要用到其中的方法时才引用。
第三点:后面两个js文件是自己添加的,这种自己添加的js必须带interface目录,也就是自定义js必须以dwr/interface目录开头。(系统的以dwr就OK了)
第四点:自定义JS文件的命名:dwr.xml中javascript属性定义的名称+.+js。我的dwr.xml中javascript属性一个为JDate一个Base64,所以两个js的名称为JDate.js和Base64.js。
c、使用js调用java类中的方法。
- function getMonth(){
- /*
- //JDate:与自定义的js文件名称相同,也与dwr.xml文件中定义的javascript属性值相同
- JDate.getMonth(function(data){
- alert("当前月份:"+(data+1));
- document.getElementById("curMonth").innerHTML=(data+1);
- });
- */
- //也可以写成:
- JDate.getMonth(callback);
- }
- function callback(data){
- alert("当前月份:"+(data+1));
- document.getElementById("curMonth").innerHTML=data;
- }
- //该方法用来加密
- function encode(){
- var str = document.getElementById("encodeStr").value;
- var str2 = Base64.encode(str,function callback(returnData) {
- alert(returnData);
- document.getElementById("encodeResult").value=returnData;
- });
- }
6、使用tomcat进行调试。
a、java类中的方法调试:
发布项目启动tomcat,在浏览器中输入:http://127.0.0.1:8080/TestWeb/dwr,然后回车。
浏览器中显示所有配置在dwr.xml中的类。点击某个类名,可以查看这个类中的方法。如我这里点击Base64,结果如图:
Base64.java中定义了这两个类,且都是公开的,所以在这里显示 了(至于怎么让它不显示,可以看最下边的PS)。
我在encode的括号中输入abc,点击右侧的"Execute"按钮,会自动给我显示加密后的结果,如图:
这个调试是不是很有用?
当然想关闭这种调试也很简单,将web.xml中关于dwr的配置中的debug参数值改成false即可,这样子访问http://127.0.0.1:8080/TestWeb/dwr/将会出现404错误,自然也就不能调试了。是不是很方便。
b、JS方法调试。
这个很简单,点击页面按钮看看结果对不对就知道啦。
PS:关于让指定的方法不显示,可以通过<create>标签下的<include>和<exclude>。
<include method=""/>:指定要公开给javascript的方法。
如:<include method="encode"/>,那么在JS中就可以调用该方法encode。
不指定的话就公开所有方法。
<exclude method=""/>:指定要防止被访问的方法。
如:< exclude method="decode"/>,那么在JS中就不可以调用该方法decode。
include和exclude不能同时存在。
注:本文摘自http://1017401036.iteye.com/blog/2338998,在学习的时候觉得不错,收藏一下。如觉得有侵权,可以删除
dwr学习(一):简单dwr实例的更多相关文章
- dwr学习 之 一、dwr+spring的简单集成
1. 环境搭建 我采用的环境为SpringMVC + myBatis + mySql + maven: 关于使用Eclipse构建Maven的SpringMVC项目,请参考: http://limin ...
- 【C语言C++编程学习笔记】基础语法,第一个简单的实例编程入门教程!
C语言/C++编程学习:一个简单的实例 让我们来看一个简单的C语言程序.从下面的程序可以看出编写C语言程序的一些基本特征. 如果你能知道该程序将会在显示器上显示一些内容,那说明你还是知道一些的! ...
- 【DWR系列04】- DWR配置详解
table { margin-left: 30px; width: 90%; border: 1px; border-collapse: collapse } img { border: 1px so ...
- 【DWR系列02】-DWR逆向Ajax即服务器推送
.literal { background-color: #f2f2f2; border: 1px solid #cccccc; padding: 1px 3px 0; white-space: no ...
- 【DWR系列01】-DWR简介及入门例子
.literal { background-color: #f2f2f2; border: 1px solid #cccccc; padding: 1px 3px 0; white-space: no ...
- JMeter学习-010-JMeter 配置元件实例之 - CSV Data Set Config 参数化配置
众所周知,在进行接口测试的过程中,需要创建不同的场景(不同条件的输入,来验证不同的入参的返回结果).因而,在日常的自动化接口监控或商品监控等线上监控过程中,需要配置大量的入参来监控接口的返回是否正确. ...
- Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题
日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚 ...
- Selenium2学习-010-WebUI自动化实战实例-008-Selenium 操作下拉列表实例-Select
此文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,对下拉列表框 Select 的操作. 下拉列表是 Web UI 自动化测试过程中使用率非常高的,通常有两种形式的下拉列表,一 ...
- Redis:安装、配置、操作和简单代码实例(C语言Client端)
Redis:安装.配置.操作和简单代码实例(C语言Client端) - hj19870806的专栏 - 博客频道 - CSDN.NET Redis:安装.配置.操作和简单代码实例(C语言Client端 ...
- vue服务端渲染简单入门实例
想到要学习vue-ssr的同学,自不必多说,一定是熟悉了vue,并且多多少少做过几个项目.然后学习vue服务端渲染无非解决首屏渲染的白屏问题以及SEO友好. 话不多说,笔者也是研究多日才搞明白这个服务 ...
随机推荐
- MYSQL性能优化(1)
优化步骤 1.show status 查询服务器状态运行信息 根据增删改查统计信息可以知道数据库是查询为主还是更新为主,各类型业务大致比例(更新操作 执行与回滚都会计数) 对于事务,可以通过Com_c ...
- netty 为什么用nio 不用 aio
NIO模型 同步非阻塞 NIO有同步阻塞和同步非阻塞两种模式,一般讲的是同步非阻塞,服务器实现模式为一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才 ...
- IntelliJ IDEA2017 激活方法 最新的(亲测可用)
IntelliJ IDEA2017 激活方法(亲测可用): 搭建自己的授权服务器,对大佬来说也很简单,我作为菜鸟就不说了,网上有教程. 我主要说第二种,现在,直接写入注册码,是不能成功激活的(如果你成 ...
- Add Inline Actions
[Add Inline Actions] 1.为了使用 inline action,需要给 eosio.code 账号添加active权限. To use the 'activeauthority i ...
- body标签
标签(空格分隔): body标签 body标签: 想要在网页上展示出来的内容一定要放在body标签中. 把我们之前那一段HTML代码贴过来,保存到一个HTML格式的文件中. <!DOCTYPE ...
- python argparse(参数解析)模块学习(二)
转载自:http://www.cnblogs.com/fireflow/p/4841389.html(我去..没转载功能,ctrl + c 和 ctrl + v 得来的,格式有点问题,可去原版看看) ...
- php面试题五之nginx如何调用php和php-fpm的作用和工作原理
nginx如何调用php 采用nginx+php作为webserver的架构模式,在现如今运用相当广泛.然而第一步需要实现的是如何让nginx正确的调用php.由于nginx调用php并不是如同调用一 ...
- vue去掉地址栏#(带来的后果)
按以下修改后,带来的后果:打包后部分图片访问不到,首页没加载router-view内容 router 的index中配置模式设置为history export default new Router({ ...
- JAVAEE——SpringBoot配置篇:配置文件、YAML语法、文件值注入、加载位置与顺序、自动配置原理
转载 https://www.cnblogs.com/xieyupeng/p/9664104.html @Value获取值和@ConfigurationProperties获取值比较 @Confi ...
- Solidity类型Uint类型区分?
1. Solidity中默认 Uint 也就是Uint256, 也就是 无符号 256位整数范围,即 2的 256次方 减一的 10进制范围, 预计大小为: 115792089237316195423 ...