1

我以前通过使用web.xml这样的方法实现了这一点:

<servlet>
  <servlet-name>Test1</servlet-name>
  <servlet-class>com.abc.test.Servlet</servlet-class>
  <init-param>
    <param-name>propertyKey</param-name>
    <param-value>test1</param-value>
  </init-param>
</servlet>
<servlet>
  <servlet-name>Test2</servlet-name>
  <servlet-class>com.abc.test.Servlet</servlet-class>
  <init-param>
    <param-name>propertyKey</param-name>
    <param-value>test2</param-value>
  </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>Test1</servlet-name>
  <url-pattern>/test1</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>Test2</servlet-name>
  <url-pattern>/test2</url-pattern>
</servlet-mapping>

这意味着,如果我去http://server/project/Test1Servlet类将获得价值test1propertyKey如果我去http://server/project/Test2,它将获得价值test2

我现在开始为 Tomcat 7 开发一个应用程序,所以我尝试使用注释来复制它:

@WebServlet(name = "Test1", urlPatterns = "/test1", initParams = @WebInitParam(name = "propertyKey", value = "test1"))
@WebServlet(name = "Test2", urlPatterns = "/test2", initParams = @WebInitParam(name = "propertyKey", value = "test2"))
public class Servlet extends HttpServlet {
// ...

这导致了错误“ Duplicate annotation @WebServlet”。

我还尝试放入参数数组和 URL 模式,但它们仍然适用于同一个 servlet。

有可能做到这一点,还是我应该坚持web.xml?或者也许我会接受它并继续,?propertyKey=test1?propertyKey=test2我认为隐藏这些东西会更好。

4

1 回答 1

0

如果您不想使用 XML,您还可以Servlet使用 a注册您的两个(或更多)实例ServletContainerInitializer并指定不同的 init 参数。

除了JB Nizet 的建议之外,我认为您不会找到带有注释的解决方案。

于 2015-03-13T14:00:48.820 回答