DWR基本配置

原创 2011年10月14日 11:55:23
 

DWR基本配置

2010-08-12 13:54

1.在web.xml里配置

<!-- The DWR servlet. -->
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>



初始化参数还有其它:

a.allowGetForSafariButMakeForgeryEasier,解决了safari 1.x post时的bug,默认是false,避免bug改为true。

b.crossDomainSessionSecurity,默认是true,如果改为false将会能接收其它域的请求,存在安全风险。

c.allowScriptTagRemoting,页面里动态添加<scrip>标签的ajax方法,默认为true。

d.debug,是否调试,默认是false。

e.scriptSessionTimeout,设置超时时间,默认是1800000(30 minutes)。

f.maxCallCount,设置最大请求数,默认是20.

g.activeReverseAjaxEnabled,默认是false,When set to true, the polling and Comet reverse Ajax
techniques are enabled.

h.maxWaitingThreads,多少激活状态的servlet线程,默认是100.

i.maxPollHitsPerSecond,When using the polling reverse Ajax method, this is the maximum number of requests per second allowed. The default value is 40.

j.preStreamWaitTime,等待回调之前回复时间,默认是29000。

k.postStreamWaitTime,回调之后的回复时间,默认是1000

l.[Interface Name],This is used to override parts of DWR without having to build it from source. The default implementation is the default.

m.ignoreLastModified,默认是false,dwr利用缓存控制请求。当是true时,就没有这项功能了。

n.scriptCompressed,默认是false,对返回javascript压缩。才外还有一个非官方的参数是compressionLevel ,这个参数有三个级别:none, normal,ultra。参考javadoc的JavascriptUtil类。

o.sessionCookieName,dwr使用session cookie获得url请求,一般是使用JSESSIONID,这里你可以使用不同的session名。

p.normalizeIncludesQueryString,默认是false。

q.overridePath,一些web容器修改请求路径导致dwr不能找到相关资源,设置这个参数会复写路径。默认是不使用的。



2.在dwr.xml里配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new" javascript="mDelegate">
<param name="class" value="app.MathDelegate" />
</create>
</allow>
</dwr>

介绍一下,dwr一般的文件结构:

<dwr>

<init>

<creator id="" class="" />

<converter id="" class="" />

</init>

<!--init 只使用在扩展dwr自己上-->

<allow>
<create creator="" javascript="" scope="">
<param name="" value="" />

<auth method="" role="" />

<exclude method="" />

<include method="" />
</create>

<converter converter="" match="" />
</allow>

creator的选项有不同的选项:

new ,最常用一般是写的新bean。

none ,不创建任何对象,一般是调用静态方法。

spring ,通过spring framwork访问bean。

jsf ,对象来自jsf。

struts ,使用struts的form bean。

pageflow ,Gives access to a PageFlow from Beehive or WebLogic.

ejb3 ,访问ejb3的sesssion bean

<signatures>

<!--可选标签一些dwr必须的信息-->

</signatures>

</dwr>

3.页面引用

<script type='text/javascript' src="<c:url value="/dwr/util.js"/>"> </script>
<script type='text/javascript' src="<c:url value="/dwr/engine.js"/>"> </script>

<script type='text/javascript' src='<c:url value="/dwr/interface/mDelegate.js"/>'> </script>

4.调用

mDelegate.methodName();//这个方法名就是在app.MathDelegate这个类里的方法。



以上是dwr的基本使用,还有一些高级使用简单阐述一下

一般在servlet里配置是

<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
</servlet>

默认是读取web-inf下的dwr.xml配置文件,但我们可以修改它!

<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>

<init-param>
<param-name>config</param-name>
<param-value>configFiles/dwrConfig.xml</param-value>
</init-param>
</servlet>

参数名是config后面可以有任何后缀,这样就不读取dwr.xml了,会读dwrConfig.xml。迫于安全的考虑我们可以根据不同权限去用不同的配置文件,去设置我们需要调用的方法(可以用includ和exclude标签,这里介绍的是在j2ee级别的安全配置),我们对不同权限定义不同配置文件

<servlet>
<servlet-name>dwr-user-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>config-user</param-name>
<param-value>WEB-INF/dwr-user.xml</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>dwr-admin-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>config-admin</param-name>
<param-value>WEB-INF/dwr-admin.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-admin-invoker</servlet-name>
<url-pattern>/dwradmin/*</url-pattern>
</servlet-mapping>
<servlet-mapping>

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

接着在web.xml里配置

<security-constraint>
<web-resource-collection>
<web-resource-name>dwr-admin-collection</web-resource-name>
<url-pattern>/dwradmin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>dwr-user-collection</web-resource-name>
<url-pattern>/dwruser/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
</auth-constraint>
</security-constraint>

这样user读的配置文件跟admin的是不同的。

除了以上方法还有一种方法,是直接在dwr.xml里配置

<create creator="new" javascript="RemotableClass">
<param name="class" value="com.myapp.RemotableClass" />
<auth method="delete" role="admin" />
</create>

只有admin的权限才能调用delete方法,这个就不用分着写dwr的配置文件了,不过得在web.xml里区分权限。

下面就是ajax最难懂的部分了,一个概念reverse ajax。包括三种模式:polling,comet,piggybacking。其中前两种是active的最后一个是inactive的。

在web.xml里配置的信息

<init-param>
<param-name>activeReverseAjaxEnabled</param-name>(必须的)
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>org.directwebremoting.extend.ServerLoadMonitor</param-name>(如果是poll模式时是必须的)
<param-value>org.directwebremoting.impl.PollingServerLoadMonitor</param-value>
</init-param>
<init-param>
<!-- This should be disconnectedTime, but because of a bug prior to the -->
<!-- as yet unreleased 2.0.2, you have to use timeToNextPoll. Use -->
<!-- disconnectedTime from 2.0.2 onward. -->
<param-name>timeToNextPoll</param-name>
<param-value>1000</param-value>
</init-param>

使用dwr.engine.setActiveReverseAjax(true);



与项目结合使用:

1.spring

<create creator="spring" javascript="MyBean">
<param name="beanName" value="MyBean" />
</create>



<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/beans.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>



2.jsf

<create creator="jsf" javascript="ScriptName">
<param name="managedBeanName" value="beanName"/>
<param name="class" value="your.class"/>
</create>



<filter>
<filter-name>DwrFacesFilter</filter-name>
<filter-class>uk.ltd.getahead.dwr.servlet.FacesExtensionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>DwrFacesFilter</filter-name>
<url-pattern>/dwr/*</url-pattern>
</filter-mapping>



3.WebWork/Struts 2

<create creator="none" javascript="DWRAction">
<param name="class" value="org.directwebremoting.webwork.DWRAction"/>
<include method="execute"/>
</create>
<convert converter="bean" match="org.directwebremoting.webwork.ActionDefinition">
<param name="include" value="namespace,action,method,executeResult" />
</convert>
<convert converter="bean" match="org.directwebremoting.webwork.AjaxResult"/>



4.struts 1

<allow>
<create creator="struts" javascript="ScriptName">
<param name="formBean" value="formBeanName"/>
</create>
</allow>



5.Beehive

<allow>
<create creator="pageflow" javascript="ScriptName" />
</allow>



当在dwr中使用annotation时:

<servlet>
<description>DWR controller servlet</description>
<servlet-name>DWR controller servlet</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>classes</param-name>
<param-value>com.example.RemoteFunctions,com.example.RemoteBean</param-value>
</init-param>
</servlet>



@RemoteProxy //设置控制类
public class RemoteClass {
@RemoteMethod //调用的方法
public String myMethod(String inParam) {
return inParam + " returned";
}
}



@DataTransferObject //需要做convert的方法
public class MyBean {
@RemoteProperty //方法的属性
private String firstName;
public String getFirstName() {
return firstName;
}
}

 

DWR示例与spring集成

  • 2014年12月19日 21:30
  • 5.41MB
  • 下载

DWR2学习整理资料

  • 2008年06月16日 13:00
  • 522KB
  • 下载

DWR的基本配置例子:

DWR的基本配置例子: 1、  拷贝dwr.jar文件2、  修改web.xml文件:添加 dwr servlet 配置:    servlet>    servlet-name>dwr-invoke...
  • l_rui_ci
  • l_rui_ci
  • 2009-05-29 00:00:00
  • 267

DWR的基本使用

介绍dwr的基本使用。
  • qq455276333
  • qq455276333
  • 2016-01-17 21:34:48
  • 13875

DWR文件上传和下载

项目里用到文件上传,且要求页面无刷新,用DWR可以很方便地实现。下面简单说说: 1.单文件上传 HTML里: UploadJs代码: function uploadFile(){ i...
  • wangchsh2008
  • wangchsh2008
  • 2011-08-02 13:31:04
  • 5857

dwr异步改为同步

项目当中用到了DWR,在页面加载数据的时候出现了一点小问题: 调用了一个ajax的方法得到一组数据量比较大的对象.当然在页面上已经被convert成了js数组.在整个异步调用的过程当中花的时间要多一些...
  • javaActor
  • javaActor
  • 2010-04-14 22:39:00
  • 5982

DWR 过滤器验证权限

实现方法:在dwr每个方法调用前拦截验证权限 1.实现拦截器(需dwr2.0以上版本) package net.gkyh.util; import java.lang.reflect.Method...
  • liuxiao723846
  • liuxiao723846
  • 2015-07-10 14:42:17
  • 1343

DWR的使用,配置,例子,详解整理

DWR的原理:在安装DWR时会在web.xml中配置一个servlet,这个servlet负责把前台的JS参数封装成JAVA,去调用你的JAVA类,然后将返回结果(JAVA类型)再翻译成JS生成到你的...
  • Shb_derek
  • Shb_derek
  • 2014-04-23 17:40:02
  • 1826

DWR的异步与同步的控制

DWR的异步与同步的控制 首先,要注意dwr自带的js包导入顺序, 正确如下:     在DWR的engine.js文件中有setAsync方法,就是设置调用是否是同步的,还是异步的。 ...
  • xixi_666
  • xixi_666
  • 2014-03-11 16:36:09
  • 1361
收藏助手
不良信息举报
您举报文章:DWR基本配置
举报原因:
原因补充:

(最多只允许输入30个字)