Я развертываю веб-службы JAX-RS в контейнере сервлетов Tomcat.
Я видел примеры кода, которые используют один из следующих двух способов указания ресурсов в файле web.xml
:
метод 1 - с помощью `jersey.config.server.provider.packages` init-param
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.example</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
... где ожидается, что ресурсы будут находиться в пакете com.example
, и я предполагаю, что они обнаружены с помощью Java RTTI.
метод 2 - с помощью `javax.ws.rs.Application` init-param
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>full.qualified.name.to.MyApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
... где класс MyApplication
явно идентифицирует классы ресурсов:
public class MyApplication extends javax.ws.rs.core.Application {
public Set<Class<?>> getClasses() {
Set<Class<?>> s = new HashSet<Class<?>>();
s.add(ResourceA.class);
return s;
}
Использует один и тот же метод, исключительно вопрос вкуса и конфигурации, и каковы некоторые компромиссы? Лично я предпочитаю более мелкозернистый контроль, предлагаемый методом 2, однако архетип maven Jersey 2.7:
mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp \
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
-DgroupId=com.example -DartifactId=simple-service-webapp -Dpackage=com.example \
-DarchetypeVersion=2.7
... использует метод 1, и это заставило меня задуматься.