﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-我思故我强-文章分类-DWR(Ajax)</title><link>http://www.blogjava.net/balajinima/category/26951.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 06 Nov 2007 22:41:51 GMT</lastBuildDate><pubDate>Tue, 06 Nov 2007 22:41:51 GMT</pubDate><ttl>60</ttl><item><title>DWR实例教程</title><link>http://www.blogjava.net/balajinima/articles/158568.html</link><dc:creator>李云泽</dc:creator><author>李云泽</author><pubDate>Tue, 06 Nov 2007 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/balajinima/articles/158568.html</guid><wfw:comment>http://www.blogjava.net/balajinima/comments/158568.html</wfw:comment><comments>http://www.blogjava.net/balajinima/articles/158568.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/balajinima/comments/commentRss/158568.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/balajinima/services/trackbacks/158568.html</trackback:ping><description><![CDATA[DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(JavaScript远程调用spring bean),更好浏览器支持,还支持一个可选的commons-logging日记操作.<br /><br />以上摘自open-open，它通过反射，将java翻译成javascript，然后利用回调机制，轻松实现了javascript调用Java代码。<br /><br />其大概开发过程如下：<br />1.编写业务代码，该代码是和dwr无关的。<br />2.确认业务代码中哪些类、哪些方法是要由javascript直接访问的。<br />3.编写dwr组件，对步骤2的方法进行封装。<br />4.配置dwr组件到dwr.xml文件中，如果有必要，配置convert，进行java和javascript类型互转。<br />5.通过反射机制，dwr将步骤4的类转换成javascript代码，提供给前台页面调用。<br />5.编写网页，调用步骤5的javascript中的相关方法（间接调用服务器端的相关类的方法），执行业务逻辑，将执行结果利用回调函数返回。<br />6.在回调函数中，得到执行结果后，可以继续编写业务逻辑的相关javascript代码。<br /><br />下面以用户注册的例子，来说明其使用。（注意，本次例子只是用于演示，说明DWR的使用，类设计并不是最优的）。<br /><br />1.先介绍下相关的Java类<br /><br />  User: 用户类，<br />  public class User {<br />//登陆ID，主键唯一<br />private String id;<br />//姓名<br />private String name;<br />//口令<br />private String password;<br />//电子邮件<br />private String email;<br />        <br />//以下包含getXXX和setXXX方法<br />.......<br />  }<br /><br />  UserDAO：实现User的数据库访问，这里作为一个演示，编写测试代码<br />  public class UserDAO { <br />    //存放保存的数据<br />    private static Map dataMap = new HashMap();<br /><br />    //持久用户<br />    public boolean save(User user) {<br />      if (dataMap.containsKey(user.getId()))<br />        return false;<br />      System.out.println("下面开始保存用户");<br />      System.out.println("id："+user.getId());<br />      System.out.println("password："+user.getPassword());<br />      System.out.println("name："+user.getName());<br />      System.out.println("email："+user.getEmail());<br />      dataMap.put(user.getId(), user);<br />      System.out.println("用户保存结束");<br />      return true;<br />    }<br /><br />    //查找用户<br />    public User find(String id) {<br />      return (User)dataMap.get(id);<br />    }<br />}<br /><br />  DWRUserAccess：DWR组件，提供给javascript访问的。<br /><br />  public class DWRUserAccess {<br /><br />      UserDAO userDAO = new UserDAO();<br /><br />      public boolean save(User user) {<br />        return userDAO.save(user);<br />      }<br /><br />      public User find(String id) {<br />        return userDAO.find(id);<br />      }<br />  }<br />  <br /><br />  下面说明下程序执行的流程<br /><br />  1.用户在页面上输入相关注册信息，id、name、password、email，点击“提交”按钮<br />  2.javascript代码开始执行，根据用户填写相关信息，通过dwr提供的DWRUserAccess.js里save的方法，调用服务器端的DWRUserAccess类save方法，将注册信息保存。<br />  3.通过DWRUserAccess.jsp里的find方法，调用服务器端DWRUserAccess类里的find方法，执行用户信息查找。<br /><br />  注意，在以上的执行过程中，DWRUserAccess是供DWR调用的，是DWR组件，因此需要将DWRUserAccess类配置到dwr中。<br /><br />  接下来讲解本次dwr测试环境的配置。<br /><br />  1.新建一个webapp，命名为testApp<br />  2.将dwr.jar拷贝到testApp的WEB-INF的lib目录下<br />  3.编译上面的User，UserDAO，DWRUserAccess类，放到classes目录下<br />  4.在web.xml中配置servlet,适配路径到dwr目录下,如下所示<br />    &lt;servlet&gt;<br />    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br />    &lt;display-name&gt;DWR Servlet&lt;/display-name&gt;<br />    &lt;description&gt;Direct Web Remoter Servlet&lt;/description&gt;<br />    &lt;servlet-class&gt;uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class&gt;<br />    &lt;init-param&gt;<br />      &lt;param-name&gt;debug&lt;/param-name&gt;<br />      &lt;param-value&gt;true&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br />    &lt;init-param&gt;<br />      &lt;param-name&gt;scriptCompressed&lt;/param-name&gt;<br />      &lt;param-value&gt;false&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br />    &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />  &lt;/servlet&gt;<br /><br />  &lt;servlet-mapping&gt;<br />    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br />    &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt;<br />  &lt;/servlet-mapping&gt;<br /><br />  以上的配置可以拦截testApp下所有指向dwr的请求，关于这个拦截器，我们会在后面介绍。<br /><br />  5.WEB-INF下新建一个dwr.xml文件，内容如下：<br />  &lt; xml version="1.0" encoding="UTF-8" &gt;<br />&lt;!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd"&gt;<br /><br />&lt;dwr&gt;<br />  &lt;allow&gt;<br />&lt;create creator="new" javascript="DWRUserAccess"&gt;<br />      &lt;param name="class" value="test.DWRUserAccess"/&gt;<br />    &lt;/create&gt;<br />&lt;convert converter="bean" match="test.User"/&gt;<br />  &lt;/allow&gt;<br />&lt;/dwr&gt;<br /><br />  这里我们把DWRUserAccess配置到了dwr中，create元素中，creater="new"表示每调用一次DWRUserAccess时，需要new一个这样的类；javascript="DWRUserAccess"，表示提供给前台页面调用的javascirpt文件是DWRUserAccess.js。<br /><br />  convert元素用于数据类型转换，即java类和javascript之间相互转换，因为和前台交换的是User对象，因此需要对此使用bean转换，我们将在后面介绍这个类。<br /><br />  4.编写测试的HTML页面 test.html<br />   &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;<br />&lt;HTML&gt;<br />&lt;HEAD&gt;<br />&lt;TITLE&gt;DWR测试&lt;/TITLE&gt;<br />&lt;meta http-equiv=Content-Type content="text/html; charset=gb2312"&gt;<br />&lt;script src="/oblog312/dwr/engine.js"&gt;&lt;/script&gt;<br />&lt;script src="/oblog312/dwr/util.js"&gt;&lt;/script&gt;<br />&lt;script src="/oblog312/dwr/interface/DWRUserAccess.js"&gt;&lt;/script&gt;<br />&lt;/HEAD&gt;<br />&lt;BODY&gt;<br />&lt;B&gt;用户注册&lt;/B&gt;&lt;br&gt;<br />------------------------------------------------<br />&lt;Br&gt;<br />&lt;form name="regForm"&gt;<br />登陆ID：&lt;input type="text" name="id"&gt;&lt;br&gt;<br />口  令：&lt;input type="password" name="password"&gt;&lt;br&gt;<br />姓  名：&lt;input type="text" name="name"&gt;&lt;br&gt;<br />电子邮件：&lt;input type="text" name="email"&gt;&lt;br&gt;<br />&lt;input type="button" name="submitBtn" value="提交" onclick="OnSave()"&gt;&lt;br&gt;<br />    &lt;/form&gt;<br /><br />&lt;br&gt;<br />&lt;br&gt;&lt;B&gt;用户查询&lt;/B&gt;&lt;br&gt;<br />------------------------------------------------<br />&lt;Br&gt;<br />&lt;form name="queryForm"&gt;<br />登陆ID：&lt;input type="text" name="id"&gt;&lt;br&gt;<br />&lt;input type="button" name="submitBtn" value="提交" onclick="OnFind()"&gt;&lt;br&gt;<br />&lt;/form&gt;<br />&lt;br&gt;<br />&lt;/BODY&gt;<br />&lt;/HTML&gt;<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br />&lt;!--<br />function saveFun(data) {<br />if (data) {<br />  alert("注册成功！");<br />} else {<br />  alert("登陆ID已经存在！");<br />}<br />}<br /><br />function OnSave() {<br />var userMap = {};<br />userMap.id = regForm.id.value;<br />userMap.password = regForm.password.value;<br />userMap.name = regForm.name.value;<br />userMap.email = regForm.email.value;<br />DWRUserAccess.save(userMap, saveFun); <br />}<br /><br />function findFun(data) {<br />if (data == null) {<br />  alert("无法找到用户："+queryForm.id.value);<br />  return;<br />}<br /><br />alert("找到用户，nid："+data.id+"，npassword："+data.password+"，nname："+data.name+"，nemail："+data.email);<br /><br />}<br /><br />function OnFind() {<br />DWRUserAccess.find(queryForm.id.value, findFun); <br />}<br />//--&gt;<br />&lt;/SCRIPT&gt;<br /><br /><br />以下对页面的javascript进行解释<br /><br />&lt;script src="/oblog312/dwr/engine.js"&gt;&lt;/script&gt;<br />&lt;script src="/oblog312/dwr/util.js"&gt;&lt;/script&gt;<br />这两个是dwr提供的，用户可以不必关心，只需要导入即可<br /><br />&lt;script src="/oblog312/dwr/interface/DWRUserAccess.js"&gt;&lt;/script&gt;<br />是我们编写的DWRUserAccess类，经dwr反射后，生成的javascript代码，它和DWRUserAccess.java是对应的，供用户调用，实际上我们就是通过这个js文件去调用服务器端的DWRUserAccess类的。<br /><br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br />&lt;!--<br />function saveFun(data) {<br />if (data) {<br />  alert("注册成功！");<br />} else {<br />  alert("用户名已经存在！");<br />}<br />}<br /><br />function OnSave() {<br />var userMap = {};<br />userMap.id = regForm.id.value;<br />userMap.password = regForm.password.value;<br />userMap.name = regForm.name.value;<br />userMap.email = regForm.email.value;<br />DWRUserAccess.save(userMap, saveFun); <br />}<br /><br />function findFun(data) {<br />if (data == null) {<br />  alert("无法找到用户："+queryForm.id.value);<br />  return;<br />}<br /><br />alert("找到用户，nid："+data.id+"，npassword："+data.password+"，nname："+data.name+"，nemail："+data.email);<br /><br />}<br /><br />function OnFind() {<br />DWRUserAccess.find(queryForm.id.value, findFun); <br />}<br />//--&gt;<br />&lt;/SCRIPT&gt;<br /><br />这段javascirpt代码，我们来看下OnSave函数，首先它构造一个map，将表单数据都设置到map中，然后调用DWRUserAccess.save(userMap, saveFun)，执行save操作。大家可以注意到，服务器端的DWRUserAccess中的save方法是这样的：boolean save(User user)，其参数是一个User对象，返回一个boolean值；而客户端的方法是这样的：save(userMap,saveFun)，第一个参数userMap是javascirpt中的map对象，在这里相当于服务器端的User对象（在服务器端执行时，会通过convert转换成User对象），前面我们提到dwr是利用回调函数来返回执行结果的，第二个参数saveFun即是一个回调函数。在函数function saveFun(data)中，data是执行结果，这里是一个bool值，非常简单的，我们通过判断data是否为真，可以知道用户名是否重复，用户是否注册成功。<br /><br />看一下OnFind查找函数，执行结果在回调函数findFun(data)中，因为服务器端返回的是一个User对象，通过convert，将会转换成javascript的一个map对象，<br />于是在findFun中，通过data.id、data.name、data.password、data.email我们可以轻松的访问到这个User对象。<br /><br /><br />好了配置完毕，启动服务器，在目录中打入localhost/testApp/test.html。<br /><br />1.在“用户注册”表单中，id框中输入admin，password中输入123456，name中输入chenbug，email中输入chenbug@zj.com，点击提交按钮，弹出对话框：“注册成功”，在服务器后台可以看到信息如下：<br /><br />下面开始保存用户<br />id：admin<br />password：123456<br />name：chenbug<br />email：chenbug@zj.com<br />用户保存结束<br /><br />再次点击提交按钮，弹出对话框“登陆ID已经存在”。<br /><br />2.在“用户查询”对话框中，输入登陆ID为admin，点击提交按钮，提示找到用户，并显示相关信息，输入admin123，点击提交按钮，提示无法找到用户。<br /><br />至此，测试结束。<br /><br /><br />后续：<br />1。拦截器 uk.ltd.getahead.dwr.DWRServlet<br />该类拦截所有指向dwr目录下的请求，并调用Processor的handler方法进行处理，在uk.ltd.getahead.dwr.impl.DefaultProcessor下，我们可以看到详细的处理过程。<br />if (pathInfo.length() == 0 ||<br />            pathInfo.equals(HtmlConstants.PATH_ROOT) ||<br />            pathInfo.equals(req.getContextPath()))<br />        {<br />            resp.sendRedirect(req.getContextPath() + servletPath + HtmlConstants.FILE_INDEX);<br />        }<br />        else if (pathInfo.startsWith(HtmlConstants.FILE_INDEX))<br />        {<br />            index.handle(req, resp);<br />        }<br />        else if (pathInfo.startsWith(HtmlConstants.PATH_TEST))<br />        {<br />            test.handle(req, resp);<br />        }<br />        else if (pathInfo.startsWith(HtmlConstants.PATH_INTERFACE))<br />        {<br />            iface.handle(req, resp);<br />        }<br />        else if (pathInfo.startsWith(HtmlConstants.PATH_EXEC))<br />        {<br />            exec.handle(req, resp);<br />        }<br />        else if (pathInfo.equalsIgnoreCase(HtmlConstants.FILE_ENGINE))<br />        {<br />            file.doFile(req, resp, HtmlConstants.FILE_ENGINE, HtmlConstants.MIME_JS);<br />        }<br />        else if (pathInfo.equalsIgnoreCase(HtmlConstants.FILE_UTIL))<br />        {<br />            file.doFile(req, resp, HtmlConstants.FILE_UTIL, HtmlConstants.MIME_JS);<br />        }<br />        else if (pathInfo.equalsIgnoreCase(HtmlConstants.FILE_DEPRECATED))<br />        {<br />            file.doFile(req, resp, HtmlConstants.FILE_DEPRECATED, HtmlConstants.MIME_JS);<br />        }<br />        else<br />        {<br />            log.warn("Page not found (" + pathInfo + "). In debug/test mode try viewing /[WEB-APP]/dwr/"); //$NON-NLS-1$ //$NON-NLS-2$<br />            resp.sendError(HttpServletResponse.SC_NOT_FOUND);<br />        }<br /><br />通过判断request请求的servlet路径，进行处理，大家可以自己去参看，这里不详细讨论。<br /><br /><br />2.bean转换器，&lt;convert converter="bean" match="test.User"/&gt;<br />将dwr.jar解压缩，在路径ukltdgetaheaddwr下可以看到dwr.xml，这里配置了系统默认的一些转换器，<br />&lt;converter id="bean" class="uk.ltd.getahead.dwr.convert.BeanConverter"/&gt;即是刚才用到User类的转换器，进入代码我们来看看它是如何在javascript和java间进行转换的。<br /><br />打开BeanConverter代码，定位到函数<br /><br />public Object convertInbound(Class paramType, InboundVariable iv, InboundContext inctx) throws ConversionException<br /><br />即是将javascript对象转换成java对象的，其中<br />paramType即Class类型，在上面的例子中是test.User，<br />InboundVariable iv，是传入的值，通过iv.getValue可以得到传入的javascript值串<br />InboundContext inctx，是入口参数上下文，用于保存转换的后java对象。<br /><br />因为前台传入的是一个javascript的map类型，而map肯定是以{开始和以}结束的，于是在这个函数一开始进行了判断<br />if (!value.startsWith(ConversionConstants.INBOUND_MAP_START))<br />        {<br />            throw new IllegalArgumentException(Messages.getString("BeanConverter.MissingOpener", ConversionConstants.INBOUND_MAP_START)); //$NON-NLS-1$<br />        }<br /><br />        if (!value.endsWith(ConversionConstants.INBOUND_MAP_END))<br />        {<br />            throw new IllegalArgumentException(Messages.getString("BeanConverter.MissingCloser", ConversionConstants.INBOUND_MAP_START)); //$NON-NLS-1$<br />        }<br /><br />javascript中，map里各个项是用逗号连接的，如var userMap = {id:'admin',password:'123456',name:'chenbug',email:'chenbug@zj.com'};而每个项的键值对是用冒号连接的，<br />在convertInbound函数的接下来的处理中，即是通过分析map字串，通过paramType构造java实例（即User类），然后通过反射，将这些键值对设置到java实例中，并返回。<br />这样就完成了javascript到java的转换。<br /><br /><br />另一个函数<br />public String convertOutbound(Object data, String varname, OutboundContext outctx) throws ConversionException<br /><br />即是将java对象转换为javascript对象（其实是声明和赋值语句）。<br />Object data ，是待转换的java对象<br />String varname，是javascript中的该对象的变量名<br />OutboundContext outctx，传出参数上下文，用于保存转换后的javascript值<br /><br />StringBuffer buffer = new StringBuffer();<br />        buffer.append("var "); //$NON-NLS-1$<br />        buffer.append(varname);<br />        buffer.append("={};"); //$NON-NLS-1$<br />这里声明了map类型的变量。<br /><br />即下来来的代码即是通过反射进行变量赋值，如下<br />  buffer.append(varname);<br />                    buffer.append('.');<br />                    buffer.append(name);<br />                    buffer.append('=');<br />                    buffer.append(nested.getAssignCode());<br />                    buffer.append(';');<br />大家可以自己去参看更多的代码。<br /><br />3.dwr本身提供了一个测试环境，大家在配置完后，可以在IE中输入地址http://localhost/testApp/dwr/index.html，看到配置的各DWR组件，并进行相关测试。<img src ="http://www.blogjava.net/balajinima/aggbug/158568.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/balajinima/" target="_blank">李云泽</a> 2007-11-06 15:31 <a href="http://www.blogjava.net/balajinima/articles/158568.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>写dwr demo的时候跳出session error的解决</title><link>http://www.blogjava.net/balajinima/articles/157478.html</link><dc:creator>李云泽</dc:creator><author>李云泽</author><pubDate>Thu, 01 Nov 2007 06:06:00 GMT</pubDate><guid>http://www.blogjava.net/balajinima/articles/157478.html</guid><wfw:comment>http://www.blogjava.net/balajinima/comments/157478.html</wfw:comment><comments>http://www.blogjava.net/balajinima/articles/157478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/balajinima/comments/commentRss/157478.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/balajinima/services/trackbacks/157478.html</trackback:ping><description><![CDATA[
		<p>dwr写demo的时候遇到的一个问题,跳出session error<br />问题描述:<br />前台页面跳出session error的对话框<br />而控制台则输出:<br />2007-5-29 11:58:53 org.directwebremoting.util.CommonsLoggingOutput error<br />严重: A request has been denied as a potential CSRF attack.<br />的错误信息.<br />请求被拒绝因为可能存在csrf(cross-site request forgeries,跨站请求伪造)攻击.<br />也就是说页面URL可能被跨站了的服务所调用.<br />例如:自己页面的一个图片.可能被其他站直接通过[img]....[/img]来引用.<br /><br />页面则显示</p>
		<p>解决方法:<br />在web.xml配置文件中..<br />dwr的配置<br /></p>
		<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
				<div>
						<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">servlet</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">servlet-name</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">dwr-invoker</span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">servlet-name</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">servlet-class</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">org.directwebremoting.servlet.DwrServlet</span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">servlet-class</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">init-param</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />   </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">param-name</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">debug</span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">param-name</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />   </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">param-value</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">true</span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">param-value</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">init-param</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">init-param</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">   <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />            </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">param-name</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">crossDomainSessionSecurity</span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">param-name</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">   <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />            </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">param-value</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">false</span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">param-value</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">   <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">init-param</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">servlet</span>
						<span style="COLOR: #0000ff">&gt;</span>
				</div>
		</div>
		<p>
				<br />加入corssDomainSessionSecurity这个配置选项..这个参数是在dwr版本2.0才有的.默认值为true,也就是</p>
		<p>禁止其他域发送请求.<br />corssDomainSessionSecurity:设置成false能够从其他域进行请求.注意这样做会在安全性上有一些冒险.</p>
<img src ="http://www.blogjava.net/balajinima/aggbug/157478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/balajinima/" target="_blank">李云泽</a> 2007-11-01 14:06 <a href="http://www.blogjava.net/balajinima/articles/157478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>