如何处理dwr 和 struts2整合时的访问路径错误?
错误描述:
若果你想在struts2中使用dwr,在所有的配置文件都写好了的情况下。
你想先进入dwr的调试界面去做调试,那么struts会在页面上抛出一个错
HTTP Status 404 - There is no Action mapped for namespace / and action name dwr.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
原因分析
如果你在web.xml中是这样配置的
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
struts就会在页面上抛出这个错,只能说明struts的配置文件struts.xml中没有配置这个action或action配置错误。
因为struts会把所有的请求都交给struts来处理。所以你在url地址栏输入“http://localhost:8080/demo_dwr/dwr”时,
"dwr"会在struts中默认为是一个action,会按照action的方式来处理,但struts.xml文件中又没有配置这个action,
就会抛出这样的错。
(3)解决方案
第一种:在struts.xml中配置如下标签
<struts>
<constant name="struts.action.excludePattern" value="/dwr/*,/dwr/test/demo1"></constant>
</struts>
表示让struts在处理value中的路径时将其忽略。
第二种:在web.xml中配置struts的url_pattern时
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/struts/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
这样配置就不是让所有的请求都交给struts来处理,让struts处理它该处理的请求
dwr处理dwr该处理的请求,让请求发送接收明确。