多个Servlet映射

时间:2017-03-10 11:40:44

标签: java servlets struts-1

我已经在我被分配到的项目中打开了一个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的两个不同实例? 或者是否正在加载特定servlet的一个版本?

1 个答案:

答案 0 :(得分:1)

本节

<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上发送给servlet的init-param定义的参数,但它仍然是同一个servlet定义。

然后,

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

您的应用程序中将有多少servlet类实例供servlet容器决定。