首页 > 解决方案 > Spring Boot 应用程序休息调用在 tomcat 中为下一个请求提供 404 错误

问题描述

弹簧靴的新手。将战争部署到 tomcat 服务器。部署后的url是-http://localhost:8080/project-0.0.1-SNAPSHOT/。它显示欢迎 jsp 页面并且工作正常。启动按钮应该调用控制器启动项目。但是 url 调用转到 http://localhost:8080/startProject 而不是 http://localhost:8080/project-0.0.1-SNAPSHOT/startProject。在快照版本之后手动输入 /startProject 后,项目工作正常。我缺少什么配置?请帮忙。谢谢你。

我的代码是下面的 Welcome.Jsp

<a type="button" class="start-btn" href="/startProject">Start New Project</a>

Pom.xml 4.0.0 org.springframework.boot spring-boot-starter-parent 2.3.4.RELEASE com.project mancala 0.0.1-SNAPSHOT war mancala Spring Boot 演示项目

<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-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</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>

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

项目控制器.java

@Controller

公共类项目控制器 {

@Autowired
private ProjectService projectService;

@GetMapping(value = "/")
public String login() {
    return "project";
}

@GetMapping(value = "/startProject")
public String startNewGame(ModelMap model) {
    ProjectModel projectModel = projectService.startNewProject();
    model.addAttribute("projectModel", projectModel);
    return "project";
}

}

标签: spring-boot

解决方案


由于您已将 application.properties 文件中的server.servlet.context-path属性设置为project-0.0.1-SNAPSHOT,因此可以通过以下网址访问该应用程序:http://localhost:8080/project-0.0.1-SNAPSHOT /

因此,您所有的 jsp 页面 url 都必须以上下文路径开头:/project-0.0.1-SNAPSHOT/ **。

这意味着,Welcome.jsp 文件中的 startProject 页面 url 应该如下所示:

<a type="button" class="start-btn" href="/project-0.0.1-SNAPSHOT/startProject">Start New Project</a>

我有一个示例项目可以证明对您有帮助:https ://github.com/nkumashi/springboot-webmvc-demo 。


推荐阅读