2013-03-18 64 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文件。也許你仍然部署舊版本。