Tomcat 6上的Jersey RESTful部署

时间:2013-03-18 19:45:00

标签: web-services rest jersey tomcat6

我使用以下设置在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设置Application子类时,服务器是否仍在扫描web.xml

1 个答案:

答案 0 :(得分:1)

  

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

不,不。如果没有与资源配置相关的初始化参数(如javax.ws.rs.Application),则扫描路径完成The documentation explains

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

  

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

当您提供Application课程时,它会打印出来:

  

INFO:实例化Application类test.MyApplication

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