DWR处理逻辑 下载地址
把Java得方法转化成JavaScript(业务层)
再把Java得Bean转化成JavaScript对象(数据传输模型层)
一. 服务器端Java代码的编写
首先写好业务层,就是你要在客户端call服务器得方法集合 Chat.java
写好数据传输模型,就是java中要用到的封装好的JavaBean Message.java
二. 配置Java代码以便DWR能解析Java
接下来配置dwr.xml,放在WEB-INF目录下
例子一:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 0.4//EN" "http://www.getahead.ltd.uk/dwr/dwr.dtd">
<dwr>
<allow>
<!-- 定义javascript生成器 new 表示 uk.ltd.getahead.dwr.create.NewCreator.class-->
<create creator="new" javascript="Chat"> <!-- 表示在javascript建立一个Chat对象,每次都新建 -->
<param name="class" value="Chat"/> <!-- 定义业务Bean所在的类路径 -->
</create>
<convert converter="bean" match="Message"/> <!-- 数据传输模型定义 -->
</allow>
</dwr>
例子二:
<dwr>
<allow>
<!-- 定义javascript生成器 spring 表示 uk.ltd.getahead.dwr.create.SpringCreator.class-->
<create creator="spring" javascript="ajaxSampleSvc">
<param name="beanName" value="ajaxSampleSvc" />
<exclude method="toString"/> <!-- 在javascript中不生成toString方法 -->
<exclude method="setArticleDao"/>
</create>
<convert converter="bean" match="com.tearesolutions.model.Article"/>
</allow>
</dwr>
三. HTML编写
接下来我们写html页面
在html页面里有2个要点:
一个是业务层函数的调用,一个是回调函数。
其中业务层的函数返回值会传递给回调函数,以便回调函数处理。
举例说明:
这里Chat是业务层,
public class Chat
{
public List addMessage(String text)
{
if (text != null && text.trim().length() > 0)
{
messages.addFirst(new Message(text));
while (messages.size() > 10)
{
messages.removeLast();
}
}
return messages;
}
public List getMessages()
{
return messages;
}
private static LinkedList messages = new LinkedList();
}
数据模型
public class Message
{
public Message(String newtext)
{
text = newtext;
if (text.length() > 256)
{
text = text.substring(0, 256);
}
text = text.replace('<', '[').replace('&', '_');
}
public long getId()
{
return id;
}
public String getText()
{
return text;
}
long id = System.currentTimeMillis();
String text;
}
比如你要发送聊天信息:
在HTML中的JS:
导入JS:
<script type='text/javascript' src='/chat-demo/dwr/engine.js'></script>
<script type='text/javascript' src='/chat-demo/dwr/interface/Chat.js'></script> //生成Chat业务层
<script type='text/javascript' src='/chat-demo/dwr/util.js'></script>
function sendMessage()
{
var text = DWRUtil.getValue("text");
DWRUtil.setValue("text", "");
//因为Chat的addMessage方法返回List消息,应该让回调函数gotMessages处理,text就是函数的真正变量
//调用业务层方法的变量顺序:callback,parameters
Chat.addMessage(gotMessages,text);
}
function gotMessages(messages) //在这里messages放着的都是Message对象的索引,就是数据模型
{
var chatlog = "";
for (var data in messages)
{
chatlog = "<div>" + messages[data].text + "</div>" + chatlog;
}
DWRUtil.setValue("chatlog", chatlog);
setTimeout("checkMessages()", 1000);
}
配置DWR过滤web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="chat-demo">
<display-name>Chat-Demo</display-name>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<display-name>DWR Servlet</display-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>
把Java得方法转化成JavaScript(业务层)
再把Java得Bean转化成JavaScript对象(数据传输模型层)
一. 服务器端Java代码的编写
首先写好业务层,就是你要在客户端call服务器得方法集合 Chat.java
写好数据传输模型,就是java中要用到的封装好的JavaBean Message.java
二. 配置Java代码以便DWR能解析Java
接下来配置dwr.xml,放在WEB-INF目录下
例子一:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 0.4//EN" "http://www.getahead.ltd.uk/dwr/dwr.dtd">
<dwr>
<allow>
<!-- 定义javascript生成器 new 表示 uk.ltd.getahead.dwr.create.NewCreator.class-->
<create creator="new" javascript="Chat"> <!-- 表示在javascript建立一个Chat对象,每次都新建 -->
<param name="class" value="Chat"/> <!-- 定义业务Bean所在的类路径 -->
</create>
<convert converter="bean" match="Message"/> <!-- 数据传输模型定义 -->
</allow>
</dwr>
例子二:
<dwr>
<allow>
<!-- 定义javascript生成器 spring 表示 uk.ltd.getahead.dwr.create.SpringCreator.class-->
<create creator="spring" javascript="ajaxSampleSvc">
<param name="beanName" value="ajaxSampleSvc" />
<exclude method="toString"/> <!-- 在javascript中不生成toString方法 -->
<exclude method="setArticleDao"/>
</create>
<convert converter="bean" match="com.tearesolutions.model.Article"/>
</allow>
</dwr>
三. HTML编写
接下来我们写html页面
在html页面里有2个要点:
一个是业务层函数的调用,一个是回调函数。
其中业务层的函数返回值会传递给回调函数,以便回调函数处理。
举例说明:
这里Chat是业务层,
public class Chat
{
public List addMessage(String text)
{
if (text != null && text.trim().length() > 0)
{
messages.addFirst(new Message(text));
while (messages.size() > 10)
{
messages.removeLast();
}
}
return messages;
}
public List getMessages()
{
return messages;
}
private static LinkedList messages = new LinkedList();
}
数据模型
public class Message
{
public Message(String newtext)
{
text = newtext;
if (text.length() > 256)
{
text = text.substring(0, 256);
}
text = text.replace('<', '[').replace('&', '_');
}
public long getId()
{
return id;
}
public String getText()
{
return text;
}
long id = System.currentTimeMillis();
String text;
}
比如你要发送聊天信息:
在HTML中的JS:
导入JS:
<script type='text/javascript' src='/chat-demo/dwr/engine.js'></script>
<script type='text/javascript' src='/chat-demo/dwr/interface/Chat.js'></script> //生成Chat业务层
<script type='text/javascript' src='/chat-demo/dwr/util.js'></script>
function sendMessage()
{
var text = DWRUtil.getValue("text");
DWRUtil.setValue("text", "");
//因为Chat的addMessage方法返回List消息,应该让回调函数gotMessages处理,text就是函数的真正变量
//调用业务层方法的变量顺序:callback,parameters
Chat.addMessage(gotMessages,text);
}
function gotMessages(messages) //在这里messages放着的都是Message对象的索引,就是数据模型
{
var chatlog = "";
for (var data in messages)
{
chatlog = "<div>" + messages[data].text + "</div>" + chatlog;
}
DWRUtil.setValue("chatlog", chatlog);
setTimeout("checkMessages()", 1000);
}
配置DWR过滤web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="chat-demo">
<display-name>Chat-Demo</display-name>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<display-name>DWR Servlet</display-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>
本文介绍Direct Web Remoting (DWR)的应用实践,包括Java方法转化为JavaScript的过程、配置dwr.xml文件的方法、HTML页面中业务层函数调用及回调函数处理等关键技术点。
604

被折叠的 条评论
为什么被折叠?



