1、实现DWR跨域支持
a.配置web.xml文件,dwr定义时加入以下参数设置:
<init-param>
<param-name>allowGetForSafariButMakeForgeryEasier</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>allowScriptTagRemoting</param-name>
<param-value>true</param-value>
</init-param>
b.客户端调用:
//客户端调用时,须指定调用路径,否则默认调用的是当前页面所在服务端的/dwr,而不是实际的/dwr服务。
//故未设置Remote._path时,很可能提示你"dwr/call/plaincall/XXX.ZZZ.dwr"的信息。
//Remote 为dwr.xml中定义的java类对应的jascript名称
Remote._path = 'http://otherdomain.com/webapp/dwr';
//或:dwr.engine._defaultPath = 'http://otherdomain.com/webapp/dwr';
Remote.someFunction();
更详细的说明可参见官网
Remoting Options 章节(http://getahead.org/dwr/browser/engine/options)。
2、DWR的Session支持
DWR通过
WebContext /
WebContextFactory 来取得
HttpServletRequest、
HttpServletResponse、HttpSession、
ServletContext、 ServletConfig等对象。(DWR2.0)实现可参见DWR内部脚本,engine.js文件"
dwr.engine._getJSessionId"部份代码。
更多详细信息见官网API:http://getahead.org/dwr/server/javaapi。
所以SESSION根据jsessionid来确定的,jsessionid存放在cookie中,若客户端禁止cookie的话,jsessionid每次都新生成,所以无法确保在服务端的SESSION唯一。跨域调用DWR时,浏览器默认禁止第三方cookie,所以会有正常使用SESSION功能。设置Internet选项,"隐私","高级",开始对第三方cookie的支持,即可解决这个问题。
posted on 2007-12-24 09:53
josson 阅读(4744)
评论(3) 编辑 收藏 所属分类:
web开发