springboot项目部署到tomcat浏览器报错404,如何解决?(语言-java)

springboot项目部署到tomcat浏览器报错404

问题具体描述:

通过idea启动Main可以通过
http://localhost:8080/test
访问到结果
但是把项目打成war包放到tomcat/webapps下面再通过
http://localhost:8080/Test/test
访问会报错404(tomcat配置一切都是默认的)

tomcat项目目录:

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>BlogartifactId>
    <version>1.0-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>

    <build>
        <finalName>BlogfinalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>

    <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>

你好,springnoot直接生启动就可以了,使用以下命令

java -jar jar包名带后缀 > catalina.log

如果一定要使用外置tomcat,是需要配置的,直接打成war是不行的。

1、首先安装外置tomcat,然后配置环境变量,把tomcat的bin目录加入Path环境变量中。

2、在pom.xml文件中添加如下依赖

<!--外置tomcat启动依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

3、在application.properties文件中添加如下配置:

#外置tomcat启动配置
server.tomcat.basedir=/usr/local/tomcat
server.tomcat.protocol=org.apache.coyote.http11.Http11NioProtocol
server.port=8081

4、在启动类上添加注解:

@SpringBootApplication
@ComponentScan(basePackages = {"com.xxx.xxx"})
public class Application {

    public static void main(String[] args) {
        //重新定义tomcat路径
        System.setProperty("catalina.base", System.getProperty("user.dir") + "/tomcat");
        SpringApplication.run(Application.class, args);
    }

5、在项目根目录下新建一个文件夹tomcat,然后将外置tomcat的conf、webapps、lib、temp等文件夹拷贝到tomcat文件夹中。

6、在tomcat文件夹下新建一个文件夹webapps,将打包好的war包拷贝到webapps文件夹下,并将war包修改名字为ROOT.war,就可以通过外置tomcat启动springboot项目了。

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

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