Spring与DWR集成

1.什么是DWR

DWRDirect Web Remoting)是在Java EE中较流行的AJAX框架,它的最大优势就是可以像使用本地的Javascript函数一样,调用服务器上的Java方法。如下图所示:

 

1 DWR工作原理

 

其实DWR原理也不复杂,它先在web.xml中配置一个Servlet,映射到特定的路径(通常是%CONTEXT_PATH%/dwr/*)。这个Servlet的作用就是初始化要暴露给Javascript调用的Java类(通过dwr.xml进行配置),并生成相应的代理的Javascript类代码。在XHR请求到来的时候,Servlet负责将请求的参数变成对应的Java对象,并以其为参数调用目标Java方法,并将返回值转化为Javascript代码。

详情请参考:http://directwebremoting.org/

 

2.安装与配置

下载 dwr.jar,放到WEB-INF/lib

      整合ssh

21 Web.xml配置

web.xml中加入DWRServlet

 

<servlet>

  <servlet-name>dwr</servlet-name>

  <servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class>

  <init-param>

    <param-name>debug</param-name>

    <param-value>true</param-value>

  </init-param>

</servlet>

<servlet-mapping>

  <servlet-name>dwr</servlet-name>

  <url-pattern>/dwr/*</url-pattern>

</servlet-mapping>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


23 dwr.xml配置

 

<?xml version="1.0" encoding="UTF-8"?>     

<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">     

<dwr>     

    <allow>

        <create javascript="User" creator="spring">

           <param name="beanName" value="userDAO"></param>

       </create>

 </allow>               

</dwr> 

 

 

 

 

 

 

 

 

 

 

 

 


creator:表示使用spring管理的对象

javascript:表示在js中所使用的名称

paramname="beanName"  :要得到是一个bean  必须要这样写

value=“userDAO"  :表示applicationContext.xmlbeanid

3Jsp文件的编写

 

jsp文件中引入相应的<javascript>标签内容值:

//<!—User.js是自动生成的 -->

<script type='text/javascript' src='dwr/interface/User.js'></script>

<!—-这个User.js本来是没有的,但是也需要写,要和dwr.xml文件中 javascript="User"  一样 -->

<script type='text/javascript' src='dwr/engine.js'></script>

<script type='text/javascript' src='dwr/util.js'></script><script>

        function ok(){

            User.getSss(callback);  //getSss是相应java类中的一个方法

                                       // callback是回调函数

           //在这里就可以调用userDAO中的各个方法了。

        }

        function callback(data){ //data接收getSss方法的返回值

           alert(data);

        }

     

</script>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

4. SSH整合后要将struts-config.xml文件中的

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

    <set-property value="/WEB-INF/applicationContext.xml" property="contextConfigLocation"/>

  </plug-in>

删除掉,在web.xml中添加另外一种整合方式:

  <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>/WEB-INF/applicationContext.xml</param-value>

  </context-param>

 

  <listener>

    <listener-class>

        org.springframework.web.context.ContextLoaderListener

    </listener-class>

  </listener>

  因为<plug-in> dwr无法执行到相应的操作,需要在web.xml加载中使用

 

较为经典的资料总结:

Web.xml 配置

 

1.基本配置

<servlet>

      <servlet-name>dwr</servlet-name>

      <servlet-class>       

          org.directwebremoting.servlet.DwrServlet

      </servlet-class>

      <init-param>

          <param-name>debug</param-name>

         <param-value>true</param-value>

      </init-param>

      //这个参数DWR默认是false。如果选择true,我们可以通过 http://localhost:port/app/dwr看到你部署的每个DWR class。并且可以测试java代码的每个方法是否运行正常。为了安全考虑,在正式环境下你一定把这个参数设为false

<init-param>

          <param-name>exposeInternals</param-name>

         <param-value>true</param-value>

      </init-param>      

      <load-on-startup>1</load-on-startup>

  </servlet>

 

可能有几种情况,一一列举。一个servlet,多个dwr.xml配置文件;多个servlet,每个servlet对应一个或多个dwr.xml配置文件。

 

2.一个servlet,多个dwr.xml

 

<servlet>

    <servlet-name>dwr-invoker</servlet-name>

    <servlet-class>         

          org.directwebremoting.servlet.DwrServlet

    </servlet-class>

    <init-param>

      <param-name>config-1</param-name>

      <param-value>WEB-INF/dwr1.xml</param-value>

    </init-param>

    <init-param>

      <param-name>config-2</param-name>

      <param-value>WEB-INF/dwr2.xml</param-value>

    </init-param>

</servlet>

 

在这种配置下,param-name的值必须以config开头。param-name可以有>=0个。如果没有param-name,那么将会读取 WEB-INF/dwr.xml。如果有大于零个param-name,那么WEB-INF/dwr.xml文件将不会被读取。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值