我已经在我被分配到的项目中打开了一个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的一个版本?
答案 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容器决定。