谈起DWR,这个东西在上学的时候接触过,但工作之后就再也没有用过。
 
    对DWR的印象是不手写AJAX,使用JavaScript调用java后台的代码,就如同调用前台代码一样。
 
    于是乎,随着这次修改新景后台的功能之际,了解一下DWR的使用。顺便照着网上的DEMO简单地实现了一下~
 
    简介如下:
    web.xml需要配置一个servlet,处理所有/dwr/*的请求
  1. <servlet>
  2. <servlet-name>dwr-invoker</servlet-name>
  3. <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
  4. <!--调试模式-->
  5. <init-param>
  6. <param-name>debug</param-name>
  7. <param-value>true</param-value>
  8. </init-param>
  9. <init-param>
  10. <param-name>scriptCompressed</param-name>
  11. <param-value>false</param-value>
  12. </init-param>
  13. <!--demo抛异常,加入跨域session安全机制-->
  14. <init-param>
  15. <param-name>crossDomainSessionSecurity</param-name>
  16. <param-value>false</param-value>
  17. </init-param>
  18. <load-on-startup>1</load-on-startup>
  19. </servlet>
  20. <servlet-mapping>
  21. <servlet-name>dwr-invoker</servlet-name>
  22. <url-pattern>/dwr/*</url-pattern>
  23. </servlet-mapping>
    在和web.xml同级目录下新建dwr.xml
    配置dwr需要调用的类,配置请求参数所需函数和js参数的对应关系。
    
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
  3. <dwr>
  4. <allow>
  5. <!-- 每次新建都需要创建这样一个类,提供调用的javascript文件是DWRUserMessage.js,全局对象名为DWRUserMessage -->
  6. <createcreator="new"javascript="DWRUserMessage">
  7. <!-- 这个js会调用java的哪一个类,一般和js里的那个文件一样(包名.DWRUserMessage),这里我也的不一样也成功了。 -->
  8. <paramname="class"value="com.wang.dao.UserUtil"/>
  9. </create>
  10. <!-- js和java之间的参数互相转换 -->
  11. <convertconverter="bean"match="com.wang.bean.User"></convert>
  12. </allow>
  13. </dwr>
 
    后台在dwr中调用的函数:
  1. package com.wang.dao;
  2. import com.google.gson.Gson;
  3. import com.wang.bean.User;
  4. public class UserUtil {
  5. public String genUserJson(User tempUser){
  6. if(tempUser == null){
  7. return "空参数";
  8. }
  9. User user = new User();
  10. user.setName(tempUser.getName());
  11. user.setAge(tempUser.getAge());
  12. return new Gson().toJson(user);
  13. }
  14. }
 
   前端页面:
   基于回调函数,调用后端参数传入后端需要的参数和回调函数。
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5. <metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">
  6. <title>首页</title>
  7. <scripttype="text/javascript"src="dwr/engine.js"></script>
  8. <scripttype="text/javascript"src="dwr/util.js"></script>
  9. <scripttype="text/javascript"src="dwr/interface/DWRUserMessage.js"></script>
  10. <scripttype="text/javascript">
  11. functionUserrollback(data){
  12. if(data){
  13. //拿到java代码返回的json参数,并转化为js对象,然后获取属性并展示到dom对象的innerHTML中
  14. var qq =eval("("+data+")");
  15. console.log(qq+"=="+qq.name +"=="+qq.age);
  16. var ss = document.getElementById("ss");
  17. var ss2 = document.getElementById("ss2");
  18. ss.innerHTML = qq.name;
  19. ss2.innerHTML = qq.age;
  20. }
  21. }
  22. function genAndShowUserMessage(){
  23. console.log('sb');
  24. var param ={};
  25. param.name ="张三";
  26. param.age =18;
  27. console.log(param);
  28. //调用java后端的函数,并传入参数:param对应后端需要的参数,Userrollback代表执行完java代码执行的回调函数。
  29. //我猜的DWR原理就是基于ajax和回调函数执行的。
  30. DWRUserMessage.genUserJson(param,Userrollback);
  31. console.log('pre rollback');
  32. }
  33. </script>
  34. </head>
  35. <body>
  36. <ahref="javascript:void(0)"onclick="genAndShowUserMessage()">点我获取用户信息</a>
  37. <br/>
  38. 名称:<spanid="ss"></span>
  39. <br/>
  40. 年龄:<spanid="ss2"></span>
  41. </body>
  42. </html>
 
    除了DWR,顺带了解了新景后台的修改方式。
    拿当前任务举例,要求在两个后面对文本框的值做校验,文本框的值是以英文逗号隔开(,)的,通过network找到进入页面的请求,定位到后台代码,找到进入页面jsp,查看逻辑。用DWR实现,对着两处的校验也有相应的数据。
 
 
 
 

dwr2.0版本的demo的更多相关文章

  1. Keras 2.0版本运行

    Keras 2.0版本运行demo出错: d:\program\python3\lib\site-packages\ipykernel_launcher.py:8: UserWarning: Upda ...

  2. JSP的那些事儿(2)---- DWR2.0 的配置和使用

    JSP的那些事儿(2)----DWR2.0 的配置和使用 分类: Web开发 JAVA 2009-04-23 15:43 999人阅读 评论(0) 收藏 举报 jspdwrjavascriptserv ...

  3. 【转】cocos2d-x 2.0版本 自适应屏幕分辨率

    http://codingnow.cn/cocos2d-x/975.html 我使用的版本是cocos2d-2.0-x-2.0.4,cocos2dx-2.0版本对多分辨率适配提供了很好的支持,使用起来 ...

  4. Scala 的 Web 框架 Lift 开始 3.0 版本开发

    Scala 的 Web 框架 Lift 开始 3.0 版本开发 http://demo.liftweb.net/ http://liftweb.net/download Lift 框架在不断的成长和改 ...

  5. ICG_System之全自动代码生成器V2.0版本

    大家好! 早在2014年本人就已经利用业余时间开发自己的ICG之代码生成器系统.依靠bootstrap的崛起本人也在不断完善此应用.目的是为了减少开发人员的工作量. 减少不必要的复制粘贴操作,该系统已 ...

  6. LitepalNewDemo【开源数据库ORM框架-LitePal2.0.0版本的使用】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本Demo使用的是LitePal2.0.0版本,对于旧项目如何升级到2.0.0版本,请阅读<赶快使用LitePal 2.0版本 ...

  7. GlideDemo【Glide3.7.0版本的简单使用以及圆角功能】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本Demo主要记录Glide3.7.0版本的简单运用和实现圆角方案. 效果图 代码分析 Glide的centerCrop()和fit ...

  8. Java 基于ArcFace人脸识别2.0 服务端Demo

    源代码传送:https://github.com/itboyst/ArcSoftFaceDemo 开发环境准备: ###开发使用到的软件和工具: Jdk8.mysql5.7.libarcsoft_fa ...

  9. vue的生命周期(又称钩子函数)----以及vue1.0版本与vue2.0版本生命周期的不同

    vue生命周期 1. vue1.0版本与vue2.0版本生命周期的不同 vue1.0版本生命周期图示 图1  vue1.0版本生命周期 vue1.0版本的生命周期: init 实例创建之前 creat ...

随机推荐

  1. 报表中经常遇到的一个头疼的问题是需要自动选择过去一个月的数据作为当前报表输出。网上查询了一些.NET 的C#例子,发现都实现的比较复杂

    报表中经常遇到的一个头疼的问题是需要自动选择过去一个月的数据作为当前报表输出.网上查询了一些.NET 的C#例子,发现都实现的比较复杂,其实这个问题可以很简单的通过.NET的DateTime函数来实现 ...

  2. HDU-6341 Problem J. Let Sudoku Rotate(dfs 剪枝)

    题目:有一个4*4*4*4的数独,每一横每一竖每一个小方块中都无重复的字母,即都为0-9,A-F..有一个已经填好的数独,若干个4*4的方块被逆时针拧转了若干次,问拧转回来至少需要多少次. 分析:很明 ...

  3. asp.net mvc 静态化

    静态化的基本理解就是,常用的资源以文本形式保存,客户端访问时无需经过程序处理,直接下载 但是不存在的文件需要经过程序处理,文件内容如果需要有更动或删除,则直接删除文件本身 1.IIS Express ...

  4. jstl 遍历数据

    1   导入 jstl  的  jar 包 2. 页面中添加 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/ ...

  5. C++ GUI Qt4编程(11)-5.1hexSpinbox

    1. hexspinbox.cpp /* * The spin box supports integer values but can be extended to use different str ...

  6. Linq 与 Lambda 简单使用

    //Lambda表达式详解 //int //List<int> numbers = new List<int> {1,2,3,4,5,6,7,8,9 }; //var n = ...

  7. 利用Flume将本地文件数据中收集到HDFS

    1. 创建文件 放入一个txt文件 然后查看hdfs上的文件夹 不知道为什么并没有出现本地的文件 也不报错 后来发现,没有在logs文件夹下面,在newlogs文件夹下面

  8. 解决运行vue项目的报错This relative module was not found:

    运行vue项目出现这样的报错. This relative module was not found: * ../../assets/img/spot.png !./src/components/on ...

  9. Ionic3,关于配置公共的css文件,引用非标准的文件(三)

    说明 在开发过程中,很多样式为了能够共用,这样能够节省很大一部分时间用来编写样式,同时,一个完整的共用模板,在进行样式更换的时候,可以达到事半功倍的效果,因此在开发效率上也可以获得提高. 相关步骤: ...

  10. C# MODBUS 通信

    背景 电厂有多组监控设备,需要在指定的设备上显示某些数据(其他设备对接过来的).通信协议是modbus主从结构. 源码: http://download.csdn.net/download/wolf1 ...