我正在使用Struts 2.3和Tomcat 7.在过滤请求时,Tomcat如何使用struts2?
当我将Struts操作名称设置为具有扩展名的内容时,它不起作用。
<action name="login.html">
<result>/WEB-INF/content/login.jsp</result>
</action>
没有像login.html
这样的静态文件,那么为什么tomcat不会让Struts处理请求。
当我访问url login.html
时,tomcat返回404页面。
当我将动作名称更改为没有扩展名的内容时,例如login
,然后tomcat返回结果页面。
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.action.excludePattern
。
我无法弄清楚tomcat和Struts如何做这个url映射的事情。
我在struts.xml
的末尾设置了这个来处理未映射的网址。
<action name="**">
<result>/index.html</result>
</action>
当存在静态文件时,tomcat将使用静态文件作为响应,而不是让Struts将请求映射到此虚拟通配符操作。
我认为当存在静态文件时,Tomcat不会使用Struts过滤器。
但是,当URL下没有任何静态文件时,Struts仍然无法处理带扩展名的URL,这仍然让我感到困惑。
答案 0 :(得分:0)
Struts处理带有操作扩展的URL。但扩展是在配置常量
中定义的<constant name="struts.action.extension" value=",,action"/>
您可以在那里添加自己的动作扩展程序。您应该使用不带扩展名的操作名称,这样可以减少混淆。
默认操作映射器用于解析URL,最后一个点之后的所有内容都是扩展名。如果它与上面配置给出的扩展名匹配,那么它将提取操作名称。操作名称不应该具有扩展名。