使用哪个初始化参数:jersey.config.server.provider.packages 或 javax.ws.rs.Application?
我正在将 JAX-RS Web 服务部署到 Tomcat servlet 容器。
我看过使用以下两种方法之一来指示文件中的资源的代码示例: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>
...其中资源应驻留在包中,并且我认为是通过Java RTTI发现的。com.example
方法 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,这让我开始思考。