【问题标题】:Jersey servlet version issues [java.lang.NoSuchMethodError] jakarta httpservletJersey servlet 版本问题 [java.lang.NoSuchMethodError] jakarta httpservlet
【发布时间】:2023-02-15 14:27:26
【问题描述】:

我正在学习 Java Web 技术,并且正在尝试使用 Jersey 部署一个简单的 REST 服务,当我尝试访问该资源时,我遇到了以下错误:

SEVERE: Servlet.service() for servlet [Jersey REST Service] in context with path [/mkstick] threw exception [org.glassfish.jersey.server.ContainerException: java.lang.NoSuchMethodError: 'void jakarta.servlet.http.HttpServletResponse.setStatus(int, java.lang.String)'] with root cause
java.lang.NoSuchMethodError: 'void jakarta.servlet.http.HttpServletResponse.setStatus(int, java.lang.String)'

我的java类资源:

package com.dbmw.mkstick;

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

@Path("/hello")
public class Resource {
    
    @GET
    @Produces(MediaType.TEXT_HTML)
    public String getText() {
         return "<html><head/><body>Hello world!</body></html>" ;
    }

}

我的网站 xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 <servlet>
    <servlet-name>Jersey REST Service</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.dbmw.mkstick</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>

pom.xml

<?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>com.dbmw</groupId>
    <artifactId>mkstick</artifactId>
    <version>0.1</version>
    <name>mkstick</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.source>11</maven.compiler.source>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.bundles</groupId>
            <artifactId>jaxrs-ri</artifactId>
            <version>3.0.4</version>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
                <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
                <plugin>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>3.7.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-project-info-reports-plugin</artifactId>
                    <version>3.0.0</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <finalName>mkstick</finalName>
    </build>
    <packaging>war</packaging>
</project>

据我所知,这似乎是版本问题,我试图让每个依赖项都是最新的,但它根本没有帮助。

【问题讨论】:

  • setStatus 已在 Servlet 6 中删除。可能您使用了太新的 Tomcat(Tomcat 10.1.),为此您需要尚未推出的 Jersey 3.1.0。

标签: java tomcat servlets jersey


【解决方案1】:

如评论所述,如果您在 Tomcat 10.1.x 或更高版本上部署,则需要将球衣版本升级到 3.1+(现已发布)。 要获得起始模板,请使用 Jersey 3.1.1 的 Maven 构建原型,如 here. 所示

这也是一个令人困惑的错误,因为从 Tomcat 10.0.x 到 Tomcat 10.1.x 的更新需要 Servlet 规范(版本 5 到 6)中的整个版本跳转see link。通常在同一个主要版本中没有这么大的版本变化,即 10.x

【讨论】:

    猜你喜欢
    • 2023-01-12
    • 2016-07-14
    • 2011-06-23
    • 1970-01-01
    • 2019-06-23
    • 2015-07-07
    • 2015-04-04
    • 2021-06-27
    • 2013-11-23
    相关资源
    最近更新 更多