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

Spring BootWar文件在ec2上获得404

晋天逸
2023-03-14

我编写了一个简单的Eclipse Spring BootRest程序。只有几个endpoint返回一些字符串。我正在使用Eclipse Gradle插件构建它。没有问题,它在Eclipse提供的Tomcat实例中运行良好。我还在本机windows Tomcat上运行了它。我使用tomcat web应用程序管理器使用deploy特性部署了.war文件。运行良好。然后我部署了一个ec2 ubuntu实例,再次使用tomcat web应用程序管理器并上载.war文件。rest程序正确地显示在应用程序窗口中,但它不会运行。我使用了以下URL,

http://ec2-ip-address/demo-0.0.1-snapshot/hello

我一直有404的。我非常肯定tomcat部署和ec2环境看起来是正确的,因为我可以在ec2实例中运行tomcat7-examples而没有任何问题。如有任何帮助,我们将不胜感激。

awselbrestServeraApplication.java文件:

package demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@SpringBootApplication
public class AwsElbRestServerAApplication {

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

servletInitializer.java文件:

package demo

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder      application) {
        return application.sources(AwsElbRestServerAApplication.class);
    }
}

restController.java文件:

package demo

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class RestController {

    @RequestMapping("/hello")
    public @ResponseBody String hello() {

        return "Greetings from Server A";
    }

    @RequestMapping("/heartbeat")
    public @ResponseBody String heartbeat() {

        return "Server A is still running";
    }
}

Build.Gradle文件:

buildscript {
    ext {
        springBootVersion = '1.2.4.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle
        plugin:${springBootVersion}") 
        classpath("io.spring.gradle:dependency-management
        Plugin:0.5.1.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'idea'
apply plugin: 'spring-boot' 
apply plugin: 'io.spring.dependency-management' 
apply plugin: 'war'

war {
    baseName = 'demo'
    version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    jcenter()
    maven { url "http://repo.spring.io/libs-snapshot" }
}

configurations {
    providedRuntime
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-actuator")
    compile("org.springframework.boot:spring-boot-starter-remote-shell")
    compile("org.springframework.boot:spring-boot-starter-web")
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
    testCompile("org.springframework.boot:spring-boot-starter-test") 
}

eclipse {
    classpath {
         containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
         containers 'org.eclipse.jdt.launching.JRE_CONTAINER/
         org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/
         JavaSE-1.8'
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.3'
}

共有1个答案

段干华皓
2023-03-14

我在这里回答了一个类似的问题。

您正在Java1.7JRE下运行外部tomcat,同时根据1.8编译了代码。

奇怪的是,没有错误,并且应用程序出现在manager应用程序中,但是当你试图访问它时,却得到了一个404。

确认这一点的一种方法是查看您的tomcat日志输出,您不会看到Spring Boot横幅。

为了解决这个问题,您可以根据Java1.7编译代码

 类似资料:
  • 我使用可恢复上传任何大小的文件上传。如果我在上传文件时遇到任何问题,我会等待指数退避,然后询问当前上传会话的字节范围,然后从最后上传的字节继续。这个过程最多重复5次。如果文件最终没有上传成功,我会在日志中写入一个错误。 不幸的是,我没有记录所有的中间错误,所以我只知道最后一个错误是“410,description:Internal error”。 该文件小于1KB,在记录错误之前,整个过程大约花了

  • 首先,让我声明我不是Linux用户中最有道德的,所以对我来说...下面是我所采取的所有步骤的简要说明。最终的问题/问题是,我似乎不可能下载一个合适的docker-compose安装。 null null “第1行:not:未找到命令”。 docker-compose文件的大小似乎只有9KB。因为这就是我每次使用上面提到的docker-compose安装序列时得到的结果。 这个问题在这里得到了解决:

  • 我已经创建了一个ec2实例,并用putty连接了这个实例。但现在,我对如何上传该实例上的文件或网页感到困惑

  • 我想上传一个文件到我的数据库,上传后导入它,并最终将数据导出到我的数据库。我有上传工作只是罚款,但我不知道如何获得文件的绝对路径后,它被上传。我可以打印出文档的名称,但是如果上传了相同的文档名称,它会被附加,但是如果我调用,它仍然显示原始文件名。我能做些什么来获得绝对文件路径,然后调用一个函数来开始处理这个文件? 这就是我想要做的: 用户上传. csv文件 文件保存在db中(带有描述和文件路径。文

  • 我正在尝试使用EC2服务器在Tomcat7中部署Vaadin7文件。我将文件上载到,但当我转到时,它找不到资源。 知道为什么吗? 谢谢!

  • 问题内容: 这是一个您可以在网上到处阅读的各种问题,并有各种答案: 等等 但是,总有“最佳方法”,它应该在堆栈溢出中。 问题答案: 来自其他脚本语言的人们总是认为自己的语言更好,因为他们具有内置功能而不是PHP(我现在正在研究Pythonistas :-)。 实际上,它确实存在,但是很少有人知道。相约: 这是快速且内置的。可以根据传递给它的常量为您提供其他信息,例如规范路径。 请记住,如果您希望能