【发布时间】:2017-08-28 19:42:20
【问题描述】:
我用 javax.ws 尝试了非常简单的 restful 教程,但我遇到了 maven 依赖问题。 web.xml 文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>service</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
和这样的maven依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>untitled40</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>
类是:
package service;
import javax.ws.rs.*;
@Path("hesab")
public class App {
@Path("textc")
@GET
@Produces("text/plain")
public String recit(){
return "got it";
}
}
问题是当我将 JAR 文件添加到 WEB-INF 中的 lib 文件夹中时,它可以工作并连接到我的服务,但是当我尝试添加 maven 依赖项并删除 lib 文件夹时,它不起作用!你能告诉我问题是什么吗?
【问题讨论】:
-
您的示例 pom.xml 将构建一个 JAR 文件 - 而不是 WAR 文件。您需要添加一个
<packaging>war</packaging>元素。 -
我应该在哪里添加这个包装?在 POM 中?
-
是的,通常在
<artifactId>untitled40</artifactId>和<version>1.0-SNAPSHOT</version>之间 -
我试试这个并得到这个错误:javax.servlet.ServletException: Servlet.init() for servlet jersey-servlet throw exception
-
使用 Tomcat 对您学习 JAX-RS 很重要吗?在 WildFly、Payara、TomEE 等全栈 Java EE 服务器上学习要容易得多,因为您只需要一个 javaee-api 依赖项,它应该是
<scope>provided</scope>。您不需要任何其他依赖项,即使您也想尝试 CDI 和 JPA。