Java 类,即使它在Web应用程序库中清晰可见

Java 类,即使它在Web应用程序库中清晰可见,java,servlets,jersey,java-ee-8,Java,Servlets,Jersey,Java Ee 8,但没有一个答案有用 在我的Eclipse项目上启动Tomcat服务器9会出现错误 java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer.class at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1364) at org.apache.catali

但没有一个答案有用

在我的Eclipse项目上启动Tomcat服务器9会出现错误

java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer.class
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1364)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1187)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:539)
尽管我可以清楚地看到
org.glassfish.jersey.servlet下
jersey container servlet core.jar下
webapp Libraries下的
ServletContainer.class

所有必需的JAR都被添加到
/src/main/webapp/WEB-INF/lib
,它们似乎被正确导入

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>JavaAPI</display-name>
  
    <servlet>
        <servlet-name>JAVA API</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer.class</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>test</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup> <!-- Tried Removing this, no difference -->
    </servlet>
    <servlet-mapping>
        <servlet-name>JAVA API</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>

JavaAPI
JAVA API
org.glassfish.jersey.servlet.ServletContainer.class
jersey.config.server.provider.packages
测试
1.
JAVA API
/休息/*
Hello.java:

package test;

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

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@Path("/hello")
public class Hello {
    
    @GET
    @Produces(MediaType.TEXT_XML)
    public String sayHello() {
        String resource = "<? xml version='1.0' ?>" + 
                    "<hello>Hi Varun! This is the sayHello call.</hello>";
        return resource;
    }
    
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public String sayHelloJSON() {
        String resource = null;
        return resource;
    }
    
    @GET
    @Produces(MediaType.TEXT_HTML)
    public String sayHelloHTML() {
        String resource = "<h1>Hi Varun! This is the sayHelloHTML call.</h1>";
        return resource;
    }
}
封装测试;
导入javax.ws.rs.GET;
导入javax.ws.rs.Path;
导入javax.ws.rs.products;
导入javax.ws.rs.core.MediaType;
导入javax.ws.rs.ApplicationPath;
导入javax.ws.rs.core.Application;
@路径(“/hello”)
公共课你好{
@得到
@生成(MediaType.TEXT\u XML)
公共字符串sayHello(){
字符串资源=“”+
“嗨,瓦伦!这是问候电话。”;
返回资源;
}
@得到
@产生(MediaType.APPLICATION_JSON)
公共字符串sayHelloJSON(){
字符串资源=null;
返回资源;
}
@得到
@生成(MediaType.TEXT\u HTML)
公共字符串sayHelloHTML(){
String resource=“嗨,瓦伦!这是sayHelloHTML调用。”;
返回资源;
}
}
项目结构:

使用:

  • 日食:2021-03
  • 雄猫:9
  • Java:1.8(设置在BuildPath、ProjectFacets下)
  • JAX-RS 2.0/Jersey 2.25.x
没有Maven,Gradle参与,只是一个web项目,每个罐子都是手工挑选和导入的


是以下内容。

删除.class后缀

<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
org.glassfish.jersey.servlet.ServletContainer
而不是

<servlet-class>org.glassfish.jersey.servlet.ServletContainer.class</servlet-class>
org.glassfish.jersey.servlet.ServletContainer.class

您指定的是类名,而不是类对象。

删除.class后缀

<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
org.glassfish.jersey.servlet.ServletContainer
而不是

<servlet-class>org.glassfish.jersey.servlet.ServletContainer.class</servlet-class>
org.glassfish.jersey.servlet.ServletContainer.class

您指定的是类名,而不是类对象。

p.S我已经束手无策,几乎要发疯了,每当我必须做任何与JavaEE相关的事情时,总会有一些细微的问题超出我的思维范围来解决。我很抱歉,如果这是一个错误的地方来表达这一点,但我在我的生活中第一次真正地感到沮丧。无论我遵循哪个教程,无论它们多么简单,即使我一步一步地遵循它们,总会有一些奇怪的错误弹出并阻止我。如果你的回答没有帮助,那就告诉我JavaEE对你来说有多令人沮丧,这会让我感觉好一些。你有推荐的吗?P.S.我已经束手无策,几乎要发飙了,每当我要做任何与JavaEE相关的事情时,总会有一些细微的问题超出我的心智去解决。我很抱歉,如果这是一个错误的地方来表达这一点,但我在我的生活中第一次真正地感到沮丧。无论我遵循哪个教程,无论它们多么简单,即使我一步一步地遵循它们,总会有一些奇怪的错误弹出并阻止我。如果您的回答没有帮助,请告诉我JavaEE对您来说有多么令人沮丧,这会让我感觉更好。您有推荐的吗?我以前试过这个,控制台会遇到多个堆栈异常。但是webservice*确实返回了带有
MediaType.TEXT\uHTML
值的函数。因此,我猜测出了严重的问题。我并不是说这是唯一的问题,但这解决了类找不到足够的问题。我会将此标记为正确。我以前尝试过此方法,但控制台会出现多个堆栈异常。但是webservice*确实返回了带有
MediaType.TEXT\uHTML
值的函数。因此,我猜测出了严重的问题。我并不是说这是唯一的问题,但这解决了类找不到足够的问题。我会把这个标记为正确的。