tomcat - 无法通过 Jersey 解决 404 错误

标签 tomcat intellij-idea jersey jax-rs http-status-code-404

几天来我一直在寻找这个问题的解决方案,我完全不明白为什么我的本地服务器上总是出现 404 错误。

我从头开始一个新项目,只有一个 servlet,但没有任何成功。

pom.xml

<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>TheQuestionnaireDatabase</groupId>
    <artifactId>TheQuestionnaireDatabase</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>The Questionnaire Database</name>
    <url>http://maven.apache.org</url>

    <properties>
        <jdk.version>1.8</jdk.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.27</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-server</artifactId>
            <version>2.27</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>

        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0.2</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.2</version>
            </plugin>
        </plugins>
    </build>


</project>

网络.xml

<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>TheQuestionnaireDatabase</display-name>

    <servlet>
        <servlet-name>QuestionnaireApplication</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.damsky.danny.questionnaire.QuestionnaireApplication</param-value>
        </init-param>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.damsky.danny.questionnaire.servlet</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>

    <servlet-mapping>
        <servlet-name>QuestionnaireApplication</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

QuestionnaireApplication.java

package com.damsky.danny.questionnaire;

import org.glassfish.jersey.server.ResourceConfig;

import javax.ws.rs.ApplicationPath;

@ApplicationPath("/")
public final class QuestionnaireApplication extends ResourceConfig {

    static {
        System.out.println("Hello");
    }

    public QuestionnaireApplication() {
        System.out.println("Hello");
        packages("com.damsky.danny.questionnaire.servlet");
    }
}

欢迎Servlet.java

package com.damsky.danny.questionnaire.servlet;

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

@Path("/welcome")
public final class WelcomeServlet {

    @GET
    @Produces(MediaType.TEXT_HTML)
    public String showWelcomePage() {
        return "<h1>Hello</h1>";
    }
}

任何帮助将不胜感激! 如果它很重要:我正在使用 IntelliJ IDEA、Tomcat 9.0.10 和 Java 8。

更新:

要访问我使用的 servlet,localhost:8080/welcome (我查了一下应用上下文是/)

最佳答案

这是因为你有“/welcome”的 servlet 映射

您可以在 WelcomeServlet.java 中将映射从 @Path("/welcome") 更改为 @Path("/")

或者为 url-mapping 添加新的 servlet @Path("/")

package com.damsky.danny.questionnaire.servlet;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/")
public final class IndexServlet {

    @GET
    @Produces(MediaType.TEXT_HTML)
    public String showPage() {
        return "<h1>Index</h1>";
    }
}

关于tomcat - 无法通过 Jersey 解决 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51804610/

相关文章:

apache - 在 Apache Tomcat 5.5 上播放 FLV 时出现问题

scala - 在 Scaladoc 中,如何链接到同一类中的方法?

java - 在 JavaFX WorkerStateEvent 上编译 lambda 时出错

java - Google Guice & Jersey 在应用程序包过滤时对同一个 servlet 的多个 URL 模式

java - AppEngine React 和 Jersey - 您指定的 scrapDir 不可用

Tomcat,使用绝对路径的sendRedirect不起作用

java - Tomcat 没有上传所有文件

javax.ws.rs.NotSupportedException : Could not find message body reader for type: class com. sun.jersey.core.header.FormDataContentDisposition

tomcat - 从chef supermarket下载的tomcat cookbook如何运行?

scala - Playframework 插件在 IntelliJ IDEA 12 中不起作用