2013-03-18 18 views
0

我使用以下设置在Tomcat 6部署REST Web服务和它的作品:泽西在Tomcat 6 REST风格的部署

<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

我错过了什么?当Application子类设置为web.xml时,服务器是否仍然扫描WEB-INF

回答

1

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

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

你应该看看你的服务器日志里有什么。当新泽西初始化它记录它在做什么和类路径扫描其打印一样的东西:

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

当你提供一个Application类它打印此相反:

信息:实例化的应用程序类test.MyApplicati on

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