gpt4 book ai didi

rest - war 文件没有在tomcat中执行

转载 作者:行者123 更新时间:2023-11-28 23:59:46 25 4
gpt4 key购买 nike

我是网络应用程序开发的新手。

我一直致力于开发一个 rest web 服务并将其本地部署到 apache tomcat 服务器上。我正在为此使用 sts。

现在,当我从 sts 执行我的应用程序时(作为 java 应用程序运行)。它运行良好。我正在访问 localhost:8080 的 url,一切正常。

现在,我正在做以下事情:

  1. 为我的应用程序创建了一个名为 sample-rest-service.war 的 .war 文件
  2. 在不同的系统上,我已经下载并安装了配置为在端口 9999 上运行的 tomcat 8
  3. 我将 .war 文件复制到 apache-tomcat-8.028 的 webapps 文件夹中
  4. 我使用 startup.sh 启动我的 tomcat 服务器
  5. 我在浏览器中输入 localhost:9999,主页出现了
  6. 我输入 localhost:9999/sample-rest-service,但我收到代码为 404 的错误消息
  7. 我输入 localhost:9999/examples,它工作正常,i.r.内容出现
  8. 我检查了 webapps 文件夹,.war 文件已被提取,war 文件和提取的文件夹都在那里。

我错过了什么?

通常,如果我通过 sts 运行我的应用程序,我会这样做:

  1. 作为 Java 应用程序运行
  2. 然后它让我选择,我选择了 Application-hello,其中 Application 是具有 main() 的类,hello 是包
  3. 之后,我可以在控制台中读取 Tomcat 在端口上启动的消息:8080 (http)
  4. 现在在我的浏览器中输入:http://localhost:8080/greeting
  5. 我得到 JSON 格式的输出

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_3_1.xsd" version="3.1">
<display-name>sample-rest-service</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>

为了产生 war ,我做了以下事情:

  1. 在我的项目中添加了maven war插件
  2. 将 pom.xml 中的包装从 jar(默认)更改为 war
  3. 导出 war 文件

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>org.springframework</groupId>
<artifactId>gs-rest-service</artifactId>
<version>0.1.0</version>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.6.RELEASE</version>
</parent>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

<properties>
<java.version>1.7</java.version>
</properties>


<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
</plugin>
</plugins>
</build>

<repositories>
<repository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>


<packaging>war</packaging>
</project>

最佳答案

事实证明,整个问题都出在构建 war 文件上。

解释了通过 sts 构建可部署和可运行的 war 文件的正确方法 here

  1. 使用 SpringBootServletInitializer 扩展您的 Application 类,并覆盖配置方法

    @SpringBootApplication公共(public)类应用程序扩展 SpringBootServletInitializer{

    public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(Application.class);
    }
  2. 在pom.xml中,在包装标签内提及war

  3. 您需要将 spring-boot-starter-tomcat 依赖项标记为“已提供”

关于rest - war 文件没有在tomcat中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33230730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com