我想要显示一个简单的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
:
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页面,只看到字符串&#34; test&#34;在一个空白页面上。为什么呢?
答案 0 :(得分:3)
只需将@RestController
转换为您@Controller
的{{1}}即可。观察到的行为的原因是MyController
和@RestController
之间的差异。根据{{3}}:
[@ RestController]是一个便利注释,它本身用@Controller和@ResponseBody注释。
由于@Controller
注释,方法的返回值被视为响应本身。
Spring MVC&#39; @ResponseBody
注释将期望方法的返回值是要呈现的视图的名称(以便呈现的视图可以作为响应主体返回)。如果正确设置了视图的前缀和后缀,则模型将传递给视图并呈现视图。
在您的情况下,您打算将模型传递给&#34;测试&#34;要呈现(并返回)的视图,但隐藏的@Controller
破坏了您的计划并且&#34;测试&#34; (字符串)按原样返回,作为响应正文。
答案 1 :(得分:1)
@RestController
会将“测试”视为回应本身
@Controller
会将“test”视为要呈现的视图。
如果前缀和后缀设置正常,则应该呈现“测试”视图。