在 spring 启动时未进入 index.jsp 页面

Not getting to the index.jsp page in spring boot

当我访问 http://localhost:8080/ 获取我的 spring 启动表单时,它只给我一个白标签错误页面。这是我的控制器代码


package net.codejava;

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

@Controller
public class MvcController {

    @RequestMapping("/")
    public String home() {
        System.out.println("Going home...");
        return "index";
    }
}

这是我的 index.jsp 代码

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Volunteer Management Form</title>
</head>
<body>
    <h1>Volunteer Management Form</h1>
</body>
</html>

我不明白为什么它不显示我却在控制台打印“回家...”

不确定您是如何在 spring 启动时设置 JSP 的,因为您需要一些特定的依赖项。此外,现在人们在 spring 启动时使用 Thymeleaf 或 Freemarker 作为模板而不是 JSP。我能够使用这些 url

关注 运行 来自 https://www.baeldung.com/spring-boot-jsp 的 github 项目
  • http://localhost:8080/spring-boot-jsp/book/viewBooks
  • http://localhost:8080/spring-boot-jsp/book/addBook

我认为您的视图解析器有问题将此添加到您的 application.properties:

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

并将您的 index.jsp 移动到 /WEB-INF/jsp/

第二种方法是使用 WebConfig class 设置解析器,如下所示: 将此 class 添加到您的源代码包中:

@EnableWebMvc
@Configuration
@ComponentScan("net.codejava")
public class WebConfig implements WebMvcConfigurer {
    @Bean
    public ViewResolver internalResourceViewResolver() {
    InternalResourceViewResolver bean = new 
    InternalResourceViewResolver();
    bean.setViewClass(JstlView.class);
    bean.setPrefix("/WEB-INF/view/");
    bean.setSuffix(".jsp");
    return bean;
   }

}

更新 2022 年 3 月 16 日 Spring 引导的较新版本存在一些问题,因此我们应该像下面这样添加它:

@Configuration
@EnableWebMvc
@ComponentScan
public class MvcConfig extends WebMvcConfigurerAdapter {

@Bean
WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> 
enableDefaultServlet() {
    return (factory) -> factory.setRegisterDefaultServlet(true);
}

@Bean
public ViewResolver getViewResolver() {
    InternalResourceViewResolver resolver = new 
    InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/view/");
    resolver.setSuffix(".html");
    return resolver;
}

@Override
public void 
configureDefaultServletHandling(DefaultServletHandlerConfigurer 
configurer) {
    configurer.enable();
}

}