2015-06-06 113 views
1

我想建立一个简单的Java Web应用程序使用泽西的Web服务。不过,我有以下问题。 Tomcat服务器无法找到资源http://localhost:8081/OnlineShop/rest/books/list但它可以找到我的简单的servlet http://localhost:8081/OnlineShop/index新泽西州的网络服务

Problem

我有以下的web.xml web.xml file

在另一方面,我注意到,融为一体。 sun.jersey.spi.container.servlet.ServletContainer存在于我的项目中,因为我使用maven添加了依赖关系,但jersey.config.server.provider.packages不存在。也许这是问题,但我不知道我必须添加的确切依赖关系。

我的BookRest.java包含以下代码,位于com.shop.rest包中。

enter image description here

最后我的pom.xml有以下依赖性。

<dependencies> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>1.19</version> 
    </dependency> 
    <dependency> 
     <groupId>net.sf.json-lib</groupId> 
     <artifactId>json-lib-ext-spring</artifactId> 
     <version>1.0.2</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-servlet</artifactId> 
     <version>1.18</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-core</artifactId> 
     <version>1.19</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-client</artifactId> 
     <version>1.19</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.core</groupId> 
     <artifactId>jersey-common</artifactId> 
     <version>2.17</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet-core</artifactId> 
     <version>2.17</version> 
    </dependency> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-web-api</artifactId> 
     <version>7.0</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 

回答

3

请摆脱这整个项目。你显然是初学者,似乎只是将随机配置和依赖关系放在一起,可能来自不同的教程。您的依赖关系不兼容,并且您的web.xml配置错误。就像我说的那样,废弃整个项目并从头开始。如果你刚刚开始,你应该使用其中一个启动应用程序。

你在NetBeans中,故只需做以下

  1. 文件→新建项目
  2. 的Maven从原型→项目
  3. 搜索jersey-quickstart-webapp
  4. 选择一个组ID org.glassfish.jersey.archetypes
  5. 应显示最新版本。
  6. 应该是自explanitory从那里

您将所添加的唯一依赖是

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-servlet-core</artifactId> 
    <!-- use the following artifactId if you don't need servlet 2.x compatibility --> 
    <!-- artifactId>jersey-container-servlet</artifactId --> 
</dependency> 

而且web.xml文件看起来像

<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.stackoverflow.jersey</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Jersey Web Application</servlet-name> 
    <url-pattern>/api/*</url-pattern> 
</servlet-mapping> 

这将让你一个简单的应用程序运行。您将看到一个依赖关系,您需要为JSON支持取消注释。不发表评论。或者更好的是,取消注释,然后将jersey-media-moxy更改为jersey-media-json-jackson。杰克逊是IMO更好的JSON库。

还留着方便一些好的阅读和参考材料Jersey Documentation与泽西工作

+0

是的,你有我与一些依赖随机努力的原因。不过,我只使用org.glassfish.jersey.core解决了我的问题。但是,你能解释一下为什么org.glassfish.jersey.core与com.sun.jersey.core依赖不同,因为我认为com.sun.jersey.core是官方的并且足够用于一个简单的项目。 – afym

+1

'com.sun'是Jersey 1.x'org.glassfish'是Jersey 2.x两者完全不兼容。你不应该混淆两者。永远! –