在 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();
}
}
当我访问 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();
}
}