Spring 5.3.9 MVC XML配置:ViewResolver未映射到控制器

Spring 5.3.9 MVC XML Configuration: ViewResolver Not Mapping To Controller

提问人:Shin 提问时间:6/8/2022 最后编辑:Shin 更新时间:6/9/2022 访问量:707

问:

我开始学习 Spring Framework,目前正在学习 Spring MVC。我使用的是 Spring 5.3 版,并且在 views 目录中加载 JSP 文件时遇到问题。我从注释中了解到他们删除了后缀模式匹配,但我不知道我的 XML 配置应该是什么来匹配此新更改。

有人可以帮我解决这个问题,并向我展示Spring 5.3 MVC的XML配置应该是什么。它让我的进步停止了整整三天!

注意:我知道 Spring Boot 是现在的常态,但我想从头开始学习 Spring,即使它使用起来更乏味。

附加说明:我完全使用XML配置。

我目前没有使用构建工具,因为我稍后会学习一个。我从命令行构建我的项目:

cd 到 webapp 文件夹 --> jar -cvf mvc-test.war * --> 在 Tomcat 9 服务器上运行

JDK:11

IDE:VS 代码

我的控制器类:

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {
    
    @RequestMapping("/")
    public String showPage() {
        return "test-page";
    }
}

我的 web.xml 文件:

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

    <display-name>spring-mvc-demo</display-name>

    <absolute-ordering />

    <!-- Spring MVC Configs -->

    <!-- Step 1: Configure Spring MVC Dispatcher Servlet -->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-mvc-demo-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!-- Step 2: Set up URL mapping for Spring MVC Dispatcher Servlet -->
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
</web-app>

我的spring-mvc-demo-servlet.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- Step 3: Add support for component scanning -->
    <context:component-scan base-package="com.controller" />

    <!-- Step 4: Add support for conversion, formatting and validation support -->
    <mvc:annotation-driven/>

    <!-- Step 5: Define Spring MVC view resolver -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

我的项目结构如下(对不起,我不知道如何格式化):

根 Projet 文件夹:mvc-test

mvc-test:src 和 webapp 文件夹

来源:main/java/com/controller/HomeController.java

web应用:WEB-INF

WEB-INF:库,视图,spring-mvc-demo-servlet.xml,web.xml

视图:测试页.jsp

项目结构

java spring-mvc xml-configuration

评论

0赞 zawarudo 6/8/2022
你能分享一张你的扩展项目的照片吗,这将非常有帮助
0赞 XtremeBaumer 6/8/2022
您可以使用代替 .然后调用将是 xxx/test-page。我也相信你是错的org.springframework.web.servlet.view.UrlBasedViewResolverorg.springframework.web.servlet.view.InternalResourceViewResolver<url-pattern>/</url-pattern>
0赞 M. Deinum 6/9/2022
@XtremeBaumer 这是更改的专用/专用扩展,不会解决任何问题。映射非常好,因为您想映射所有内容。InternalResourceViewResolverUrlBasedViewResolver
0赞 M. Deinum 6/9/2022
哪里出了问题?为什么你认为它不匹配?只要里面有它就会匹配。我怀疑问题出在你创建战争文件上。您显然只包含里面的内容(我怀疑您使用的是 Maven 或 Gradle)。而不是使用您的构建工具来生成 war 文件。你现在会错过库、编译类等。test-page.jsp/WEB-INF/views/webappjar -cvf ....
0赞 Shin 6/9/2022
嗨,扎瓦鲁多!我在 VS Code 中添加了我的项目结构的图片(lib 文件夹只有所有 Spring 框架 JARS)

答: 暂无答案