项目需要用到Ajax,最开始本想用jQuery,最后权衡下选择了DWR。
这里说的是DWR整合SSH,其实DWR完全没有必要和Struts2结合,毕竟DWR需要返回的是Object,而Struts2直接转向了页面。非要强制将二者整合,只能做一个伪Action,这个伪Action返回的还是Object。当然DWR和spring、hibernate结合就非常好,可以将Struts2戏称为小三了 O(∩_∩)O ~
注意:此处之所以要用到dwr,是因为我如果不想在执行完action之后,页面进行跳转,因为要是使用struts的话,页面就必须跳转,所以使用DWR,此处仅是自己的看法。
啥话都不说,直接来代码
只需要按照之前的struts2和Dwr单独的写就行,唯一需要的就是在Struts2.xml里面加上一行代码:
此处的原因是两者的配置文件发生冲突。
首先,为何会冲突?其实原因很明显,就是Struts2的过滤器和DWR的过滤器产生冲突,web server无法准确判断准确的地址,
打开web.xml会发现,我们配置了如下的信息
首先是Struts2的过滤器
<filter>
可以看到,在url-pattern中,我们将web项目下的所有路径都交给了struts2来处理,
然而,我们又配置了DWR的过滤器
<servlet>
虽然,这里我们配置了url-pattern
但是,在前方已经配置了将web项目下的所有路径交给Struts2,
因此,这就是产生冲突的根本原因。
《《解决方案》》
那么,如何来解决这个冲突呢?Struts2和DWR谁也无法替代谁,在项目中必不可少,
我们能想到的最直接的方案就是:在Struts2所处理的路径中,分出一部分让DWR处理,这样就两全其美了。
要分出Struts2不处理的路径,其实很简单。
在Struts2中有个属性叫excludePattern,也就是用来配置Struts2不处理的路径
?
看到这里,我们突然恍然大悟,心情异常激动,
于是我们只需要在Struts.xml中添加配置
让/dwr/*下的全部路径归DWR。