【问题标题】:How to enable JSP pages in Spring Boot?如何在 Spring Boot 中启用 JSP 页面?
【发布时间】:2016-12-01 10:07:37
【问题描述】:

我想要显示一个简单的 JSP 页面。我在 Tomcat 8 服务器上使用 Spring Boot。

test.jsp:

<!DOCTYPE html>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World!</h1>
    </body>
</html>

我在application.properties中配置了JSP的路径:

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

我的项目结构(maven):

src/main/java
src/main/resources
WebContent/WEB-INF/test.jsp

控制器:

@RestController
@RequestMapping("/web/test")
public class MyController {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String getMissingContent(ModelMap model) {
        model.put("time", new Date());
        model.put("message", "testmsg");
            return "test";
    }
}

@SpringBootApplication
public class MyConfig extends SpringBootServletInitializer {
}

结果:我没有看到 HTML 页面,而只是空白页面上的字符串“test”。为什么?

【问题讨论】:

  • 对于初学者,请尝试使用@Controller 而不是@RestController
  • 长话短说,@RestController 会将“test”视为响应本身,而@Controller 会将“test”视为要呈现的视图。如果前缀和后缀设置OK,那么应该渲染“测试”视图。
  • 您介意将此添加为真实答案吗?这就是原因。
  • 如果只是这样,当然。我会尽快准备一个答案,参考文档。

标签: spring jsp spring-mvc spring-boot


【解决方案1】:

只需将@RestController 转换为@Controller 即可为您的MyController。观察到行为的原因是@RestController@Controller 之间的差异。根据the docs for @RestController

[@RestController is] 一个便利的注解,它本身用@Controller 和@ResponseBody 进行注解。

由于@ResponseBody注解,方法的返回值被视为响应本身。

Spring MVC 的@Controller 注释将期望方法的返回值是要呈现的视图的名称(以便呈现的视图可以作为响应体返回)。如果您的视图的前缀和后缀设置正确,模型将被传递给视图并呈现视图。

在您的情况下,您打算将模型传递给“测试”视图以进行渲染(并返回),但隐藏的 @ResponseBody 破坏了您的计划,并且“测试”(字符串)按原样返回,因为响应正文。

【讨论】:

    【解决方案2】:

    @RestController 会将“测试”视为响应本身

    @Controller 会将“test”视为要渲染的视图。

    如果前缀和后缀设置正常,则应呈现“测试”视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-08
      • 2017-10-06
      • 1970-01-01
      • 2020-04-13
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多