SSH框架中整合dwr时无法调用后台方法的解决办法
转载自:https://blog.csdn.net/Unseenblade/article/details/53087414
在按照网上做的单独dwr测试都可以成功,可是与SSH框架整合在一起的时候却无法调用后台的方法,在我徜徉网络整个下午才摸索出了答案。
由于网上关于dwr资料也不少,所以我只说重点吧(我遇到的问题),首先说配置
1、web.xml
- <pre name="code" class="html"><servlet>
- <servlet-name>dwr-invoker</servlet-name>
- <servlet-class>uk.ltd.getahead.dwr.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>
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="spring" javascript="test">
- <param name="beanName" value="dwrTest"/>
- </create>
- </allow>
- </dwr>
3.测试
然后当我在jsp页面中引入两个必备JavaScript:engine.js和util.js,在加上新建的test.js,当我访问页面时发现js调用的方法没有反应,也就是说根本没调用,而且我访问
http://localhost:8000/projectName/dwr/ 也没有反应,说找不到路径,经过我漫长的搜寻之路找到答案,原来是web.xml中struts2拦截器配置 /* 后,当输入XXX/dwr时会被struts2捕获,被当做某个action 所以就找不到路径,
解决办法:(1)在Struts2中配置常量<constant name="struts.action.excludePattern" value="/dwr.*"></constant>
此时再次访问 http://localhost:8000/projectName/dwr/成功了会看到这样的页面:
点击test进去,会看到:
稍微阅读一下,你会明白:要用test,你要引用这三个js,他使用的是绝对路径,是不是(2)和你引用的路径不同?赶紧复制粘贴吧。
把js路径改好再运行就OK了,困扰了我好久。。。如果帮到了您,就给我个赞吧,不枉我花费了一个下午。