Использование аннотаций для определения нескольких сервлетов одного класса с разными init-параметрами
Я ранее достиг этого с помощью 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/Test1
, Servlet
класс получит значение test1
за propertyKey
и если я пойду к 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, но они все еще применяются к одному сервлету.
Можно ли это сделать, или я должен просто придерживаться web.xml
? Или, может быть, я смирюсь и пойду с ?propertyKey=test1
а также ?propertyKey=test2
но я думаю, что это лучше скрывать такие вещи.
1 ответ
Если вы не хотите использовать XML, вы также можете зарегистрировать два (или более) экземпляра вашего Servlet
с ServletContainerInitializer
и укажите разные параметры инициализации.
Кроме предложения Дж. Б. Низета, я не думаю, что вы найдете решение с аннотациями.