当前位置: 首页 > 知识库问答 >
问题:

Wildfly服务器正在运行,但无论我做什么都没有发现返回404错误

糜帅
2023-03-14

我在网上学习了REST API | Web服务教程,中途被卡住了。当我运行它成功安装的服务器时,显示它在http://localhost:8080/同样如此,但只要我尝试访问不同的servlet,页面就会重新加载并返回404 Error Not found。我试着下载早期版本的wildfly,但没有用。我尝试的路径是/demorest、/webapi、/myresources,它们也被结合使用。有什么问题吗?

package com.david.demorest;

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

@Path("myresource")
public class MyResource {

@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
    return "Got it!";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- This web.xml file is not required when using Servlet 3.0 container,
     see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html -->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>Jersey Web Application</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.david.demorest</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webapi/*</url-pattern>
    </servlet-mapping>
</web-app>

<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.david</groupId>
    <artifactId>demorest</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>demorest</name>

    <build>
        <finalName>demorest</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <inherited>true</inherited>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.glassfish.jersey</groupId>
                <artifactId>jersey-bom</artifactId>
                <version>${jersey.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
            <!-- use the following artifactId if you don't need servlet 2.x compatibility -->
            <!-- artifactId>jersey-container-servlet</artifactId -->
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-hk2</artifactId>
        </dependency>
       
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-binding</artifactId>
        </dependency>
       
    </dependencies>
    <properties>
        <jersey.version>3.0.4</jersey.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>

共有1个答案

颜哲彦
2023-03-14

本教程很可能是为了部署到Tomcat而编写的。Wildfly内置了JAXR所需的一切。

要开始,你需要三个文件。首先,需要一个扩展javax的类。ws。rs.core。应用程序。它可以是您想要的任何包装:

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

@ApplicationPath("/rest")
public class RestApplicationConfig extends Application {
    // intentionally empty
}

接下来,你需要你的服务。虽然我的路径以一个正斜杠开头,比如@Path(“/myresource”),但您显示的路径应该可以工作。最后,你需要一个pom。生成war文件的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 https://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <artifactId>jaxrs-simple-sample</artifactId>
    <groupId>com.hotjoe.jaxrs</groupId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

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

    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>8.0.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.2</version>
            </plugin>
        </plugins>
    </build>
</project>

我刚刚证实了这一点。一旦你拥有了所有这些,你就可以生成一个war文件,可以放入$WILDFLY_HOME/standalone/deployments中,然后WILDFLY将运行它。但你需要注意网址。如我的pom中所定义。xml这将创建一个名为jaxrs-simple-sample-1.0-SNAPSHOT的war文件。war,此文件名将成为URL的一部分。在这个例子中,你的服务的URL应该是http://localhost:8080/jaxrs-simple-sample-1.0-SNAPSHOT/rest/myresource。其中的rest部分来自定义的@ApplicationPath。但另一部分来自战争的名称。如果您不喜欢,可以再添加一个特定于Wildfly的文件:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <context-root>myapp</context-root>
</jboss-web>

在标准Maven环境中,该文件将命名为JBossWeb。xml并将被放置在src/main/webapp/WEB-INF中。这会将上述URL更改为http://localhost:8080/myapp/rest/myresource

 类似资料:
  • 在我的应用程序(,出现了一个向上箭头,表示,但我无法处理它来执行任何操作,甚至无法显示toast。我尝试了这个方法,并在选项ItemSelected()中处理了开关(item.getItemId()),但这两种解决方案都不适合我。我错过了一些东西,但不知道是什么。 这是我的代码: ... 我的整个选项项已选定: 我不知道其他代码是否重要: 在我的清单中,我没有父母活动。 我找到了这个答案,它似乎是

  • 我将首先说,我已经查看并尝试了我能找到的每个问题的解决方案。最大的问题是,这些解决方案中的大多数都非常古老,Spring Boot在过去几年中发生了很大变化。明确地说,我已经尝试了这个、这个、这个、这个等等。我还阅读了许多教程。没有任何效果。 我有一个全新的Spring Boot应用程序,我正在尝试让JSP渲染与之一起工作。这些是我的依赖项: 我的项目安排如下: “WEB-APP/jsp”只是我尝

  • 我的laravel项目在本地运行,但当我部署服务器时,项目给出错误。 SQLState[42883]:未定义函数:7错误:运算符不存在:boolean=整数行1:...来自“bo_user”,其中“email”=$1,“isactived”=$2限制...^提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。(SQL:select*from“bo_user”,其中“email”

  • 我刚刚安装了一台新的计算机--全新的Java1.8安装,全新的3.5.2 Maven配置,现在我正在创建一个全新的quickstart Maven项目。 当我添加父Spring Boot启动程序和单个依赖项时,无论我做什么,它都无法解析它。

  • 当涉及到java打包的细节时,我是一个完全的新手。 我已经通过jdk-15编写了一个使用Java-15的TCP数据服务器,它在VSCODE下运行时工作得相当愉快。 生成mrs_server-1.0.exe。然后创建文件夹C:\Program files\MRS_Server,其中包括mrs_server\app文件夹中我的代码的副本,一个mrs_server\runtime文件夹,我假定它包含运行

  • 我刚刚开始在我的应用程序中使用AWS Cognito,我按照说明安装了放大器,创建了用户池和身份池,并设置了一切。我创建了一个注册表单和图章,没有问题的和确认的电子邮件。 但是,当我尝试登录时,我输入了我的凭据,并得到了NotAuthorizedException、不正确的用户名或密码。 我是这样登录的: 无论在输入字段中输入什么,都会出现此错误。我刚开始使用AmazonAWS,真的想不出有什么问