技术标签: Java java servlet 服务器 ajax dwr javascript
什么是DWR?
DWR是Direct Web Remoting 的缩写。
DWR 是一个开放源码的使用 Apache 许可协议的解决方案,它包含服务器端 Java 库、一个 DWR servlet 以及 Java Script 库。虽然 DWR 不是 Java 平台上唯一可用的 Ajax-RPC 工具包,但是它是最成熟的,而且提供了许多有用的功能。从最简单的角度来说,DWR 是一个引擎,可以把服务器端 Java 对象的方法公开给 Java Script 代码。使用 DWR 可以有效地从应用程序代码中把 Ajax 的全部请求-响应循环消除掉。这意味着客户端代码再也不需要直接处理 XMLHttp Request 对象或者服务器的响应。不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成 XML。甚至不再需要编写 servlet 代码把 Ajax 请求调整成对 Java 域对象的调用。 DWR 是作为 Web 应用程序中的 servlet 部署的。把它看作一个黑盒子,这个 servlet 有两个主要作用:首先,对于公开的每个类,DWR 动态地生成包含在 Web 页面中的 Java Script。生成的 Java Script 包含存根函数,代表 Java 类上的对应方法并在幕后执行 XMLHttp Request。这些请求被发送给 DWR,这时它的第二个作用就是把请求翻译成服务器端 Java 对象上的方法调用并把方法的返回值放在 servlet 响应中发送回客户端,编码成 Java Script。DWR 还提供了帮助执行常见的用户界面任务的 Java Script 工具函数。
DWR是一个Open Source的 java项目。DWR可以让JavaScript调用运行在Web服务器里面的JAVA程序。简单一点或者专业一点就是Easy AJAX for JAVA.
下面将一步一步的介绍怎么完成一个简单DEMO
1,从官方网站下载DWR https://dwr.dev.java.net/files/documents/2427/32252/dwr.war 把他直接放到TOMCAT_HOME/webapps 下面
2,编写一个Java类如下:
DWRTest.java
package com.test.ajax;
/**
*
* @author 方见华
*
*/
public class DWRTest {
public DWRTest(){
}
public String getMyName(){
return "James Fang";
}
}
3, 把DRWTest类配置在dwr.xml中,dwr.xml是DWR的配置文件,所有需要在JavaScript中调用的java的类都必须在这个文件中 描述 。这个文件的位于TOMCAT_HOME/webapps/dwr/WEB-INF/dwr.xml. 在<allow>标签中添加以下内容
<create creator="new" javascript="MyTest" scope="application">
<param name="class" value="com.test.ajax.DWRTest"/>
</create>
4, 编写调用DWRTest类 getMyName的方法的HTML文件,test.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>DWR - My First AJAX</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script type='text/javascript' src='/dwr/dwr/interface/MyTest.js'></script>
<script type='text/javascript' src='/dwr/dwr/engine.js'></script>
<script type='text/javascript' src='/dwr/dwr/util.js'></script>
<script language="javascript">
var mycall=function callBack(data){
DWRUtil.setValue("demo1",data);
}
function showMyName(){
MyTest.getMyName(mycall);
}
function clearName(){
demo1.value="";
}
</script>
</head>
<body>
<h1>Ajax Test Page</h1>
<input type="button" value="setMyName" οnclick="javascript:showMyName()"><input type="button" value="Clear" οnclick="javascript:clearName()"><br>
<input type="text" id="demo1"></select><br>
</body></html>
5, 运行,在浏览器中输入 http://localhost:8080/dwr/test.html
DWR让Ajax更简单
最近看了一个java实现的Ajax的框架——DWR,觉得很不错。下面自己编写小例子,例子实现的是在在页面上点一个“查看当前时间”的按钮,然后在页面不刷新的情况下,从服务器端返回当前时间并显示在页面。步骤如下:
1、到http://getahead.ltd.uk/dwr/download下载dwr.jar文件。
2、用eclipse新建一个项目,我的项目名就叫dwr。
3、把刚才下载的dwr.jar放到web-inf/lib下面。
4、在web.xml中加入一下内容:
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<display-name>DWR Servlet</display-name>
<description>Direct Web Remoter Servlet</description>
<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>
5、在web.xml的所在目录下新建dwr.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<dwr>
<allow>
<create creator="new" javascript="Test">
<param name="class" value="com.wuahui.test.ajax.AjaxTest"/>
</create>
</allow>
</dwr>
6、创建服务器端的程序com.wuahui.test.ajax.AjaxTest.java,代码如下:
package com.wuahui.test.ajax;
import java.util.Date;
public class AjaxTest {
public String dispCurrentTime(){
return new Date().toString();
}
}
7、在web目录下创建前台页面myAjax.html,内容如下:
<html>
<head>
<title>DWR Test</title>
<!-- These paths use .. so that they still work behind a path mapping proxy. The fully qualified version is more cut and paste friendly. -->
<script type='text/javascript' src='dwr/interface/Test.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
</head>
<body οnlοad='DWRUtil.useLoadingMessage()'>
<input class='ibutton' type='button' οnclick='Test.dispCurrentTime(reply0);' value='查看当前时间' title='查看服务器上的时间'/>
<script type='text/javascript'>
var reply0 = function(data)
{
if (data != null && typeof data == 'object') alert(DWRUtil.toDescriptiveString(data, 2));
else DWRUtil.setValue('timestr', DWRUtil.toDescriptiveString(data, 1));
}
</script>
<span id='timestr' class='reply'></span>
</body></html>
8、把项目部署到Tomcat上面运行http://localhost:8080/dwr/myAjax.html即可。
AJAX DWR基本使用向导
前言aJax也许很多人比较熟悉,但是dwr可以是应用ajax变得非常的简单,大大提高开发效率,而且dwr还提供了很多有用的js代码,可以说是如虎添翼。
应用解释可能有部分人根本不知道aJax和dwr是什么东西,用来做什么的?既然标题是基本使用,那我就从dwr有什么用来说说。一般来说,不管是jsp 或者是asp要访问数据库都得submit一个form,然后获取数据库或者执行部分逻辑,接着web跳了另外一页把执行的结果显示出来。这个过程web 相对于是刷新了一下。那么有什么办法可以令web不刷新,而页面又可以和数据库交互数据呢?有,就是ajax技术,利用web 对象把数据以xml方式submit到web server,然后返回结果,中间全部用javascript操作,页面不闪动或者刷新。但是自己操作xml对象未免有点小烦,能不能把这些工作集成到一个对象里面呢?能,就是dwr.下面开始教你如何使用。
如何使用
下载软件包http://getahead.ltd.uk/dwr/这里就可以
安装软件包解压软件包,把dwr.jar 文件拷贝到你web项目的WEB-INF/lib 目录中,同时编辑WEB-INF/web.xml文件,在此文件中加入
#
1. <servlet>
2. <servlet-name>dwr-invoker</servlet-name>
3. <display-name>DWR Servlet</display-name>
4. <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
5. <init-param>
6. <param-name>debug</param-name>
7. <param-value>true</param-value>
8. </init-param>
9. </servlet>
10.
11. <servlet-mapping>
12. <servlet-name>dwr-invoker</servlet-name>
13. <url-pattern>/dwr/*</url-pattern>
14. </servlet-mapping>
另外,在WEB-INF目录中建立一个dwr.xml 文件,文件内容入下
1. <!DOCTYPE dwr PUBLIC
2. "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
3. "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
4.
5. <dwr>
6. <allow>
7. <create creator="new" javascript="JDate">
8. <param name="class" value="java.util.Date"/>
9. </create>
10. <create creator="new" javascript="Demo">
11. <param name="class" value="your.java.Bean"/>
12. </create>
13. </allow>
14. </dwr>
这个可以说也是dwr的配置文件最后,重新启动你的tomcat或者resin等jsp web server.
# 测试安装效果在ie敲入http://localhost:8080/[YOUR-WEBAPP]/dwr/
# 如果成功显示页面,那说明你安装正确了。
# 应用于网页测试页会显示JDate (java.util.Date) ,这个是也是例子,通过javascript调用web server中的java.util.Date,也相当于调用web server里面的一个bean.那么我们如何使用他呢?
# 你可以在自己的html文件中加入
#
1. <script type='text/javascript' src='/sc/dwr/interface/JDate.js'></script>
2. <script type='text/javascript' src='/sc/dwr/engine.js'></script>
比如我们要用bean中的toLocaleString方法返回一个时间string.那么你可以在javascript中编写
1. function displayLocaleDate()
2. {
3. var str = JDate.toLocaleString();
4. alert(str);
5. }
当运行displayLocaleDate()方法就会弹出时间。
# 总结以上只是个调用服务器Date javabean的简单例子,你可以更加自己的需要写相应的bean,可以做出非常出色的基于web聊天网站,或者实时图表显示应用。
文章浏览阅读3.8k次。Redis安装部署下载编译*本系统环境为:CentOS_7_2009,X86_64下载源码包:https://redis.io/download上传离线压缩包或者下载到公共目录:/usr/local/redis/$ cd /usr/local/redis/ $ wget https://download.redis.io/releases/redis-6.2.6.tar.gz$ tar -zxvf redis-6.2.6.tar.gz$ ln -s redis-6.2.6 redis #创建_redis安装部署
文章浏览阅读1.2w次,点赞2次,收藏23次。在 Linux 中,可以使用 "sed、akw" 命令快速提取一个日志文件中指定时间段之间的日志信息。_linux截取一段时间内的日志
文章浏览阅读5.8k次,点赞5次,收藏27次。解决tomcat在cmd下运行startup提示:The JRE_HOME environment variable is not defined correctly This environment variable is needed to run this program如果提示startup不是内部或外部命令也是需要配置tomcat的环境变量_tomcat设置jre
文章浏览阅读1.4k次。通过clion指定mingw或VS对代码进行编译。_clion设置编译器路径
文章浏览阅读862次,点赞3次,收藏21次。通用定时器有4个,TIM2,TIM3,TIM4,TIM5TIM1和TIM8挂载APB2下面;TIM2,TIM3,TIM4,TIM5挂载APB1下面。以TIM3为例无映射:时钟使能PA PB TIM3部分重映射:时钟使能PB TIM3完全重映射:时钟使能PC TIM3_stm32f103zet6完全重映射代码
文章浏览阅读1.7k次。目录1、国内首款L4级5G无人驾驶汽车武汉量产2、6G需要1000亿个基站,可能跟手机一样大小3、业内称5G套餐资费年内或降至50至60元4、5月5G手机出货1564.3万部,占比近五成..._6g需要基站吗
文章浏览阅读2.4k次。idea生成SpringBoot项目端口号的修改第一次使用idea,在生成SpringBoot项目的时候,提示端口8080被占用,这个时候有两个办法:1、修改端口号(推荐)①如果是.yml配置文件,添加server:port:8888,格式和下图相同,需要注意的一点是,server必须和spring同列,否则无效②如果是properties文件,配置文件中添加 server.port=88..._idea如何设置8080端口
文章浏览阅读2.2k次。我们平常所提到的计算机的内存指的是动态内存(即DRAM),动态内存中所谓的“动态”,指的是当我们将数据写入DRAM后,经过一段时间,数据会丢失,因此需要一个额外设电路进行内存刷新操作。但时间一长,代表1的电容会放电,代表0的电容会吸收电荷,这就是数据丢失的原因。我们都知道,中间层是为了提供抽象转换而存在的,而这套叫做操作系统的中间层,定义了一套规则,使得后续的可执行程序能够更容易的被运行起来,而且能更容易的利用各种硬件(显示,键盘等等),能够调用一些库来消除不同的程序间重复的运行逻辑。_操作系统和编程语言的关系
文章浏览阅读378次。这上以前加入黑手安全网上做的教程,也搬过来吧目标程序:红盟(内部版)TNT社工辅助.exe所加的壳:ACProtect 2.00 - RISCO Software Inc.首先忽略所有异常,隐藏下od脱壳步骤:1.程序附加(程序附加后会停在系统的领空)代码:7C92120F C3 RETN7C921210 8BFF MOV EDI,EDI7C921212 > CC INT3..._acprotect 教程
文章浏览阅读174次。混合储能功率分配,下垂控制,功率均衡,母线电压补偿_蓄电池下垂控制
文章浏览阅读1.4k次。在前面文章的producer和consumer示例中,只存在一个进程。producer调用put时执行了consumer中的put方法,consumer调用get时执行了producer..._uvm_tlm_analysis_fifo默认深度
文章浏览阅读542次。在当前目录下:tar -zxvf +自己下载的安装包名字,我的是:tar -zxvf libevent-2.1.12-stable.tar.gz。那就使用这个命令:sudo apt-get install libssl-dev 安装openssl。在这个目录下的终端输入:./configure --prefix=/usr。安装完成后继续输入:./configure --prefix=/usr。如果这个命令下面输出一大堆东西就代表安装成功,啥也没输出代表安装失败。我下载的是这个压缩包。_ubuntu 安装libevent