无法访问 Tomcat 上部署的 WAR 文件 [英] Can not access deployed WAR file on Tomcat

查看:49
本文介绍了无法访问 Tomcat 上部署的 WAR 文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个可在我的本地机器上运行的 Spring Boot Rest 服务项目.当我将应用程序作为Spring Boot App"运行时

I have a Spring boot rest service project which works on my local machine. When I run the application as "Spring Boot App"

我可以通过访问

http://127.0.0.1:8080/persons/all

并且它按预期返回 JSON.

and it returns JSON as it's supposed to.

我将 pom.xml 打包更改为 war,然后我通过转到 Run as -> Maven build in Spring 工具套件创建了一个 war.它创建一个战争文件.当我在 http://myserverip:8080/manager/ 上传战争文件时,我没有收到任何错误,它显示在应用程序下

I changed the pom.xml packaging to war, I then created a war by going to Run as -> Maven build in Spring tools suit. It creates a war file. When I upload the war file on http://myserverip:8080/manager/ I get no errors and it shows up under Applications

上传后war文件名为myapp-0.0.1-SNAPSHOT.war",我尝试访问

The war file name is "myapp-0.0.1-SNAPSHOT.war" after uploading it, I tried to access it by going to

http://myserverip:8080/myapp-0.0.1-SNAPSHOT/人/所有

但我收到 404 错误

But I get a 404 error

我在这里做错了什么?

我的 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>com.mycompany</groupId>
    <artifactId>myapp</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <name>myapp</name>
    <description>myappapi</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


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

当我构建应用程序时,我得到以下日志

When I build the application, I get the following logs

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building myapp 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ myapp ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ myapp ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ myapp ---
[INFO] Not copying test resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ myapp ---
[INFO] Not compiling test sources
[INFO] 
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ myapp ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-war-plugin:2.6:war (default-war) @ myapp ---
[INFO] Packaging webapp
[INFO] Assembling webapp [myapp] in [C:\Users\me\Documents\workspace-sts-3.8.2.RELEASE\myapp\target\myapp-0.0.1-SNAPSHOT]
[INFO] Processing war project
[INFO] Webapp assembled in [586 msecs]
[INFO] Building war: C:\Users\me\Documents\workspace-sts-3.8.2.RELEASE\myapp\target\myapp-0.0.1-SNAPSHOT.war
[INFO] 
[INFO] --- spring-boot-maven-plugin:1.4.2.RELEASE:repackage (default) @ myapp ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.300 s
[INFO] Finished at: 2016-11-21T10:12:03-05:00
[INFO] Final Memory: 20M/243M
[INFO] ------------------------------------------------------------------------
[WARNING] The requested profile "pom.xml" could not be activated because it does not exist.

我的 MyappApplication.java

my MyappApplication.java

package com.mycompany;

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

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class MyappApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyappApplication.class, args);
    }
}

推荐答案

参考:打包可执行的jar和war文件

如评论中所述,您可以通过将 war 部署到独立的 tomcat 实例来传统地部署 spring boot 应用程序.您需要对具有 main() 方法的 MyappApplication.java 类进行一些更改.

As mentioned in comments, you can deploy spring boot application traditionally by deploying war to a standalone tomcat instance. You need to make some changes to your MyappApplication.java class which has the main() method.

  • 使您的 MyappApplication 扩展 SpringBootServletInitializer 并覆盖其 configure() 方法,

  • Make your MyappApplication to extend SpringBootServletInitializer and override its configure() method,

@SpringBootApplication
public class MyappApplication extends SpringBootServletInitializer {

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

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

}

  • 下一步是将打包为 war 而不是您已有的默认 jar.

  • The next step is to have packaging as war instead of the default jar which you already have.

    最后在您的 pom.xml 中将嵌入的 tomcat 容器的范围更改为 provided,以便在部署到单独的实例时不会发生冲突.

    Finally in your pom.xml change the embedded tomcat container's scope to provided, so that it doesn't conflict when you deploy to a separate instance.

    这篇关于无法访问 Tomcat 上部署的 WAR 文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆