要使用的初始化参数:jersey.config.server.provider.packages或javax.ws.rs



我正在将JAX-RSWeb服务部署到Tomcat servlet容器中。

我看到了使用以下两种方法之一来指示web.xml文件中资源的代码示例:

方法1-使用`jersy.config.server.proprovider.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>

其中资源被期望驻留在CCD_ 2包中,并且我想是通过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,这让我思考。

方法1(使用servlet的init param jersey.config.server.provider.packages):是特定于Jersey的,只在包中查找。它在不同的JAX-RS实现之间是不可移植的。当您想要限制所考虑的JAX-RS资源类/应用程序时,可以在场景中使用它。

方法2(使用servlet的init param javax.ws.rs.Application):任何JAX-RS实现都必须支持此部署选项,因此是可移植的(尽管如果切换到另一个JAX-RS实现,如RestEasy,则必须更改servlet的类)。此选项提供了更多的粒度(您可以准确地选择要考虑的类,而不仅仅是整个包)。缺点是:你必须写更多的代码。

方法3(在Servlet ver.3容器中,您可能已经在其中部署了):只定义您的JAX-RS应用程序而不定义任何Servlet(使用web.xml描述符检查部署)可能是最好的方法(它在JAX-RS实现之间也是可移植的,您可以在不更改web.xml的情况下更改JAX-RS实现),如果您有一个显式声明的JAX-RS应用程序(您有)。

方法4如果您想在servlet容器3中部署war归档中的所有类(没有明确定义的JAX-RS应用程序),也可以以可移植的方式进行部署。请在此处查看:没有应用程序子类的JAX-RS应用程序

相关内容

最新更新