第一个SpringMVC程序 HelloSpringMVC踩坑

简单的HelloSpringMVC的程序,调整了大半天一直是404,但是最终还是解决了,为此做个记录

跟着狂神说学习的SpringMVC,狂神是Spring5,用的依赖为:

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.22</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>

由于我使用的最新版本的Spring6,所以采用的依赖为:

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>6.1.3</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.0.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/jakarta.servlet.jsp.jstl/jakarta.servlet.jsp.jstl-api -->
        <dependency>
            <groupId>jakarta.servlet.jsp.jstl</groupId>
            <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
            <version>3.0.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/jakarta.servlet.jsp/jakarta.servlet.jsp-api -->
        <dependency>
            <groupId>jakarta.servlet.jsp</groupId>
            <artifactId>jakarta.servlet.jsp-api</artifactId>
            <version>3.1.1</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

唯一区别大概就是所有的javax都改成了jakarta,这是因为Spring6之后全部都改为了jakarta,这是由于

编写HelloSpringMVC.class时,Spring6需要导入的包为

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

而Spring5需要导入的包为:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


如果对应版本的Spring导入的包错误,以下代码就会爆红

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        
}

接下来便是踩坑之路:

首先,我是按照视频敲得代码(代码绝对无错误),配置的Tomcat9,运行后直接404,然后根据网上的教程改为Tomcat10,结果还是404,网上找了半天,都没解决,心态崩了。

直接删项目,重新建了一个,结果被我发现了问题所在。

由于我按照狂神的步骤来建立的maven项目,也就是先建立一个父工程,然后在里面建立子Module,最后对子工程Add FrameWork Support:

问题就出在这,狂神对子工程Add FrameWork Support时,在父工程的pom.xml中是没有导入依赖的,这就导致了Add的web默认是4.0版本的,且无法进行选择

最终得到的web.xml是这样的:


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
        version="4.0">
</web-app>

但是如果父工程已经导入了Spring6的依赖后,注意,一定要已经下载下来了:

这时候再对子工程Add web时,就默认是6.0版本了。

最终得到的web.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
         version="6.0">
</web-app>

看到区别了吧!

最终得出的结论就是,Spring6不匹配web版本4,因此需要将web改成版本6的才行,当然,如果采用Spring5,那么用web版本4是没有问题的。

最后,运行,成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值