当前位置: 首页 > 图文教程 > Java技术 > Web框架 > Web框架:DWR中signatures标签的使用
DWR是一个可以允许你去创建AJAX WEB站点的JAVA开源库。它可以让你在浏览器中的Javascript代码调用Web服务器上的Java代码,就像在Java代码就在浏览器中一样。
DWR包含2个主要部分:
?1.一个运行在服务器端的Java Servlet,它处理请求并且向浏览器发回响应。
?2.运行在浏览器端的JavaScript,它发送请求而且还能动态更新网页。
DWR工作原理是通过动态把Java类生成为Javascript。它的代码就像Ajax魔法一样,你感觉调用就像发生在浏览器端,但是实际上代码调用发生在服务器端,DWR负责数据的传递和转换。这种从Java到JavaScript的远程调用功能的方式使DWR用起来有种非常像RMI或者SOAP的常规RPC机制,而且DWR的优点在于不需要任何的网页浏览器插件就能运行在网页上。 Java从根本上讲是同步机制,然而AJAX却是异步的。所以你调用远程方法时,当数据已经从网络上返回的时候,你要提供有反调 (callback) 功能的DWR。
DWR使用反射机制在转换过程中找到它应该使用的类型。有时候类型的信息无法获得,在这种情况下你要在此处用方法签名给予暗示。 signatures段使DWR能确定集合中存放的数据类型。例如下面的定义中我们无法知道list中存放的是什么类型。 public class Check { public void setLotteryResults(List nos) { ... } }
signatures段允许我们暗示DWR应该用什么类型去处理。格式对以了解JDK5的泛型的人来说很容易理解。 <signatures> <![CDATA[ import java.util.List; import com.example.Check; Check.setLotteryResults(List<Integer> nos); ]]> </signatures>
将来的DWR版本会使用一个更正式的解析器,这个编译器会基于官方Java定义,所以你最好不要使用太多这个不严格的东西。 signatures段只是用来确定泛型参数中的类型参数。DWR会自己使用反射机制或者运行时类型确定类型,或者假设它是一个String类型。所以: 不需要signatures - 没有泛型参数: public void method(String p); public void method(String[] p);
需要signatures - DWR不能通过反射确定: public void method(List<Date> p); public void method(Map<String, WibbleBean> p);
不需要signatures - DWR能正确的猜出: public void method(List<String> p); public void method(Map<String, String> p);
不需要signatures - DWR可以通过运行时类型确定: public List<Date> method(String p);
没有必要让Javascript中的所有对象的key都是String类型 - 你可以使用其他类型作为key。但是他们在使用之前会被转换成String类型。DWR1.x用Javascript的特性把key转换成String。DWR2.0可能会用toString()方法,在服务段进行这一转换。
评论 (0) All