无法通过Jersey获得404错误

时间:2018-08-11 23:44:15

标签: 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>

web.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");
    }
}

WelcomeServlet.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 (我检查了应用程序上下文是/)

3 个答案:

答案 0 :(得分:0)

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

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

或添加新的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>";
    }
}

答案 1 :(得分:0)

看起来我的问题是Maven。似乎遵循一种特定的项目结构,该结构不同于常规的Java EE项目结构。在IntelliJ中启动一个新的Maven项目并使用Maven自己的项目结构为我解决了这些问题。

答案 2 :(得分:0)

对我来说,这有助于将所有与Jersey相关的Jars放在$("#dropdownlist1_ID").change(function() { $.ajax({ type: 'POST', url: 'GetValuesForDropdownlist2', dataType: 'json', data: { id: $("#dropdownlist1_ID").val() }, success: function (data) { $.each(data, function (i, item) { $("#dropdownlist2_ID").append('<option value="' + item.Value + '">' + item.Text + '</option>'); }); }, error: function (ex) { console.log('Failed to retrieve data. Exception: ' + ex); } }); }); 的lib文件夹中

您可以在IntelliJ中的public JsonResult GetValuesForDropdownlist2(int id) { var selected = db.dropdownlist1_Table.Where(t => t.Id == id).FirstOrDefault(); return Json(new SelectList(db.dropdownlist2_Table.Where(t => (t.Column_To_Filter == selected.Id)), "Column_ID", "Column_Description")); }

下执行此操作