`
clarancepeng
  • 浏览: 191582 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

AJAX篇(二) <DWR>

阅读更多
xml 代码
  1. AJAX 之DWR篇   
  2.   
  3. DWR为JAVA开发AJAX程序带来了很大的便截, 当年Webwork 2.0就是整合它与DOJO实现了AJAX功能的.   
  4. 现在它支持同webwork, struts, spring, hibernate, jsf, beehive等整合   
  5.   
  6. 1. DWR之util.js, engine.js, auth.js, dwr.xml, web.xml   
  7. 这几个文件是DWR的核心配置文件   
  8.  1) web.xml(加载DwrServlet, 配置对DWR的AJAX请求的处理), 在开发模式可以打开调试信息,只要把   
  9.  debug设置成true就可以了, 对于其它的配置参数的说明可以参考(http://getahead.org/dwr/server/servlet)   
  10.  <servlet>  
  11.   <servlet-name>dwr-invokerservlet-name>  
  12.   <servlet-class>org.directwebremoting.servlet.DwrServletservlet-class>  
  13.   <init-param>  
  14.     <param-name>debugparam-name>  
  15.     <param-value>trueparam-value>  
  16.   init-param>  
  17.  servlet>  
  18.     
  19.  <servlet-mapping>  
  20.   <servlet-name>dwr-invokerservlet-name>  
  21.   <url-pattern>/dwr/*url-pattern>  
  22.  servlet-mapping>  
  23.     
  24.  (1) 日志级别的设定   
  25.     <init-param>  
  26.      <param-name>logLevelparam-name>  
  27.      <param-value>DEBUGparam-value>  
  28.     init-param>    
  29.  (2) 有时侯为了系统的安全, 也可以针对不同的用户类型, 分别调用不同的dwr.xml   
  30.     <servlet>  
  31.       <servlet-name>dwr-user-invokerservlet-name>  
  32.       <servlet-class>uk.ltd.getahead.dwr.DWRServletservlet-class>  
  33.       <init-param>  
  34.         <param-name>config-userparam-name>  
  35.         <param-value>WEB-INF/dwr-user.xmlparam-value>  
  36.       init-param>  
  37.     servlet>  
  38.     <servlet>  
  39.       <servlet-name>dwr-admin-invokerservlet-name>  
  40.       <servlet-class>uk.ltd.getahead.dwr.DWRServletservlet-class>  
  41.       <init-param>  
  42.         <param-name>config-adminparam-name>  
  43.         <param-value>WEB-INF/dwr-admin.xmlparam-value>  
  44.       init-param>  
  45.     servlet>  
  46.     <servlet-mapping>  
  47.       <servlet-name>dwr-admin-invokerservlet-name>  
  48.       <url-pattern>/dwradmin/*url-pattern>  
  49.     servlet-mapping>  
  50.     <servlet-mapping>  
  51.       <servlet-name>dwr-user-invokerservlet-name>  
  52.       <url-pattern>/dwruser/*url-pattern>  
  53.     servlet-mapping>  
  54.        
  55.     <security-constraint>  
  56.       <display-name>dwr-admindisplay-name>  
  57.       <web-resource-collection>  
  58.         <web-resource-name>dwr-admin-collectionweb-resource-name>  
  59.         <url-pattern>/dwradmin/*url-pattern>  
  60.       web-resource-collection>  
  61.       <auth-constraint>  
  62.         <role-name>adminrole-name>  
  63.       auth-constraint>  
  64.     security-constraint>  
  65.     <security-constraint>  
  66.       <display-name>dwr-userdisplay-name>  
  67.       <web-resource-collection>  
  68.         <web-resource-name>dwr-user-collectionweb-resource-name>  
  69.         <url-pattern>/dwruser/*url-pattern>  
  70.       web-resource-collection>  
  71.       <auth-constraint>  
  72.         <role-name>userrole-name>  
  73.       auth-constraint>  
  74.     security-constraint>  
  75.   
  76.   (3) 使用Plug-ins   
  77.     <servlet>  
  78.       <servlet-name>dwr-invokerservlet-name>  
  79.       <servlet-class>org.directwebremoting.servlet.DwrServletservlet-class>  
  80.       <init-param>  
  81.         <param-name>org.directwebremoting.extend.ServerLoadMonitorparam-name>  
  82.         <param-value>com.example.MyCustomServerLoadMonitorparam-value>  
  83.       init-param>  
  84.     servlet>  
  85.     其它一些可以修改的配置   
  86.     Plug-in Points for DWR 2.0   
  87.        
  88.         * org.directwebremoting.Container   
  89.         * org.directwebremoting.WebContextFactory.WebContextBuilder   
  90.         * org.directwebremoting.ServerContextFactory.ServerContextBuilder   
  91.         * org.directwebremoting.servlet.UrlProcessor   
  92.         * org.directwebremoting.extend.AccessControl   
  93.         * org.directwebremoting.extend.AjaxFilterManager   
  94.         * org.directwebremoting.extend.ConverterManager   
  95.         * org.directwebremoting.extend.CreatorManager   
  96.         * org.directwebremoting.extend.DebugPageGenerator   
  97.         * org.directwebremoting.extend.HtmlCallMarshaller   
  98.         * org.directwebremoting.extend.HtmlPollHandler   
  99.         * org.directwebremoting.extend.PageNormalizer   
  100.         * org.directwebremoting.extend.PlainCallMarshaller   
  101.         * org.directwebremoting.extend.PlainPollHandler   
  102.         * org.directwebremoting.extend.Remoter   
  103.         * org.directwebremoting.extend.ScriptSessionManager   
  104.         * org.directwebremoting.extend.ServerLoadMonitor   
  105.        
  106.   
  107.  2) dwr.xml DWR配置文件的格式如下   
  108.     <!---->
  109.         "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"   
  110.         "http://www.getahead.ltd.uk/dwr/dwr10.dtd">  
  111.        
  112.     <dwr>  
  113.        
  114.       <!---->  
  115.       <init>  
  116.         <creator id="..." class="..."/>  
  117.         <converter id="..." class="..."/>  
  118.       init>  
  119.        
  120.       <!---->  
  121.       <allow>  
  122.         <create creator="..." javascript="..."/>  
  123.         <convert converter="..." match="..."/>  
  124.       allow>  
  125.        
  126.       <!---->  
  127.       <signatures>  
  128.         ...   
  129.       signatures>  
  130.        
  131.     dwr>    
  132.     (1) convert 类型转换   
  133.     以下的类型不需要转换   
  134.     boolean, byte, short, int, long, float, double, char, java.lang.Boolean, java.lang.Byte, java.lang.Short,    
  135.     java.lang.Integer, java.lang.Long, java.lang.Float, java.lang.Double, java.lang.Character, java.math.BigInteger,    
  136.     java.math.BigDecimal and java.lang.String      
  137.        
  138.     Javascript的Date类型对应于JAVA的java.util.Date, java.sql.Date, java.sql.Times 或者 java.sql.Timestamp. 作为最基   
  139.     本的converters, DateConverter是默认使用的.   
  140.     对于字符串"01 Jan 2010", 想在JAVA端得到Date类型, 有两种处理方式, 一种是在Javascript端调用Date.parse(), 而后DWR使用   
  141.     DateConverter进行处理, 另外一种是在JAVA端调用SimpleDateFormat等进行转换   
  142.        
  143.     Bean 和 Object Converters   
  144.     转换指定的类   
  145.     <convert converter="bean" match="your.full.package.BeanName"/>  
  146.     转换指定的包或者子包中的所有类   
  147.     <convert converter="bean" match="your.full.package.*"/>  
  148.     转换所有的JavaBean   
  149.     <convert converter="bean" match="*"/>  
  150.        
  151.     例子   
  152.     JavaBean代码:   
  153.     public class Remoted {   
  154.       public void setPerson(Person p) {   
  155.         // ...   
  156.       }   
  157.     }   
  158.        
  159.     public class Person {   
  160.       public void setName(String name) { ... }   
  161.       public void setAge(int age) { ... }   
  162.       // ...   
  163.     }      
  164.        
  165.     远程的Javascript代码:   
  166.     var p = { name:"Fred", age:21 };   
  167.     Remoted.setPerson(p);   
  168.        
  169.     限制一些属性的Conversion   
  170.     <convert converter="bean" match="com.example.Fred">  
  171.       <param name="exclude" value="property1, property2"/>  
  172.     convert>     
  173.        
  174.     <convert converter="bean" match="com.example.Fred">  
  175.       <param name="include" value="property1, property2"/>  
  176.     convert>     
  177.        
  178.     Collection Converters(对于集合的Conversion, 默认提供了一种Converter)   
  179.     <convert converter="collection" match="java.util.Collection"/>  
  180.     <convert converter="map" match="java.util.Map"/>  
  181.        
  182.     DOM Objects(DWR能自动转化来自DOM, DOM4J, JDOM和XOM的DOM树)   
  183.        
  184.     (2) create (创建供DWR调用的对象)   
  185.         <allow>  
  186.           <create creator="..." javascript="..." scope="...">  
  187.             <param name="..." value="..."/>  
  188.             <auth method="..." role="..."/>  
  189.             <exclude method="..."/>  
  190.             <include method="..."/>  
  191.           create>  
  192.           ...   
  193.         allow>  
  194.            
  195.         能使用的creator   
  196.     * new: 使用Java 'new' 操作符.   
  197.     * none: 不创建对象   
  198.     * scripted: 使用象BeanShell 或者 Groovy 通过 BSF创建.   
  199.     * spring: 通过spring架够去访问bean.   
  200.     * jsf: 使用来自JSF的对象   
  201.     * struts: 使用struts的FormBeans   
  202.     * pageflow: 访问Beehive 或者 Weblogic的页面流. (v1.1+)   
  203.     * ejb3: An experimental Creator to give access to EJB3 session beans.    
  204.       This code should not be seen as production quality until it has undergone more testing, and has an official maintainer. (v2.0+)   
  205.        
  206.     javascript 属性(定义在浏览器中能使用的对象的名字, 不过应该避免使用javascript的保留字)   
  207.        
  208.     scope属性(类型于JSP,可以使用 application, session, request和 page)   
  209.        
  210.     (3) Signatures in dwr.xml   
  211.     使用Signatures解决了集合中元素类型转化的问题   
  212.         <signatures>  
  213.           <!----> 
  214.           import java.util.List;  
  215.           Check.setLotteryResults(List<integer></integer>);  
  216.           ]]>  
  217.         signatures>       
  218.                
  219.         <signatures>  
  220.           <!----> 
  221.           import java.util.List;  
  222.           import java.util.Map ;  
  223.           Check.setConditions(Map);  
  224.           ]]>  
  225.         signatures>          
  226.            
  227.  3) 应用举例   
  228.     (1) public class Remote {   
  229.         public String getData(int index) { ... }   
  230.     }          
  231.        
  232.     <script type="text/javascript"  
  233.         src="[WEBAPP]/dwr/interface/Remote.js"> script>  
  234.     <script type="text/javascript"  
  235.         src="[WEBAPP]/dwr/engine.js"> script>  
  236.     ...   
  237.        
  238.     function handleGetData(str) {   
  239.       alert(str);   
  240.     }   
  241.        
  242.     Remote.getData(42, handleGetData);   
  243.     包含回调, 延时, 错误处理   
  244.     Remote.getData(42, {   
  245.       callback:function(str) { alert(str); },   
  246.       timeout:5000,   
  247.       errorHandler:function(message) { alert("Oops: " + message); }   
  248.     });   
  249.        
  250.     (2) 使用AJAX实现数据的修改   
  251.         public class Remote {   
  252.           public void setPerson(Person p) {   
  253.             this.person = p;   
  254.           }   
  255.         }   
  256.   
  257.         public Person {   
  258.           private String name;   
  259.           private int age;   
  260.           private Date[] appointments;   
  261.           // getters and setters ...   
  262.         }   
  263.   
  264.         var p = {   
  265.           name:"Fred Bloggs",   
  266.           age:42,   
  267.           appointments:[ new Date(), new Date("1 Jan 2008") ]   
  268.         };   
  269.         Remote.setPerson(p);   
  270.   
  271.     4) engine.js(DWR框架的核心, 不管在哪里使用DWR都需要这个文件, 它能动态产生那些接口的JS)   
  272.         <script type='text/javascript'  
  273.             src='/[YOUR-WEB-APP]/dwr/engine.js'>  
  274.         script>      
  275.            
  276.         DWREngine.setX会对所有的调用者生效   
  277.         DWREngine.setTimeout(1000);   
  278.   
  279.         单个方法的调用   
  280.             Remote.singleMethod(params, {   
  281.               callback:function(data) { ... },   
  282.               timeout:2000   
  283.             });        
  284.         多个方法的披处理   
  285.             DWREngine.beginBatch();   
  286.             Remote.methodInBatch1(params, callback1);   
  287.             Remote.methodInBatch2(params, callback2);   
  288.             DWREngine.endBatch({   
  289.               timeout:3000   
  290.             });        
  291.   
  292.     5) util.js (util.js包含一些常用的涵数, 帮助你去更新页面的内容)                 
  293.     * $() $ = document.getElementById   
  294.     * addOptions and removeAllOptions   
  295.                 var sel = DWRUtil.getValue(id);   
  296.                 DWRUtil.removeAllOptions(id);   
  297.                 DWRUtil.addOptions(id, ...);   
  298.                 DWRUtil.setValue(id, sel);   
  299.                 DWRUtil.addOptions(id, ["Please select ..."]);      
  300.   
  301.                 <p><code>DWRUtil.addOptions( "demo2",    
  302.                   <textarea id="oadata" rows="6" cols="45" style="vertical-align:top;" >[   
  303.                   { name:'Africa', population:'800m' },   
  304.                   { name:'America', population:'900m' },   
  305.                   { name:'Asia', population:'3000m' },   
  306.                   { name:'Australasia', population:'31m' },   
  307.                   { name:'Europe', population:'700m' }   
  308.                 ]textarea>,   
  309.                 <input id="oavalueprop" value="name"/>  
  310.                 )code>  
  311.                 <input type="button" onclick="DWRUtil.addOptions('demo2', eval($('oadata').value), $('oavalueprop').value);" value="Show Me"/>  
  312.                 p>  
  313.                    
  314.                 <p><code>DWRUtil.addOptions( "demo3",    
  315.                   <textarea id="aadata" rows="6" cols="35" style="vertical-align:top;" >[   
  316.                   { name:'Africa', id:'AF' },   
  317.                   { name:'America', id:'AM' },   
  318.                   { name:'Asia', id:'AS' },   
  319.                   { name:'Australasia', id:'AU' },   
  320.                   { name:'Europe', id:'EU' }   
  321.                 ]textarea>,   
  322.                    
  323.                 <input id="aavalueprop" value="id" size="4"/>,   
  324.                 <input id="aatextprop" value="name" size="10"/>  
  325.                 )code>  
  326.                 <input type="button" onclick="DWRUtil.addOptions('demo3', eval($('aadata').value), $('aavalueprop').value, $('aatextprop').value);" value="Show Me"/>  
  327.                 p>  
  328.                                 
* addRows and removeAllRows
   list with <code>id="demo3"</code>: <select id="demo3"> </select> <
分享到:
评论

相关推荐

    DWR开发入门教程--配置与开发

    &lt;script src='dwr/interface/testClass.js'&gt;&lt;/script&gt; &lt;script src='dwr/engine.js'&gt;&lt;/script&gt; &lt;script src='dwr/util.js'&gt;&lt;/script&gt; function callTestMethod1() { testClass.testMethod1(); } ``` - `dwr/...

    DWR初学者笔记,dwr入门

    &lt;script type='text/javascript' src='/DWRTest/dwr/interface/JDate.js'&gt;&lt;/script&gt; &lt;script type='text/javascript' src='/DWRTest/dwr/engine.js'&gt;&lt;/script&gt; &lt;script type='text/javascript' src='/DWRTest/dwr/...

    AJAX框架DWR简单应用.pdf

    &lt;script type="text/javascript" src="/dwrtest/dwr/interface/Hello.js"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt; function getMessage(name) { var nameValue = document.getElementById(name).value; ...

    DWR使用方法-step by step

    本篇文章将从安装DWR、配置相关文件到创建配置文件等方面,详细介绍如何使用DWR进行Ajax开发。 #### 二、安装DWR JAR文件 首先,你需要下载DWR的`dwr.jar`文件,并将其放置于web应用的`WEB-INF/lib`目录下。通常,...

    JSF中配置dwr

    &lt;artifactId&gt;dwr&lt;/artifactId&gt; &lt;version&gt;3.x.x&lt;/version&gt; &lt;/dependency&gt; &lt;!-- 其他依赖,如json-lib等 --&gt; &lt;/dependencies&gt; ``` 确保版本号与提供的文件对应。 2. **创建DWR配置**:在你的项目中创建一个名为`...

    spring使用annotation整合dwr笔记

    &lt;servlet-name&gt;dwr&lt;/servlet-name&gt; &lt;servlet-class&gt;org.directwebremoting.spring.DwrSpringServlet&lt;/servlet-class&gt; &lt;init-param&gt; &lt;param-name&gt;debug&lt;/param-name&gt; &lt;param-value&gt;true&lt;/param-value&gt; &lt;/init-...

    dwr相关配置笔记 代码说明

    &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; ``` 为了便于调试,可以添加`debug`初始化参数,设置为`true`,以便在`http://localhost:port/app/dwr`访问DWR自动生成的测试页面,检查和测试Java方法。但...

    dwr实现消息精确推送

    &lt;script type="text/javascript" src="&lt;%=basepath%&gt;dwr/interface/MessagePush.js"&gt;&lt;/script&gt; ``` 其中,`engine.js`和`util.js`是DWR提供的基础库文件,而`MessagePush.js`则是在`dwr.xml`中定义的接口文件。 ##...

    适用于初学者的AJAX相关基础使用教程

    &lt;servlet-name&gt;DWR&lt;/servlet-name&gt; &lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;/servlet-class&gt; &lt;init-param&gt; &lt;param-name&gt;debug&lt;/param-name&gt; &lt;param-value&gt;true&lt;/param-value&gt; &lt;/init-param&gt;...

    DWR教程

    &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; ``` 这样,所有以`/dwr/`开头的URL请求都会被DWRServlet处理。 #### 1.2 调试模式 如果想要启用DWR的调试模式,可以在Servlet配置中添加`debug`参数: ```...

    dwr所需要的jar包

    &lt;script src="/dwr/interface/MyService.js"&gt;&lt;/script&gt; &lt;script src="/dwr/engine.js"&gt;&lt;/script&gt; &lt;script src="/dwr/util.js"&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;button onclick="callServer()"&gt;调用服务器&lt;/button&gt; ...

    dwr学习入门资料

    &lt;servlet-name&gt;dwr_servlet&lt;/servlet-name&gt; &lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;/servlet-class&gt; &lt;init-param&gt; &lt;param-name&gt;debug&lt;/param-name&gt; &lt;param-value&gt;true&lt;/param-value&gt; &lt;/...

    dwr配置和使用详解

    &lt;script type="text/javascript" src="/dwr/interface/TestService.js"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt; TestService.sayHello(function(response) { alert('服务器返回:' + response); }); &lt;/script...

    ajax配置模版

    本篇笔记主要介绍了一个具体的AJAX配置示例,它涉及了Spring框架、Direct Web Remoting (DWR) 和Hibernate等技术的应用。下面将详细解析这些配置代码的关键部分及其作用。 #### 二、web.xml配置分析 **1. Spring上...

    SSH集成DWR

    &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; ``` 3. **创建Java接口**:定义一个Java接口,该接口的方法将被暴露给JavaScript调用。例如: ```java public interface MyService { List&lt;User&gt; ...

    dwr如何使用

    &lt;script type="text/javascript" src="/dwr/interface/UserService.js"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="/dwr/engine.js"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt; window.onload = function...

    Ajax_Dwr基于dwr组件使用的ajax效果

    本篇文章将深入探讨如何使用DWR组件来实现Ajax效果,并提供一个名为AjaxDemo的示例项目。 **1. DWR简介** DWR是一款开源的Java库,它允许JavaScript代码直接调用Java方法,就像它们是本地函数一样。DWR自动处理了...

    dwr helloworld

    &lt;script src="/dwr/interface/HelloWorld.js"&gt;&lt;/script&gt; &lt;script src="/dwr/engine.js"&gt;&lt;/script&gt; &lt;script src="/dwr/util.js"&gt;&lt;/script&gt; &lt;script&gt; function displayMessage() { HelloWorld.sayHello(function...

    javaSSH框架搭建配置

    &lt;servlet-name&gt;dwr&lt;/servlet-name&gt; &lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;dwr&lt;/servlet-name&gt; &lt;url-pattern&gt;/dwr/*&lt;/url-...

    dwr3实现推送功能

    DWR (Direct Web Remoting) 是一个开源的Java库,它允许JavaScript在浏览器端与服务器端的Java对象进行交互,从而实现AJAX(Asynchronous JavaScript and XML)应用。在DWR 3版本中,它提供了丰富的API和工具,使得...

Global site tag (gtag.js) - Google Analytics