AJAX篇(二)

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> <

你可能感兴趣的:(JavaScript,java,Ajax,servlet,DWR)