DWR使用手记

来源:互联网 发布:2016出口数据 编辑:程序博客网 时间:2024/05/08 18:42
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版, 官方网站http://getahead.ltd.uk/dwr/index
<script type="text/javascript"><!--google_ad_client = "pub-9174385708377021";google_alternate_color = "0000FF";google_ad_width = 468;google_ad_height = 60;google_ad_format = "468x60_as";google_ad_type = "image";google_ad_channel ="";google_page_url = document.location;google_color_border = "336699";google_color_bg = "FFFFFF";google_color_link = "0000FF";google_color_url = "008000";google_color_text = "000000";//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击