springboot 部署tomcat 404

SpringBoot部署到tomcat 404

问题描述具体描述:

在idea运行启动类Main时, 可以通过
http://localhost:8080/test
访问到
但是通过打成war包, 放在webapps下, 通过./startup.sh启动访问
http://localhost:8080/Test/test
就会404

tomcat/webapps文件夹:

img

img

启动类:

package com.gamejoye;


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;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@SpringBootApplication
@Controller
public class Main extends SpringBootServletInitializer {

    @RequestMapping("test")
    @ResponseBody
    public String test() {
        return "test page";
    }

    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Main.class);
    }
}

pom.xml:


<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.0modelVersion>
    <packaging>warpackaging>

    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>3.0.0-SNAPSHOTversion>
        <relativePath/> 
    parent>
    <groupId>com.gamejoyegroupId>
    <artifactId>TestartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <properties>
        <maven.compiler.source>17maven.compiler.source>
        <maven.compiler.target>17maven.compiler.target>
        <java.version>17java.version>
    properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>

        <dependency>
            <groupId>com.corundumstudio.socketiogroupId>
            <artifactId>netty-socketioartifactId>
            <version>1.7.22version>
        dependency>

        <dependency>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-nopartifactId>
            <version>1.7.2version>
        dependency>

        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>fastjsonartifactId>
            <version>2.0.1version>
        dependency>

        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>

        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druid-spring-boot-starterartifactId>
            <version>1.1.9version>
        dependency>

        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
            <version>2.2.2version>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-data-redisartifactId>
        dependency>


    dependencies>


    <repositories>
        <repository>
            <id>spring-milestonesid>
            <name>Spring Milestonesname>
            <url>https://repo.spring.io/milestoneurl>
            <snapshots>
                <enabled>falseenabled>
            snapshots>
        repository>
        <repository>
            <id>spring-snapshotsid>
            <name>Spring Snapshotsname>
            <url>https://repo.spring.io/snapshoturl>
            <releases>
                <enabled>falseenabled>
            releases>
        repository>
    repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-milestonesid>
            <name>Spring Milestonesname>
            <url>https://repo.spring.io/milestoneurl>
            <snapshots>
                <enabled>falseenabled>
            snapshots>
        pluginRepository>
        <pluginRepository>
            <id>spring-snapshotsid>
            <name>Spring Snapshotsname>
            <url>https://repo.spring.io/snapshoturl>
            <releases>
                <enabled>falseenabled>
            releases>
        pluginRepository>
    pluginRepositories>

project>
  • 你本地跑,因为没有配置项目名,直接可以 http://localhost:8080/ 访问;
  • 打成war包了,部署到tomcat下,直接在tomcat里面跑,还是要配置一下spring boot项目的访问项目名: application.properties文件中添加 server.servlet.context-path 配置
    参考这篇:
    https://blog.51cto.com/u_15242344/2842201

可能有以下原因:

  1. 在启动脚本中,您没有指定应用程序的上下文路径,导致应用程序部署到了根路径下。因此,您需要在URL中添加应用程序的上下文路径“Test”,例如:http://localhost:8080/Test/test
  1. 在您的代码中,您已经添加了上下文路径。因此,您需要将URL更改为http://localhost:8080/test ,或者在代码中将@RequestMapping注解更改为@RequestMapping("/Test/test")。
@SpringBootApplication
@Controller
public class Main extends SpringBootServletInitializer {

    @RequestMapping("/Test/test")
    @ResponseBody
    public String test() {
        return "test page";
    }

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Main.class);
    }
}

同时请注意,你在pom.xml中使用的Spring Boot版本是一个快照版本,建议使用一个稳定的版本。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

你这个应该是文件夹冲突了,你有两个Test路径, 你把那个Test文件夹改个名字重启下tomcat再访问试试