DWR基本配置

 

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;
}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值