多个 Servlet 映射

Multiple Servlet Mappings

我在分配给我的项目中打开了一个 web.xml 文件,并且看到多个具有相同 servlet 名称的 servlet 映射:

   <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>/beta/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

此外,特定的 servlet 似乎包含两种不同的配置:

<servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.common.utils.HeadCompliantActionServlet</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
            <param-name>config/beta</param-name>
            <param-value>/WEB-INF/struts-config-beta.xml</param-value>
        </init-param>

所以我的问题是...

特定 servlet 的两个不同实例是否 initialized/loaded? 或者是否加载了特定 servlet 的一个版本?

本节

<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>/beta/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

指定您的 servlet 应该响应哪些模式。使用同一个 servlet 的多个 url 模式是完全正确的。

然后是这个部分:

<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.common.utils.HeadCompliantActionServlet</servlet-class>
    <init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
        <param-name>config/beta</param-name>
        <param-value>/WEB-INF/struts-config-beta.xml</param-value>
    </init-param>

这只是一个 servlet 的定义,而不是两个。然而它有两个参数,用 init-param 定义的参数在初始化时发送到 servlet,但它仍然是同一个 servlet 定义。

Struts 然后读取配置并处理初始化的 servlet 中的配置。

您的应用程序中有多少个 servlet class 实例由 servlet 容器决定。