DWR使用手記

DWR使用手記

      前段時間想做個東西玩玩,又想學點新的技術,就想起來用DWR(Direct Web Remoting)。把東西做完之後,想想DWR用起來還是很方便的,DWR主要是爲了方便javascript調用java class方法,在中間起了一個協調作用,這個功勞主要取決於apache的開源API-bsf.jar。DWR可以聲明哪些類可以供javascript調用,可以細到只能調用哪些方法。目前DWR還支持調用spring beans。總結一下使用過程:

 1.在WEB.XML中配置DWRServlet:

 <servlet>
    <servlet-name>dwr-invoker</servlet-name>
    <display-name>DWR Servlet</display-name>
    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

 <servlet-mapping>
    <servlet-name>dwr-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>

 上面配置debug=true後,我們就可以通過http://localhost/webapp/dwr/查看,當前有哪些類可以供javascript調用,同時還可以對類中方法進行測試.對於DWRServlet還有一些參數可以自行設置,如logLevel設置日誌級別等.具體可以參照源碼.

 2 DWR默認的讀取/WEB-INF/dwr.xml文件,dwr.xml文件配置如下:

<dwr>
  <allow>

    <init></init>
        <create creator="new" javascript="Ask">
             <param name="class" value="com.test.Ask"/>
        </create>
        <convert converter="bean" match="Message"/>

        <signatures></signatures>
   </allow>
</dwr>

       從上面可以看出來dwr.xml文件的基本結構,每個<create>聲明一個可供javascript調用的類,javascript="Ask"表明:在javascript中可以用Ask調用類Ask的方法,creator="new"表明每個請求都新建一個Ask實例.

       下面的<convert>是:如果在類中把一個對象作爲參數(例如A.take(B b)),從javascript調用此方法時,DWR會自動把javascript傳過來的參數自動轉爲對應的bean對象.dwr中已經聲明瞭部分參數類型的自動轉換,例如string,int等.

      如果我們不想每個請求都新建一個對象,所有請求使用一個實例,我們可以這樣配置:(需要bsf.jar)

  <create creator="script" javascript="Ask">

         <param name="language" value="beanshell"/>

         <param name="script">

            <![CDATA[

                         import com.test.Ask;

                         return Ask.getInstance();

           ]]>

        </param>

   </create>

  同時在<create>中還可以加入<include method="answe"/>一個或多個,用來限制javascript可以調用哪些方法. 

 

       <signatures>:如果我們在類方法中聲明瞭List這樣的類型參數,DWR不知道傳過來的值自動轉化爲什麼類型放到List中,這時候我們就需要在這個標籤中聲明,一般的我們還是建議放到List中的是javabean,不要是Date等這些類型.

<signatures>
  <![CDATA[
  import java.util.List;
  import com.example.Check;
  Check.setLotteryResults(List<Integer> nos);
  ]]>
</signatures>
  3.JAVA類和JAVASCRIPT調用
   只舉簡單例子:
public class Ask
{
   public String answer(String question)
   {
      return question;
   }
}
頁面文件:
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
<!--下邊這個是必須的-->
<script type='text/javascript' src='dwr/interface/Ask.js'></script>
<script language="javascript">
function getAnswer()
{
    //用一個function接收返回值
    Ask.answer(gotAnswer);
}
//ans即爲返回值
function gotAnswer(ans)
{
   alert(ans);
}
</script>
    總體用起來DWR那是"相--當"靈活的,目前DWR.JAR到了1.1BETA版, 官方網站
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章