1。
DWR的配制文件 dwr.xml
<!DOCTYPE dwr PUBLIC
”-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN”
”http://www.getahead.ltd.uk/dwr/dwr10.dtd”>
<dwr>
<allow>
<create creator=”new” javascript=”Mydate”>
<param name=”class” value=”java.util.Date”/>
</create>
<create creator=”new” javascript=”Demo”>
<param name=”class” value=”your.java.Demo”/>
</create>
</allow>
</dwr>
上面的配制文件中:
定义了由 DWR 创建和被 Javascript 远程使用的类。在上面的例子中我们在远程创建了2个类,并且给出了在 Javascript 中的类名。
上面使用的 new creator 使用了所有的 JavaBeans 必须含有的公有(public)无参(no-args)的构造函数。值得一提的是, DWR 还有一些限制
避免使用 JavaScript 保留字;以保留字命名的方法将自动被排除。大多数 JavaScript 的保留字同时也是 Java 的保留字,因此无论如何你也不能使用一个名为 “try()” 的方法。但是最常用的一个词 “delete()”,在 JavaScript 中有特殊的含义而在 Java 中没有。
重载方法(Overloaded methods)将会在调用的时候陷入未知的状况,因此应该避免重载方法
2. 开始老是配制不好util.js, engin.js两个文件的位置
最后发现用下面这种方式比较好使
<script src=’/[YOUR-WEBAPP]/dwr/interface/[YOUR-SCRIPT].js’></script>
<script src=’/[YOUR-WEBAPP]/dwr/engine.js’></script>
。。。。。。
3。 在网上看到了下面这个消息,复制过来,再关注一下:
由于DWR去年刚加入Dojo基金会,而Dojo基金会力促DWR和基金会下面的另外一个comet项目结合,估计将来dwr会有很大变化。dwr是以客户端获取会主的动态技术,comet是以服务器端推为主的动态技术,这两个结合有好看的,我们拟目以待
4。 回忆一下ajax[Asynchronous JavaScript and XML]技术
var xmlhttp=null;
function PostOrder(xmldoc)
{
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.5.0");
xmlhttp.Open("POST", "http://myserver/orders/processorder.asp";, false); //设置XMLHTTP对象,这个对象可以执行向预定目标地址以Post方式发送数据包。
//http://myserver/orders/processorder.asp服务器端专门用来接收数据的地址
xmlhttp.onreadystatechange= HandleStateChange;//设置客户端响应状态,发送数据后,服务器会响应
xmlhttp.Send(xmldoc);//发送数据,xmldoc是xml结构化的数据
myButton.disabled = true;
}
function HandleStateChange()
{
if (xmlhttp.readyState == 4)//当收到正确响应时状态变成4,否则一直等待
{
myButton.disabled = false;
alert("Result = " + xmlhttp.responseXML.xml);//返回的数据
}
}
理解一下即可,知道数据是怎么发送的
实际上ActiveXObject是IE支持的类型,假如浏览器不支持这个呢
1:先建立XMLHttpRequest,建立成功以后要在它的后面紧跟着建立一个xhr.overrideMimeType("text/xml")对于该句的解释在天极网找到了这么一段话“如果服务器的响应没有XML mime-type header,某些Mozilla浏览器可能无法正常工作。为了解决这个问题,如果服务器响应的header不是text/xml,可以调用其它方法修改该header”。
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
if(xhr.overrideMimeType)
{ xhr.overrideMimeType("text/xml") ;}
}
2:如果XMLHttpRequest建立不成功就要建立针对IE的ActiveXObject.不同的IE版本有不同ActiveXObject,但是我们现在只要建立两个就可以了,163是这样做的于是我也就理解为这样就可以兼容所有的IE了,具体没测试过.
try{
xhr = new ActiveXObject("Msxml.XMLHTTP");
}catch(e){
try{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){}
}两个try嵌套把两种情况都写出来了.
在DWR中AJAX技术原始代码engine.js文件中有体现
/**//**
* Remoting through XHR
*/
xhr:{
/**//**
* The default HTTP method to use
*/
httpMethod:"POST",
/**//**
* The ActiveX objects to use when we want to do an XMLHttpRequest call.
* TODO: We arrived at this by trial and error. Other toolkits use
* different strings, maybe there is an officially correct version?
*/
XMLHTTP:["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"],
/**//**
* Setup a batch for transfer through XHR
* @param {Object} batch The batch to alter for XHR transmit
*/
send:function(batch) {
if (batch.isPoll) {
batch.map.partialResponse = dwr.engine._partialResponseYes;
}
// Do proxies or IE force us to use early closing mode?
if (batch.isPoll && dwr.engine._pollWithXhr == "true") {
batch.map.partialResponse = dwr.engine._partialResponseNo;
}
if (batch.isPoll && dwr.engine.isIE) {
batch.map.partialResponse = dwr.engine._partialResponseNo;
}
//看这里
if (window.XMLHttpRequest) {
batch.req = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
batch.req = dwr.engine.util.newActiveXObject(dwr.engine.transport.xhr.XMLHTTP);
}
//看这里
// Proceed using XMLHttpRequest
if (batch.async) {
batch.req.onreadystatechange = function() {
if (typeof dwr != 'undefined') {
dwr.engine.transport.xhr.stateChange(batch);
}
};
}
// If we're polling, record this for monitoring
if (batch.isPoll) {
dwr.engine._pollReq = batch.req;
// In IE XHR is an ActiveX control so you can't augment it like this
if (!document.all) batch.req.batch = batch;
}
httpMethod = dwr.engine.transport.xhr.httpMethod;
// Workaround for Safari 1.x POST bug
var indexSafari = navigator.userAgent.indexOf("Safari/");
if (indexSafari >= 0) {
var version = navigator.userAgent.substring(indexSafari + 7);
if (parseInt(version, 10) < 400) {
if (dwr.engine._allowGetForSafariButMakeForgeryEasier == "true") {
httpMethod = "GET";
}
else {
dwr.engine._handleWarning(batch, {
name: "dwr.engine.oldSafari",
message: "Safari GET support disabled. See getahead.org/dwr/server/servlet and allowGetForSafariButMakeForgeryEasier."
});
}
}
}
batch.mode = batch.isPoll ? dwr.engine._ModePlainPoll : dwr.engine._ModePlainCall;
var request = dwr.engine.batch.constructRequest(batch, httpMethod);
try {
batch.req.open(httpMethod, request.url, batch.async);//看这里,发送设置
try {
for (var prop in batch.headers) {
var value = batch.headers[prop];
if (typeof value == "string") {
batch.req.setRequestHeader(prop, value);
}
}
if (!batch.headers["Content-Type"]) {
batch.req.setRequestHeader("Content-Type", "text/plain");
}
}
catch (ex) {
dwr.engine._handleWarning(batch, ex);
}
batch.req.send(request.body);//看这里,执行发送
///这里执行发送功能,在这里你可以通过 alert("see me:"+request.body);
///可以看到执行发送时,到底发送了什么
if (!batch.async) {
dwr.engine.transport.xhr.stateChange(batch);
}
}
catch (ex) {
dwr.engine._handleError(batch, ex);
}
if (batch.isPoll && batch.map.partialResponse == dwr.engine._partialResponseYes) {
dwr.engine.transport.xhr.checkCometPoll();
}
// This is only of any use in sync mode to return the reply data
return batch.reply;
},
/*
Edit Table时,删除表中一行时,alert弹出内容为:
----------------------------------------
see me:callCount=2
windowName=DWR-4B6B.D06
c0-scriptName=People
c0-methodName=deletePerson
c0-id=0
c0-e1=number:18
c0-param0=Object_Object:{id:reference:c0-e1}
c1-scriptName=People
c1-methodName=getAllpeople
c1-id=1
batchId=2
page=/dwr/people/index.html
httpSessionId=
scriptSessionId=2557C..42A1
上面弹出内容的初步解释
callCount=1 表示执行了多少个方法
c0-scriptName =Demo 调用了那个java类 c后面的序号是方法的序号,如果有
两个方法,那么就有c0,c1,见第三个例子
c0-methodName=sayHello 调用了类中的哪个方法
c0-id =0 方法序号
c0-param1=String: Joe 传递的值,这个值对应于java方法的参数
page=/dwr/.. 路径
*/
dwr通过无状态刷新技术,向服务器端发送数据包,服务器端响应,客户端收到返回数据后,作出变化
在浏览器加载http://localhost:5050/dwr/simpletext/index.html时,
浏览器遇到下面这句话
<script type='text/javascript' src='../dwr/interface/Demo.js'>
</script>
就执行dwrServlet.java(web.xml有dwr相关配置),向服务器调用发送类似于
see me:callCount=1
windowName=DWR-4B6B.06
c0-scriptName=_System
c0-methodName=pageLoaded
c0-id=0
batchId=0
page=/dwr/
httpSessionId-
scriptSessionId=
的内容,不执行任何操作。
当我们真正点击发送按钮时,向服务器发送类似于
see me:callCount=1
windowName=DWR-4B6B.2D06
c0-scriptName=Demo
c0-methodName=sayHello
c0-id=0
c0-param0=string:Joe
batchId=1
page=/dwr/simpletext/index.html
httpSessionId=
scriptSessionId=A822701A
的数据,告诉服务器,我会调用哪个类的哪个方法,并且传什么样的参数,参数内容是什么。
不用说,服务器端肯定是接收相应的数据,激发相应的类相应的方法
对于参数,涉及到字符串数据比如String:Joe,转换为java对象,有专门的转换类处理,后缀为convert的类
分享到:
相关推荐
时序库influx安装及初始化学习笔记 1、通过docker安装influx 2、通过手动安装influx 3、安装influx CLI 4、设置influx config 5、初始化influx bucket 6、influx 其他相关命令 另附官网连接
根据提供的文件内容,以下是对Go语言学习笔记的详细知识点阐述。 Go语言是Google开发的一种静态类型、编译型、并发型,并具有垃圾回收功能的编程语言。它由Robert Griesemer、Rob Pike和Ken Thompson于2007年9月...
Go语言学习笔记.pdf 共174页 Go语言学习笔记.pdf 共174页是一本关于Go语言的详细学习笔记,涵盖了Go语言的基础知识、函数、数组、Maps、Structs、接口、并发、程序结构、标准库等方面的内容。本笔记共分为三大部分...
根据提供的标题、描述、标签及部分内容,我们可以提炼出关于J2ME的学习笔记中的关键知识点,主要聚焦于Java语言的基础概念,特别是与初始化和字符串相关的部分。 ### 初始化 #### 概述 - **成员变量初始化**:所有...
Go语言,又称Golang,是一种静态类型的编程语言,由Google开发,于2007年首次对外公布,并在2009年进行了...通过本学习笔记的内容,我们可以对Go语言有一个全面而系统的认识,为深入学习和应用Go语言打下坚实的基础。
根据提供的信息,我们可以总结出这份文档是关于Go语言学习笔记的部分内容,主要涵盖了Go语言的基础概念、语法结构、数据类型以及并发模型等关键知识点。以下是对这些知识点的详细解析: ### Go语言概述 Go(也称作...
【吴恩达深度学习笔记】是一份针对吴恩达教授在Coursera平台上的深度学习课程的详尽笔记,旨在帮助已有一定编程基础和机器学习知识的计算机专业人士深入理解和应用深度学习技术。该课程分为5个部分,涵盖了深度学习...
### Linux-2.6.29在Mini2440上的内存底层初始化学习笔记 #### 一、基础知识 ##### 1.1 关于伙伴系统(Buddy System) 伙伴系统是Linux内核用来管理物理地址连续的内存页的一种机制。它的核心思想是基于2的幂次来...
**J2EE学习笔记概述** J2EE(Java 2 Platform, Enterprise Edition)是一个由Sun Microsystems(现已被Oracle收购)开发的平台,主要用于构建企业级的分布式应用系统。它提供了服务器端组件模型、服务和API,支持...
SATA学习笔记 SATA(Serial Advanced Technology Attachment)是一种高速串行接口技术,用于连接计算机和存储设备,如硬盘、固态硬盘、U盘等。下面是SATA学习笔记的详细知识点: 硬盘基本概念 硬盘是计算机系统的...
Go 学习笔记, 第 4 版 4.4 Struct 47 第 5 章 ⽅法 53 5.1 ⽅法定义 53 5.2 匿名字段 54 5.3 ⽅法集 56 5.4 表达式 56 第 6 章 接⼝ 60 6.1 接⼝定义 60 6.2 执⾏机制 62 6.3 接⼝转换 63 6.4 接⼝技巧 65 第 7 章 ...
本知识点的标题为“Java学习笔记(必看经典)”,意味着所整理的内容是针对Java初学者的一系列核心概念和原理的总结。 首先,面向对象编程是Java语言的核心,它与传统的面向过程编程有显著的不同。面向对象编程强调的...
本学习笔记将聚焦于与ES5的区别,帮助初学者快速掌握ES6的核心概念。** 1. **变量声明:let和const** - `let`替代了`var`进行块级作用域的变量声明,解决了`var`的变量提升和函数作用域问题。 - `const`用于声明...
django框架学习笔记(源代码及文档) :“django框架学习笔记” :“django学习” 在Python的世界里,Django是一个强大且受欢迎的Web框架,它遵循模型-视图-控制器(MVC)设计模式,用于快速开发高效且可维护的...
### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...
本套学习笔记全面覆盖了WinSock的基础知识,非常适合初学者深入理解和实践。 首先,WinSock学习笔记(一)可能涵盖了以下内容: 1. **Winsock初始化**:介绍如何使用`WSAStartup`函数来初始化WinSock库,并在完成...
Go语言学习笔记的知识点涵盖广泛,它从基础的语法到高级的并发编程,再到源码的剖析,全面介绍了Go语言的特点和编程技巧。以下是根据所提供的文件内容提取的知识点: 1. Go语言基础:Go是一种静态类型编程语言,...
### F2812学习笔记知识点详述 #### 一、如何开始DSP的学习 - **基础知识了解**:首先,快速浏览整个书籍,了解DSP的基本概念和技术背景,掌握DSP的总体框架。 - **学习资料的选择**:选择合适的教材或参考资料非常...
这篇“NodeMCU学习笔记之初始化工作”主要涵盖了如何开始使用NodeMCU进行开发,包括硬件连接、固件烧录、环境配置以及基本的编程实践。 一、硬件初始化 1. **硬件连接**:NodeMCU通常配备USB接口,可以直接连接到...
【C++学习笔记概述】 C++是一门强大的编程语言,其在C语言的基础上进行了扩展,引入了许多现代化的特性。这份笔记主要涵盖了C++的基础知识,包括C++11和C++17的新特性,旨在帮助初学者理解C++的核心概念。 ### C++...