我正在尝试使用 jersey 来建立一个简单的 Java Web 应用程序来提供 Web 服务。但是我有以下问题。 tomcat服务器找不到资源http://localhost:8081/OnlineShop/rest/books/list但它可以找到我的简单servlet http://localhost:8081/OnlineShop/index
我有以下 web.xml
另一方面,我注意到 com.sun.jersey.spi.container.servlet.ServletContainer 存在于我的项目中,因为我使用 maven 添加了依赖项,但 jersey.config.server.provider.packages 不存在。也许这就是问题所在,但我不知道我必须添加的确切依赖项。
My BookRest.java 具有以下代码,位于 com.shop.rest 包中。
最后我的 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>
最佳答案
拜托,请摆脱这整个项目。您显然是一个初学者,似乎只是将随机配置和依赖项放在一起,可能来自不同的教程。您的依赖项不兼容,并且您的 web.xml 配置错误。就像我说的,放弃整个项目并从头开始。如果您刚刚开始,您应该使用其中一个启动应用程序。
您正在使用 Netbeans,因此只需执行以下操作
- 文件 → 新项目
- Maven → 来自 Archetype 的项目
- 搜索
jersey-quickstart-webapp
- 选择具有组 ID
org.glassfish.jersey.archetypes
的组 - 应显示最新版本。
- 应该是不言自明的
您会发现添加的唯一依赖项是
<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。在我看来,Jackson 是一个更好的 JSON 库。
同时保留 Jersey Documentation方便获取一些使用 Jersey 的良好阅读和引用 Material
关于java - 泽西网络服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30684707/