web.xml配置问题

芒果酷2 2013-04-27 09:17:43
本人在项目中使用的是struts2+spring3+mybatis3的框架,在使用UrlRewrite的过程中进行了伪静态的处理,同时没做struts.xml的配置,是使用的struts注解的方式。下面开始入正题:
本人首页的action是home,在web.xml,这里只列出需要说明问题部分

<filter>
<filter-name>struts2</filter-name>
<filter-class>com.util.MyStrutsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

在urlrewrite.xml中
<urlrewrite>
<rule>
<from>^/$</from>
<to>/home</to>
</rule>
<rule>
<from>/index.html</from>
<to>/home</to>
</rule>
</urlrewrite>

在action中用struts注解,问题来了,当我请求http://localhost:8080/rakerMy/时,按照预期的,经过伪静态之后应该会执行home的请求,但是却不然,项目报异常了:
2013-04-27 20:58:50,125 WARN [org.apache.struts2.dispatcher.Dispatcher] - Could not find action or result
There is no Action mapped for namespace / and action name . - [unknown location]
at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:178)
at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:478)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at com.util.MyStrutsFilter.doFilter(MyStrutsFilter.java:21)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
意思是找不到匹配的action或者result。
但是我在地址栏输入http://localhost:8080/rakerMy/index.html时,请求却能执行。甚至我在urlrewrite.xml中任意配置,只要请求带后缀的,请求都能执行。如:
<urlrewrite>
<rule>
<from>/aa.abc</from>
<to>/home</to>
</rule>
<rule>
<from>/index.jsp</from>
<to>/home</to>
</rule>
<rule>
<from>/aa.abc</from>
<to>/home</to>
</rule>

在这里还有一个超级晕的现象,就是当我把struts过滤器和urlrewrite过滤器先后顺序调换后,问题就完全解决了!!!!!!
问题1:在第一种情况下(也就是两个过滤器按照最先的顺序),是不是经过struts2过滤器之后,给请求做了什么处理,为什么只能带后缀的请求能执行?
问题2:为什么当我改变过滤器的顺序后,问题釜底抽薪的解决了,我知道问题应该出在struts过滤器上,但是并不知道其真正的原因,请高人解答!小弟不甚感激!
...全文
143 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧