gpt4 book ai didi

java - 为什么jersey2服务部署在tomcat中没有错误,但无法访问资源?

转载 作者:行者123 更新时间:2023-12-01 13:09:16 26 4
gpt4 key购买 nike

我的pom:

<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.7</version>
</dependency>

web.xml

<web-app>
<display-name>jerseysample</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.adaequare.rest.config.JerseyResourceInitializer</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>

我的resourceonfig实现:

package com.adaequare.rest.config;

import org.glassfish.jersey.server.ResourceConfig;

public class JerseyResourceInitializer extends ResourceConfig {
public JerseyResourceInitializer() {
packages(true, "com.adaequare.resource");
}
}

我的资源:

package com.adaequare.resource;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello")
public class Hello {
@GET
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello(){
return "<html><title>Hello Jersey</title><body><h1>Hello Jersey</h1></body></html>";
}

@GET
@Path("/text")
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
return "Hello Jersey";
}

// This method is called if XML is request
@GET
@Path("/xml")
@Produces(MediaType.TEXT_XML)
public String sayXMLHello() {
return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
}

@GET
@Path("/text")
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
return "Hello Jersey";
}

}

我正在将“动态 Web 模块”版本 3.0 和 Java 1.7 用于项目方面和 Tomcat 7。应用程序部署(成功?)没有任何错误,因为我确实看到了默认的 jsp 页面,但是当我转到以下任一页面时:

http://localhost:8080/myproject/rest/hello
http://localhost:8080/myproject/rest/hello/sample
http://localhost:8080/myproject/rest/hello/text
http://localhost:8080/myproject/rest/hello/xml

我收到 404 错误。是什么阻止我的资源类正确返回?我错过了什么或者有什么问题吗?该项目在 eclipse kepler 中没有显示任何错误。

部署程序集是:

/src/main/java
/src/main/resources
/src/main/webapp
/target/m2e-wtp/web-resources
Maven Dependencies

最佳答案

我刚刚测试了您的资源,没有任何问题。

我不明白你从扩展 ResourceConfig 并将其用作 init-param 中受益(当然,你可能做的不仅仅是这个例子)。

我会废弃它,只需添加以下内容作为唯一的init-param,它可以直接拉入您的Resource

<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>com.adaequare.resource.Hello</param-value>
</init-param>

(如果您愿意,您还可以使用“jersey.config.server.provider.packages”并指定包名称)

此外,我总是找到 Jersey monitoring statistics通过 mbean 启用对于确定我的资源是否已正确部署非常有帮助。为此,请添加以下 init-param,启动 jconsole(在 java/bin 目录中)并连接到进程 - jersey 提供了有关已部署资源的大量信息

<init-param>
<param-name>jersey.config.server.monitoring.statistics.mbeans.enabled</param-name>
<param-value>true</param-value>
</init-param>

最后,请参阅this例如使用 Jetty(此测试服务器是我插入您的资源进行测试的服务器)

关于java - 为什么jersey2服务部署在tomcat中没有错误,但无法访问资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23023100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com