如何 - 过滤器中的url映射?

时间:2012-05-07 13:44:11

标签: struts2 struts

我在这里已经有一个未解决的问题,当我们使用servlet时,如何以及何时将.do附加到任何URL中...

今天,当我了解过滤器时,另一个疑问发生了:

<filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

在这种情况下什么是/ *,如果它意味着它将检查所有请求?此外,当调用某个操作时,url says: http://..../myapp/register.action..do.action会被追加,甚至在映射中也没有提及。请清除这个疑问,如果可能,.do也要怀疑......

2 个答案:

答案 0 :(得分:1)

让我们逐一清除你的怀疑。在web.xml下面的行

<filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

是调用S2过滤器的条目。行<url-pattern>/*</url-pattern>,告诉容器(tomcat / weblogic等)何时容器应该调用过滤器。 因为对于S2,我们需要做很多初始化工作才能让你的应用程序工作,我们告诉容器每个发送到容器的请求应该通过S2过滤器。

关于像.action,.do这样的网址的扩展,这是内部的S2,与您在web.xml中看到的过滤器映射无关。

所以简而言之,如果你点击了

这样的网址
yourapplication-domian/abc.action
yourapplication-domian/abc.do
yourapplication-domian/abc.jsp

以上所有请求都将通过过滤器传递,现在一旦它们通过过滤器,S2内部将检查哪个URL是有效的S2 URL 例如,如果您将扩展名设置为.action,则S2将仅识别具有这些扩展名的网址,并在过滤器处理所有扩展名时对其进行处理。

希望这有助于你清除疑虑

答案 1 :(得分:0)

在struts-core jar中找到struts-default.properties,你可以找到这些设置。

您可以提供以逗号分隔的列表

e.g。 struts.action.extension=action,jnlp,do

   struts.action.extension=action (default setting)