O Springboot inicia localmente, o caminho de acesso é normal, o tomcat externo é executado e o acesso à interface 404

1. Introdução do caso:

  1.1 Estrutura:

   1.2 pom.xml:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
  
     .....................................................
    <properties>
        <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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    1.3 Código da camada do controlador:

@RestController
public class TestController {

    @GetMapping(value = "/")
    public String test1() {
        return "hello world";
    }


    @GetMapping(value = "/test")
    public Map<String, Object> test() {
        Map<String, Object> map = new HashMap<>();
        map.put("张三", 1);
        map.put("李四", 2);
        return map;
    }

}

1.4 Classe de inicialização do boot do Spring

@SpringBootApplication
public class DebugDemoApplication{

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

1.5 Breve descrição

Qualquer configuração em application.yaml.

Demonstração de inicialização de primavera muito simples. Comece diretamente com a execução local. Completamente ok.

E o navegador visita localhost: 8080 ( aqui server.servlet. O caminho do contexto não está configurado no application.yaml ), que pode ser visto no navegador

2. O problema

        Esta demonstração simples usa a ideia local e é executada para iniciar.Não há problema algum, mas é empacotada em um pacote war usando o maven e, em seguida, começou a usar o tomcat e, em seguida, visita localhost: 8080 / nome do projeto (ps: aqui é construído com o springboot tomcat é executado, o caminho de acesso não é o mesmo) .

       Depois de usar o maven para concluir o pacote: demo-0.0.1-SNAPSHOT.war, renomeie-o para demo.war e solte-o no tomcat webapps. Execute .status.bat no diretório bin para executar o tomcat.

Visite o navegador localhost: 8080 / demo:

3. Resolver

    3.1 Introdução ao spring-boot-starter-tomcat

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

   3.2 Classe de inicialização

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class DebugDemoApplication extends SpringBootServletInitializer {

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

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

Após a conclusão da modificação acima, use a idéia para executar novamente para iniciar, visite o navegador localhost: 8080:

Empacote novamente, renomeie e inicie o servidor tomcat para ver o efeito colocado no servidor tomcat externo:

Portanto, em resumo, o problema foi resolvido.

ps:

       O caminho da interface entre a inicialização local do springboot e o acesso à inicialização do servidor tomcat não é o mesmo. A solução aqui também é muito simples. Adicione uma configuração ao arquivo de configuração principal application.yml do spring boot:

server:
  servlet:
    context-path: /demo   #项目名

 

Publicado 187 artigos originais · Gosto 146 · Visite mais de 490.000

Acho que você gosta

Origin blog.csdn.net/qq_37495786/article/details/105016313
Recomendado
Clasificación