乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      DWR的學(xué)習(xí)文檔(Hello World,類型轉(zhuǎn)換,Spring,Annotation)

       looline 2006-12-29
       

       DWR的學(xué)習(xí)文檔(Hello World,類型轉(zhuǎn)換,Spring,Annotation)
      Email:javafish@sunxin.org
      DWR是作為遠程調(diào)用的ajax框架,將服務(wù)端的java類,方法和瀏覽器的javascript的類,方法對應(yīng)起來?,F(xiàn)在官方最新的版本是DWR2.0,可以在http:///dwr/download下載到。
      我們真對DWR2.0做一些例子講解一下它的特性:
      Hello World:
      新建一個web項目DWRStudy,在項目中構(gòu)建路徑中加入dwr.jar,
      新建類Hello如下:
      代碼
      1. package org.li.dwr;   
      2.   
      3. package org.li.dwr;   
      4.   
      5. import java.util.Date;   
      6.   
      7. public class Hello   
      8. {   
      9.     public String getHelloWorld()   
      10.     {   
      11.         return "現(xiàn)在的時間為:"+new Date();   
      12.     }   
      13. }  

      在WEB-INF目錄下新建dwr.xml文件:
      代碼
      1. <?xml version="1.0" encoding="UTF-8"?>  
      2. <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www./dwr/dwr20.dtd">  
      3. <dwr>  
      4.     <allow>  
      5.     <!-- javascript的對象是jshello,create="new"是DWR自己創(chuàng)建類 -->  
      6.         <create javascript="jshello" creator="new" scope="application">  
      7.             <param name="class" value="org.li.dwr.Hello"></param>  
      8.         </create>  
      9.     </allow>  
      10. </dwr>  

      在WebRoot目錄里新建hello.js
      代碼
      1. function load()//載入的時候調(diào)用   
      2. {   
      3.     var jbutton = document.getElementById("jbutton");   
      4.     jbutton.onclick=function(event)//注冊按鈕點擊事件   
      5.     {   
      6.         jbClick();   
      7.     };   
      8. }   
      9. function jbClick()//按鈕點擊事件   
      10. {   
      11.     jshello.getHelloWorld(callback);//沒有參數(shù)傳遞,只傳遞回調(diào)函數(shù)就行   
      12. }   
      13. function callback(msg)//回調(diào)函數(shù)   
      14. {   
      15.     DWRUtil.setValue(‘jdiv‘,msg);   
      16. }  

      在WebRoot目錄里新建HelloWorld.html
      代碼
      1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
      2. <html>  
      3.   <head>  
      4.     <title>HelloWorld.html</title>  
      5.     <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
      6.     <script type=‘text/javascript‘ src=‘dwr/interface/jshello.js‘></script>  
      7.     <script type=‘text/javascript‘ src=‘dwr/engine.js‘></script>  
      8.     <script type=‘text/javascript‘ src=‘dwr/util.js‘></script>  
      9.     <script type="text/javascript" src="hello.js"></script>  
      10.   
      11.   </head>  
      12.      
      13.   <body>  
      14.     <input id="jbutton" type="button" value="得到Hello World"/>  
      15.     <div id="jdiv"></div>  
      16.     <script>load()</script>  
      17.   </body>  
      18. </html>  

      在web.xml中加入一個dwr的servlet:
      代碼
      1. <servlet>  
      2.         <servlet-name>dwr-invoker</servlet-name>  
      3.         <servlet-class>  
      4.             org.directwebremoting.servlet.DwrServlet   
      5.         </servlet-class>  
      6.         <init-param>  
      7.             <param-name>debug</param-name>  
      8.             <param-value>true</param-value>  
      9.         </init-param>  
      10.         <load-on-startup>1</load-on-startup>  
      11.     </servlet>  
      12.   
      13.     <servlet-mapping>  
      14.         <servlet-name>dwr-invoker</servlet-name>  
      15.         <url-pattern>/dwr/*</url-pattern>  
      16.     </servlet-mapping>  

      在運行一下服務(wù)器在瀏覽器里輸入http://localhost:8080/DWRStudy/HelloWorld.html,然后點一下按鈕下面就會顯示服務(wù)端的系統(tǒng)時間了,而瀏覽器頁面并沒有被刷新。
      下面解釋一下:
      1. 新建的Hello類中有一個getHelloWorld方法這個方法就是作為遠程調(diào)用的服務(wù)端方法,這個Hello類也就是遠程調(diào)用的類。方法的返回值為服務(wù)端當前的時間
      2. dwr.xml是DWR用來配置服務(wù)端類和瀏覽器端javascript類之間的映射??梢韵螺ddtd看一下,在<allow></allow>里類配置映射類如:<create javascript="jshello" creator="new" scope="application">
      <param name="class" value="org.li.dwr.Hello"></param>
      </create>
      javascript="jshello"是在瀏覽器端的javascript的映射的類名,(不要用javascript里的關(guān)鍵字)creator="new"是表示這個類是dwr自己創(chuàng)建的,如果creator="new"那么就必須有下面的<param name=”class” value=”類的全路徑”></param>,creator還可為spring(與spring集成的時候),script(與apache的一個框架BSF集成的時候用),后來又加入了struts,jsf,ejb3.現(xiàn)在是個HelloWorld讓大家體驗一下,具體后面會細講。最后的scope=”application”是說這個pojo類的范圍,和jsp是一樣的。
      3. 創(chuàng)建hello.js和HelloWorld.html都是看自己是怎么發(fā)揮了,注意的是在HelloWorld.html中導(dǎo)入js文件的時候注意順序和路徑命名規(guī)律,自己發(fā)揮的這個hello.js一定放在后面,因為要調(diào)用其它js文件中的函數(shù)。由于在HelloWorld.html里寫入了<script>load()</script>所以在html加載的時候會調(diào)用hello.js里的load方法(注意這幾個js文件里的函數(shù)最好不要重名)在load里面做的事情就是注冊一下id為jbutton的按鈕的點擊事件。當我們點擊id為jbutton的按鈕的時候就開始用與服務(wù)器端的類相對應(yīng)的javascript類了(jshello),直接調(diào)用jshello類的getHelloWorld方法,可以向函數(shù)傳遞參數(shù),不過要在最后加一個回調(diào)函數(shù)。而我們的服務(wù)端的類沒有參數(shù)就直接傳回調(diào)函數(shù)了。在回調(diào)函數(shù)的形參msg是服務(wù)端Hello類中g(shù)etHelloWorld方法返回值。在回調(diào)函數(shù)里面調(diào)用了DWR的工具類DWRUtil類的setValue方法設(shè)置id為jdiv的值。另外我們把doucment.getElementById(“jbutton”);換與$(“jbutton”)也可以得到同樣的效果,這就有點像prototype了。
      4. 在web.xml里加入DWRServlet的配置一是為了遠程調(diào)用,二是自動生成了<script type=‘text/javascript‘ src=‘dwr/interface/jshello.js‘></script>
      <script type=‘text/javascript‘ src=‘dwr/engine.js‘></script>
      <script type=‘text/javascript‘ src=‘dwr/util.js‘></script>文件。
      上個HelloWorld例子只是返回了一個字符串,當然我們顯示字符串很容易,可是如果返回一個對象怎么辦呢?,DWR為我們將java類和javascript的DOM對象,不過這得需要我們在dwr.xml里配置。
      再看一個綜合的例子:
      新建類User
      代碼
      1. package org.li.dwr;   
      2.   
      3. import java.io.FileInputStream;   
      4. import java.io.FileNotFoundException;   
      5. import java.io.IOException;   
      6. import java.util.ArrayList;   
      7. import java.util.List;   
      8. import java.util.Properties;   
      9.   
      10. public class User   
      11. {   
      12.     private String welcome;   
      13.     private String username;   
      14.     private String address;   
      15.     private List<Book> books;   
      16.     private int age;   
      17.     public String getAddress()   
      18.     {   
      19.         return address;   
      20.     }   
      21.     public void setAddress(String address)   
      22.     {   
      23.         this.address = address;   
      24.     }   
      25.     public int getAge()   
      26.     {   
      27.         return age;   
      28.     }   
      29.     public void setAge(int age)   
      30.     {   
      31.         this.age = age;   
      32.     }   
      33.     public String getUsername()   
      34.     {   
      35.         return username;   
      36.     }   
      37.     public void setUsername(String username)   
      38.     {   
      39.         this.username = username;   
      40.     }   
      41.     public String getWelcome()   
      42.     {   
      43.         return welcome;   
      44.     }   
      45.     public void setWelcome(String welcome)   
      46.     {   
      47.         this.welcome = welcome;   
      48.     }   
      49.     public List<Book> getBooks()   
      50.     {   
      51.         return books;   
      52.     }   
      53.     public void setBooks(List<Book> books)   
      54.     {   
      55.         this.books = books;   
      56.     }   
      57.     public List<Book> getBook()   
      58.     {   
      59.         this.books = new ArrayList<Book>();   
      60.         Book javaBook = new Book();   
      61.         Book vcBook = new Book();   
      62.         javaBook.setAuthor("孫鑫");   
      63.         vcBook.setAuthor("孫鑫");   
      64.         javaBook.setName("java Web開發(fā)詳解");   
      65.         vcBook.setName("vc++深入詳解");   
      66.         this.books.add(javaBook);   
      67.         this.books.add(vcBook);   
      68.         return this.books;   
      69.     }   
      70.     public User getUser(String welcome)   
      71.     {   
      72.         this.welcome=welcome;   
      73.         try  
      74.         {   
      75.             FileInputStream fis = new FileInputStream("D:\\workspace\\DWRStudy\\src\\user.properties");   
      76.             Properties pp = new Properties();   
      77.             pp.load(fis);   
      78.             this.username=pp.getProperty("username");   
      79.             this.age=Integer.valueOf(pp.getProperty("age"));   
      80.             this.address=pp.getProperty("address");   
      81.             fis.close();   
      82.         }   
      83.         catch (FileNotFoundException e)   
      84.         {   
      85.             // TODO Auto-generated catch block   
      86.             e.printStackTrace();   
      87.         }   
      88.         catch (IOException e)   
      89.         {   
      90.             // TODO Auto-generated catch block   
      91.             e.printStackTrace();   
      92.         }   
      93.         return this;   
      94.     }   
      95. }   

      新建Book類:
      代碼
      1. package org.li.dwr;   
      2.   
      3. public class Book   
      4. {   
      5.     private String name;   
      6.     private String author;   
      7.     public String getAuthor()   
      8.     {   
      9.         return author;   
      10.     }   
      11.     public void setAuthor(String author)   
      12.     {   
      13.         this.author = author;   
      14.     }   
      15.     public String getName()   
      16.     {   
      17.         return name;   
      18.     }   
      19.     public void setName(String name)   
      20.     {   
      21.         this.name = name;   
      22.     }   
      23. }  

      新建DWRLog類
      代碼
      1. package org.li.dwr.log;   
      2.   
      3. import java.lang.reflect.Method;   
      4.   
      5. import org.directwebremoting.AjaxFilterChain;   
      6.   
      7. public class DWRLog implements org.directwebremoting.AjaxFilter   
      8. {   
      9.   
      10.     public Object doFilter(Object obj, Method method, Object[] params, AjaxFilterChain chain) throws Exception   
      11.     {   
      12.         System.out.println("過濾器Log輸出:..對象:"+obj.getClass().getName()+"方法:"+method.getName());   
      13.         return chain.doFilter(obj, method,params);   
      14.     }   
      15.        
      16. }  

      新建D:\\workspace\\DWRStudy\\src\\user.properties
      username=javafish
      age=21
      address=北京市海淀區(qū)
      然后在dwr.xml里加入
      代碼
      1. <create javascript="jsuser" creator="new">  
      2.             <param name="class" value="org.li.dwr.User"></param>  
      3.             <!-- 過濾允許調(diào)用的方法 -->  
      4.             <include method="getUser"/>  
      5.             <include method="getBook"/>  
      6.             <!-- 配置自己的過濾器 -->  
      7.             <filter class="org.li.dwr.log.DWRLog"></filter>  
      8.         </create>  
      9.         <!-- 需要轉(zhuǎn)換的類 -->  
      10.         <convert match="org.li.dwr.User" converter="bean"></convert>  
      11.         <convert match="org.li.dwr.Book" converter="bean"></convert>  

      新建UserInfo.html
      代碼
      1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
      2. <html>  
      3.   <head>  
      4.     <title>UserInfo.html</title>  
      5.     <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
      6.     <script type=‘text/javascript‘ src=‘dwr/interface/jsuser.js‘></script>  
      7.     <script type=‘text/javascript‘ src=‘dwr/engine.js‘></script>  
      8.     <script type=‘text/javascript‘ src=‘dwr/util.js‘></script>  
      9.     <script type="text/javascript" src="userInfo.js"></script>  
      10.   
      11.   </head>  
      12.      
      13.   <body>  
      14.     請輸入你的名字:   
      15.     <input id="name" type="text"/>  
      16.     <input id="jbutton" type="button" value="得到j(luò)avafish的信息"/>  
      17.     <input id="sbutton" type="button" value="得到j(luò)avafish的書"/>  
      18.     <div id="result"></div>  
      19.     <script>load()</script>  
      20.   </body>  
      21. </html>  

      新建userInfo.js
      代碼
      1. function load()   
      2. {   
      3.     var jbutton = $("jbutton");   
      4.     jbutton.onclick=function(event)   
      5.     {   
      6.         bOnClick();   
      7.     };   
      8.     var sbutton = $("sbutton");   
      9.     sbutton.onclick=function(event)   
      10.     {   
      11.         sOnClick();   
      12.     };   
      13. }   
      14. function bOnClick()   
      15. {   
      16.     jsuser.getUser($("name").value,callback);   
      17. }   
      18. function callback(msg)   
      19. {   
      20.     var user = msg;   
      21.     DWRUtil.setValue(‘result‘,"歡迎你!"+user.welcome+"   姓名:"+user.username+",年齡:"+user.age+",住址:"+user.address+user.books[0].author);   
      22. }   
      23.   
      24. function sOnClick()   
      25. {   
      26.     jsuser.getBook(callbackBooks);   
      27. }   
      28. function callbackBooks(msg)   
      29. {   
      30.     alert(msg);   
      31.     DWRUtil.setValue(‘result‘,msg);   
      32. }  

      運行服務(wù)器輸入http://localhost:8080/DWRStudy/UserInfo.html,可看到運行結(jié)果
      這個例子需要解釋的就是dwr.xml了
      在這里用到了兩個java類,User、Book,方法呢就是User.getUser和User.getBook,而Book類呢由于我們沒有在javascript中調(diào)用,所以就不用配置Book的create了。
      大家可能會奇怪為什么會多出來兩個<convert match="org.li.dwr.User" converter="bean"></convert>
      <convert match="org.li.dwr.Book" converter="bean"></convert>
      呢,是因為在調(diào)用getBook和getUser的時候會返回給javascript有關(guān)User和Book的對象或數(shù)據(jù),這里的用<convert match=”類” converter=”bean”/>做一下轉(zhuǎn)換,否則javascript將不會得到有效的數(shù)據(jù)。
      下面討論一下DWR的安全性,由于我們將javaBean整體都對外暴露了,所以說會有非常多的安全問題,真對這些DWR也作了一些的措施就是上面例子中dwr.xml的配置:
      <include method="getUser"/>
      <include method="getBook"/>
      <filter class="org.li.dwr.log.DWRLog"></filter>
      這樣配置的話就只暴露了User類的兩個方法getUser,getBook。就相對安全多了,相反還有<exclude>的配置它們是類似的。對于安全我們也可以用DWR的過濾器來實現(xiàn),這里我用過濾器實現(xiàn)的是一個日志記錄。過濾器類只需要實現(xiàn)AjaxFilter接口就可以了,不過注意的是這個過濾器不是HttpServelt的過濾器而是DWR自己內(nèi)部實現(xiàn)的(有興趣可以查看一下源代碼)。
      真對DWR的安全性上來說,官方也不敢保證,官方只是說自己可以看一下源代碼因地施宜。
      不過DWR可以和acegi集成,讓acegi來管理安全問題。由于acegi我還沒有完全搞定關(guān)于DWR和acegi的集成,先放一放日后補充。
      下面對DWR.xml的配置具體補充一下:
      首先是<init></init>里面有<converter>和<create>是配置在初始化的時候需要創(chuàng)建和轉(zhuǎn)化的類。
      然后是<allow></allow>里面有<converter>和<create>這個地方就是正式的配置了,creator里有param,filter,include,exclude,auth,除了auth我們都接觸過了,而auth是集成J2EE的安全認證用的,這個可能和acegi的集成有關(guān)吧(?)。<converter>呢,它的converter有很多
      Array Converter
      Bean and Object Converters
      Collection Converter
      Enum Converter
      DOM Objects
      這些都是轉(zhuǎn)換的時候配置的
      還有就是<signatures></signatures>的配置了,申明一些不java用反射不可得到的參數(shù)類型。
      我在上面例子上用的getBook來本來想用signatures實現(xiàn)List<Book>的轉(zhuǎn)換可是沒有成功(不用配置就可以)
      主要是真對jdk1.4以下的,我本機用的是jdk6,所以屢試不爽最后在官方DWR2的特性中看到如果你用的是DWR2和JDK5以上的話就不用配置了DWR會自動轉(zhuǎn)換。
      下面講一下DWR與Spring的集成:
      還是上面那個例子用Spring搞定大部分和上面一樣
      新建類User(包換了)
      代碼
      1. package org.li.dwr.spring;   
      2.   
      3. import java.util.List;   
      4.   
      5. import org.li.dwr.Book;   
      6.   
      7. public class User   
      8. {   
      9.     private String welcome;   
      10.     private String username;   
      11.     private String address;   
      12.     private List<Book> books;   
      13.     private int age;   
      14.     public String getAddress()   
      15.     {   
      16.         return address;   
      17.     }   
      18.     public void setAddress(String address)   
      19.     {   
      20.         this.address = address;   
      21.     }   
      22.     public int getAge()   
      23.     {   
      24.         return age;   
      25.     }   
      26.     public void setAge(int age)   
      27.     {   
      28.         this.age = age;   
      29.     }   
      30.     public String getUsername()   
      31.     {   
      32.         return username;   
      33.     }   
      34.     public void setUsername(String username)   
      35.     {   
      36.         this.username = username;   
      37.     }   
      38.     public String getWelcome()   
      39.     {   
      40.         return welcome;   
      41.     }   
      42.     public void setWelcome(String welcome)   
      43.     {   
      44.         this.welcome = welcome;   
      45.     }   
      46.     public List<Book> getBooks()   
      47.     {   
      48.         return books;   
      49.     }   
      50.     public void setBooks(List<Book> books)   
      51.     {   
      52.         this.books = books;   
      53.     }   
      54.     public User getUser(String welcome)   
      55.     {   
      56.         this.welcome=welcome;   
      57.         return this;   
      58.     }   
      59. }  

      Book還是以前那個
      在src下新建application.xml文件(spring的配置文件)
      代碼
      1. <?xml version="1.0" encoding="UTF-8"?>  
      2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www./dtd/spring-beans.dtd">  
      3.   
      4. <beans>  
      5.     <bean id="user" class="org.li.dwr.spring.User">  
      6.         <property name="username">  
      7.             <value>javafish</value>  
      8.         </property>  
      9.         <property name="age">  
      10.             <value>21</value>  
      11.         </property>  
      12.         <property name="address">  
      13.             <value>北京市海淀區(qū)</value>  
      14.         </property>  
      15.     </bean>  
      16. </beans>  

      在dwr.xml加入:
      代碼
      1. <create javascript="springUser" creator="spring">  
      2.             <param name="beanName" value="user"></param>  
      3.             <!-- 指定Spring配置文件的位置,如果沒設(shè)置DWR會根據(jù)web.xml找到主配置文件,不過速度上就慢了 -->  
      4.             <param name="location" value="applicationContext.xml"></param>  
      5.         </create><convert match="org.li.dwr.spring.User" converter="bean"></convert>  

      新建springUserInfo.html
      代碼
      1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
      2. <html>  
      3.   <head>  
      4.     <title>UserInfo.html</title>  
      5.     <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
      6.     <script type=‘text/javascript‘ src=‘dwr/interface/springUser.js‘></script>  
      7.     <script type=‘text/javascript‘ src=‘dwr/engine.js‘></script>  
      8.     <script type=‘text/javascript‘ src=‘dwr/util.js‘></script>  
      9.     <script type="text/javascript" src="springuserInfo.js"></script>  
      10.   
      11.   </head>  
      12.      
      13.   <body>  
      14.     請輸入你的名字:   
      15.     <input id="name" type="text"/>  
      16.     <input id="jbutton" type="button" value="得到j(luò)avafish(spring)的信息"/>  
      17.     <div id="result"></div>  
      18.     <script>load()</script>  
      19.   </body>  
      20. </html>  

      新建springUserInfo.js
      代碼
      1. function load()   
      2. {   
      3.     var jbutton = $("jbutton");   
      4.     jbutton.onclick=function(event)   
      5.     {   
      6.         bOnClick();   
      7.     };   
      8.     var sbutton = $("sbutton");   
      9.     sbutton.onclick=function(event)   
      10.     {   
      11.         sOnClick();   
      12.     };   
      13. }   
      14. function bOnClick()   
      15. {   
      16.     springUser.getUser($("name").value,callback);   
      17. }   
      18. function callback(msg)   
      19. {   
      20.     var user = msg;   
      21.     DWRUtil.setValue(‘result‘,"歡迎你!"+user.welcome+"   姓名:"+user.username+",年齡:"+user.age+",住址:"+user.address);   
      22. }  

      在web.xml中加入
      <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
      </context-param>
      <listener>
      <listener-class>
      org.springframework.web.context.ContextLoaderListener
      </listener-class>
      </listener>
      運行服務(wù)器輸入http://localhost:8080/DWRStudy/springUserInfo.html,可以看到運行結(jié)果
      主要的區(qū)別是dwr.xml的配置,需要在creator=spring,然后里面的<param>的name用beanName,值是spring的配置文件里的bean的id。Name=location是指定spring的配置文件的路徑(如果不指定DWR可以根據(jù)web.xml自動找到spring的主配置文件)。
      DWR的Annotation配置
      還是上面spring那個例子的功能再來一遍(new 的配置太簡單),這樣的話項目中的dwr.xml對于這個例子就沒有作用了
      新建User類(包名換了)
      代碼
      1. package org.li.dwr.spring.annotation;   
      2.   
      3. import java.util.List;   
      4.   
      5. import org.directwebremoting.annotations.Convert;   
      6. import org.directwebremoting.annotations.Create;   
      7. import org.directwebremoting.annotations.Param;   
      8. import org.directwebremoting.annotations.RemoteMethod;   
      9. import org.directwebremoting.annotations.RemoteProperty;   
      10. import org.directwebremoting.convert.BeanConverter;   
      11. import org.directwebremoting.spring.SpringCreator;   
      12. import org.li.dwr.Book;   
      13.   
      14. @Create(creator=SpringCreator.class,name="anspringuser",creatorParams={@Param(name="beanName",value="anuser"),@Param(name="location",value="applicationContext.xml")})   
      15. @Convert(converter=BeanConverter.class)   
      16. public class User   
      17. {   
      18.     private String welcome;   
      19.     private String username;   
      20.     @RemoteProperty  
      21.     private String address;   
      22.     private List<Book> books;   
      23.     private int age;   
      24.     public String getAddress()   
      25.     {   
      26.         return address;   
      27.     }   
      28.     public void setAddress(String address)   
      29.     {   
      30.         this.address = address;   
      31.     }   
      32.     public int getAge()   
      33.     {   
      34.         return age;   
      35.     }   
      36.     public void setAge(int age)   
      37.     {   
      38.         this.age = age;   
      39.     }   
      40.     public String getUsername()   
      41.     {   
      42.         return username;   
      43.     }   
      44.     public void setUsername(String username)   
      45.     {   
      46.         this.username = username;   
      47.     }   
      48.     public String getWelcome()   
      49.     {   
      50.         return welcome;   
      51.     }   
      52.     public void setWelcome(String welcome)   
      53.     {   
      54.         this.welcome = welcome;   
      55.     }   
      56.     public List<Book> getBooks()   
      57.     {   
      58.         return books;   
      59.     }   
      60.     public void setBooks(List<Book> books)   
      61.     {   
      62.         this.books = books;   
      63.     }   
      64.     @RemoteMethod  
      65.     public User getUser(String welcome)   
      66.     {   
      67.         this.welcome=welcome;   
      68.         return this;   
      69.     }   
      70. }   

      新建過濾器類DWRAnLog
      代碼
      1. package org.li.dwr.log.annotation;   
      2.   
      3. import java.lang.reflect.Method;   
      4.   
      5. import org.directwebremoting.AjaxFilter;   
      6. import org.directwebremoting.AjaxFilterChain;   
      7. import org.directwebremoting.annotations.Filter;   
      8. import org.directwebremoting.filter.SpringTransactionAjaxFilter;   
      9. @Filter(type=SpringTransactionAjaxFilter.class)   
      10. public class DWRAnLog implements AjaxFilter   
      11. {   
      12.   
      13.     public Object doFilter(Object obj, Method method, Object[] params, AjaxFilterChain chain) throws Exception   
      14.     {   
      15.         System.out.println("annotation過濾器Log輸出:..對象:"+obj.getClass().getName()+"方法:"+method.getName());   
      16.         return chain.doFilter(obj, method, params);   
      17.     }   
      18.   
      19. }  

      在spring的applicationContext.xml里加入
      代碼
      1. <bean id="anuser" class="org.li.dwr.spring.annotation.User">  
      2.         <property name="username">  
      3.             <value>javafish</value>  
      4.         </property>  
      5.         <property name="age">  
      6.             <value>21</value>  
      7.         </property>  
      8.         <property name="address">  
      9.             <value>北京市海淀區(qū)</value>  
      10.         </property>  
      11.     </bean>  

      新建AnSpringUserInfoHtml.html
      代碼
      1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
      2. <html>  
      3.   <head>  
      4.     <title>UserInfo.html</title>  
      5.     <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
      6.     <script type=‘text/javascript‘ src=‘dwr/interface/anspringuser.js‘></script>  
      7.     <script type=‘text/javascript‘ src=‘dwr/engine.js‘></script>  
      8.     <script type=‘text/javascript‘ src=‘dwr/util.js‘></script>  
      9.     <script type="text/javascript" src="anspringuserInfo.js"></script>  
      10.   
      11.   </head>  
      12.      
      13.   <body>  
      14.     請輸入你的名字:   
      15.     <input id="name" type="text"/>  
      16.     <input id="jbutton" type="button" value="得到j(luò)avafish(spring)的信息"/>  
      17.     <div id="result"></div>  
      18.     <script>load()</script>  
      19.   </body>  
      20. </html>  

      新建anspringuserInfo.js
      代碼
      1. function load()   
      2. {   
      3.     var jbutton = $("jbutton");   
      4.     jbutton.onclick=function(event)   
      5.     {   
      6.         bOnClick();   
      7.     };   
      8. }   
      9. function bOnClick()   
      10. {   
      11.     alert("haha");   
      12.     anspringuser.getUser($("name").value,callback);   
      13. }   
      14. function callback(msg)   
      15. {   
      16.     var user = msg;   
      17.     DWRUtil.setValue(‘result‘,"歡迎你!"+user.welcome+"   姓名:"+user.username+",年齡:"+user.age+",住址:"+user.address);   
      18. }  

      在web.xml中
      的DWR的servlet的初始化參數(shù)里加入
      代碼
      1. <init-param>  
      2.        <param-name>classes</param-name>  
      3.        <param-value>  
      4.             org.li.dwr.log.annotation.DWRAnLog,org.li.dwr.spring.annotation.User   
      5.        </param-value>  
      6.     </init-param>  

      運行服務(wù)器輸入http://localhost:8080/DWRStudy/AnSpringUserInfo.html,成功了
      用Annotation的配置和dwr.xml的意思基本一樣,這里就不多做介紹了。
      Util.js的函數(shù)庫
      $()和prototype.js一樣相當于document.getElementById
      (Set)getValue()(設(shè)置)得到元素的值一般是(設(shè)置)得到元素的innerHTML。
      getText()得到元素的文本值
      (set)getValues()(設(shè)置)得到元素下的元素,以array為對象載體。
      這里都是一些最常用的函數(shù),具體可以看一下util.js文件。

       

      DWRStudy.rar
       描述:  源代碼
      下載
       文件名:  DWRStudy.rar
       文件大小:  23 KB
       下載過的:  文件被下載或查看 40 次

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多