0

我正在使用以下设置在 Tomcat 6 上部署 REST Web 服务,它可以工作:

<web-app>  
  <servlet>  
    <servlet-name>RestServlet</servlet-name>  
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>  
    <load-on-startup>1</load-on-startup>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>RestServlet</servlet-name>  
    <url-pattern>/*</url-pattern>  
  </servlet-mapping>  
</web-app> 

通过上述设置,Tomcat 会扫描WEB-INF/classesWEB-INF/lib文件夹中的资源。

然后我将其更改为以下设置以使用Application子类:

<web-app>  
  <servlet>  
    <servlet-name>RestServlet</servlet-name>  
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>  
    <init-param>  
           <param-name>javax.ws.rs.Application</param-name>  
            <param-value>test.MyApplication</param-value>  
    </init-param>  
    <load-on-startup>1</load-on-startup>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>RestServlet</servlet-name>  
    <url-pattern>/*</url-pattern>  
  </servlet-mapping>  
</web-app>

返回资源类test.MyApplication的子类在哪里:Application

public class MyApplication extends Application {
  public Set<Class<?>> getClasses() {
    Set<Class<?>> s = new HashSet<Class<?>>();
    s.add(MyResource.class);
    return s;
  }
}

但是服务器仍然会扫描WEB-INF/classesWEB-INF/lib寻找资源。

我错过了什么?在设置子类WEB-INF时服务器是否仍然扫描?Applicationweb.xml

4

1 回答 1

1

在 web.xml 中设置 Application 子类时,服务器是否仍然扫描 WEB-INF?

不,它没有。该文档解释说,如果不存在与资源配置相关的初始化参数(如 ),则完成扫描路径javax.ws.rs.Application

您应该看到服务器日志中的内容。当 Jersey 初始化时,它会记录它正在做的事情,并且对于类路径扫描,它会打印如下内容:

INFO:在 Web 应用程序资源路径中扫描根资源和提供程序类:
/WEB-INF/lib
/WEB-INF/classes

当你提供一个Application类时,它会打印这个:

INFO:实例化应用程序类 test.MyApplication

您应该确保web.xml在服务器启动时部署了正确的文件。也许您仍然部署了旧版本。

于 2013-03-22T11:23:19.887 回答