0

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

今天在学习过滤器的时候,又产生了一个疑惑:

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

在这种情况下,什么是 /*,如果它意味着它将检查所有请求?此外,当调用一个动作时,附加了url says: http://..../myapp/register.action.Like .do.action甚至在映射中都没有提到它。请清除这个疑问,如果可能的话,这个.do疑问也......

4

2 回答 2

1

让我们尝试一一消除您的疑虑。web.xml中的以下行

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

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

关于 URL 之类的扩展.action,.do,这是 S2 内部的,与您在 中看到的过滤器映射无关web.xml

所以简而言之,如果你点击像这样的网址

yourapplication-domian/abc.action
yourapplication-domian/abc.do
yourapplication-domian/abc.jsp

所有上述请求都将通过过滤器,现在一旦它们通过过滤器,S2 将在内部检查哪个 URL 是有效的 S2 URL,例如,如果您设置了扩展名,因为.actionS2 将仅识别具有这些扩展名的 URL 并处理它们而过滤器将处理所有。

希望这可以帮助您消除疑虑

于 2012-05-08T07:24:37.037 回答
0

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

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

例如struts.action.extension=action,jnlp,do

   struts.action.extension=action (default setting)
于 2012-05-07T14:37:05.920 回答