Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 无法访问Tomcat上部署的WAR文件_Spring_Tomcat_Spring Boot_Tomcat8_Spring Web - Fatal编程技术网

Spring 无法访问Tomcat上部署的WAR文件

Spring 无法访问Tomcat上部署的WAR文件,spring,tomcat,spring-boot,tomcat8,spring-web,Spring,Tomcat,Spring Boot,Tomcat8,Spring Web,我有一个SpringBootREST服务项目,它在我的本地机器上工作。当我以“Spring Boot应用程序”运行应用程序时 我可以通过转到访问rest服务 它按预期返回JSON 我将pom.xml包更改为war,然后通过在Spring工具套装中运行->Maven build创建了一个war。它创建一个war文件。当我上传war文件时,我没有收到任何错误,它显示在应用程序下 war文件名为“myapp-0.0.1-SNAPSHOT.war”,上传后,我试图通过访问 但我有一个404错误 我做

我有一个SpringBootREST服务项目,它在我的本地机器上工作。当我以“Spring Boot应用程序”运行应用程序时

我可以通过转到访问rest服务

它按预期返回JSON

我将pom.xml包更改为war,然后通过在Spring工具套装中运行->Maven build创建了一个war。它创建一个war文件。当我上传war文件时,我没有收到任何错误,它显示在应用程序下

war文件名为“myapp-0.0.1-SNAPSHOT.war”,上传后,我试图通过访问

但我有一个404错误

我做错了什么

我的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>
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更改为spring启动之战,请添加以下依赖项

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

org.springframework.boot

如果要将jar更改为spring启动之战,请添加以下依赖项

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

org.springframework.boot

将spring boot可执行jar更改为可部署war的清单

  • 将pom.xml中的打包从“jar”更改为“war”

  • 正如kuhajeyan提到的,将嵌入的tomcat依赖项标记为pom.xml中提供的

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

  • 将spring boot可执行jar更改为可部署war的清单

  • 将pom.xml中的打包从“jar”更改为“war”

  • 正如kuhajeyan提到的,将嵌入的tomcat依赖项标记为pom.xml中提供的

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <scope>provided</scope>
    
  • 参考:

    正如注释中提到的,您可以通过将war部署到独立的tomcat实例来部署spring引导应用程序。您需要对具有
    main()
    方法的
    MyappApplication.java
    类进行一些更改

    • 使您的
      MyappApplication
      扩展
      SpringBootServletilizer
      并重写其
      configure()
      方法

      @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

    • 最后,在
      pom.xml
      中,将嵌入式tomcat容器的作用域更改为
      提供的
      ,以便在部署到单独实例时不会发生冲突

    参考:

    正如注释中提到的,您可以通过将war部署到独立的tomcat实例来部署spring引导应用程序。您需要对具有
    main()
    方法的
    MyappApplication.java
    类进行一些更改

    • 使您的
      MyappApplication
      扩展
      SpringBootServletilizer
      并重写其
      configure()
      方法

      @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

    • 最后,在
      pom.xml
      中,将嵌入式tomcat容器的作用域更改为
      提供的
      ,以便在部署到单独实例时不会发生冲突


    您可以在pom.xml中将buid名称更改为myapp。检查服务器启动时是否注册了
    /persons/all
    。如果不是,它将显示404错误,因为您的控制器没有正确注册。@幸运的是,应用程序在我的本地计算机上运行良好。它是否可能在Spring boot中本地注册,但在使用war文件部署到Tomcat上时不注册?是的,请检查您的Tomcat服务器日志。Spring boot使用嵌入式tomcat。您正在部署到一个单独的tomcat实例中。两者都不一样。@Lucky在启动tomcat之后,我确实看到myapp正在部署,但没有关于/persons/我希望您的组件、配置和服务都在
    公司的
    包中。如果没有,请将其放在本包装内。另外,不要使用三个
    @Configuration
    @EnableAutoConfiguration
    @ComponentScan
    注释,而是使用这个
    @springbootplication
    注释。还要将
    springwebmvc
    依赖项添加到您的webapp中。这将应用程序标记为web应用程序,并激活关键行为,如设置
    DispatcherServlet
    (即,类似于添加
    @EnableWebMvc
    ),您可以在pom.xml中将内置名称更改为myapp。检查服务器启动时是否注册了
    /persons/all
    。如果不是,它将显示404错误,因为您的控制器没有正确注册。@幸运的是,应用程序在我的本地计算机上运行良好。它是否可能在Spring boot中本地注册,但在使用war文件部署到Tomcat上时不注册?是的,请检查您的Tomcat服务器日志。Spring boot使用嵌入式tomcat。您正在部署到一个单独的tomcat实例中。两者都不一样。@Lucky在启动tomcat之后,我确实看到myapp正在部署,但没有关于/persons/我希望您的组件、配置和服务都在
    公司的
    包中。如果没有,请将其放在本包装内。另外,不要使用三个
    @Configuration
    @EnableAutoConfiguration
    @ComponentScan
    注释,而是使用这个
    @springbootplication
    注释。还要将
    springwebmvc
    依赖项添加到您的webapp中。这将应用程序标记为web应用程序,并激活关键行为,如设置
    DispatcherServlet
    (即,类似于添加
    @EnableWebMvc
    )谢谢,现在可以使用:)但是SpringBootServletializer显示为折旧。@Arya您可能正在使用
    org.springframework.boot.context.web.springbootServletializer
    而不是使用
    org.springframework.boot.web.support.springbootServletializer
    。谢谢,现在可以使用:)但是SpringBootServletializer显示为折旧。@Arya您可能正在使用
    org.springframework.boot.context.web.SpringBootServletInitializer
    使用
    org.springframework.boot.web.support.SpringBootServletInitializer