Struts映射到使用扩展名命名的操作不起作用

时间:2016-04-10 02:15:53

标签: java tomcat url struts2 mapping

我正在使用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,这仍然让我感到困惑。

1 个答案:

答案 0 :(得分:0)

Struts处理带有操作扩展的URL。但扩展是在配置常量

中定义的
<constant name="struts.action.extension" value=",,action"/>

您可以在那里添加自己的动作扩展程序。您应该使用不带扩展名的操作名称​​,这样可以减少混淆。

默认操作映射器用于解析URL,最后一个点之后的所有内容都是扩展名。如果它与上面配置给出的扩展名匹配,那么它将提取操作名称。操作名称​​不应该具有扩展名。