JSP集成
一般来说SpringBoot不建议直接使用JSP页面,但不排除在实际工作中碰到需要使用的场景,那么SpringBoot如何集成JSP呢?因为SpringBoot内置的Tomcat并没有集成对JSP的支持,也没有对EL表达式的支持,因此要使用JSP应该先把相关的依赖集成进来。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
除了引入上述必要的依赖外,我们还需要配置视图解析图,有关视图解析器在SpringMVC中也进行了相关介绍,如下:
在SpringBoot中,我们只需要application.properties文件中进行相关配置即可
spring.mvc.view.prefix=/WEB-INF/views/jsp/
spring.mvc.view.suffix=.jsp
那么要是要求项目中支持多种视图解析器该如何进行设置呢?如需要支持html和jsp,之前我们在学习SpringMVC时,介绍的方式是在xml中进行配置的,如下:
那么我们在SpringBoot应该如何配置呢?我们可以不用web配置,其实和我们之前SpringMVC介绍不采用xml配置,采用注解的方法一致,之前的在SpringMVC采用注解配置方法如下:
接下来来看看SpringBoot中,如何设置多个视图截图器,可以看到其中添加了一个检查器,其实就和我们在xml中配置上一模一样
public class HandleResourceViewExists extends InternalResourceView {
@Override
public boolean checkResource(Locale locale) {
File file = new File(this.getServletContext().getRealPath("/") + getUrl());
return file.exists(); //判断页面是否存在
}
}
然后我们只需要建立相应的路径文件就可以进行访问了
注意: 如果按照上述的设置,我们在进行测试时,如果首先未找到html文件,然后去访问了jsp文件,那没有问题,但是如果直接找到了html文件,进行访问,那就会报错,为什么呢?因为html属于静态资源呀,所以我们还需要进行相关的配置,以允许静态资源的访问
模板引擎
上述我们说到SpringBoot是不推荐使用JSP的,没错它更推荐我们使用模板引擎来渲染html,其中SpringBoot强烈推荐的是用thymeleaf,在SpringBoot中使用thymeleaf非常的简单,首先引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
然后我们需要按照规范在resources
文件下建立一个templates
文件夹,如下:
其中index.html内容如下:
<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<head lang="en">
<meta charset="UTF-8"/>
</head>
<body>
<h1 th:text="${value}"/>
</body>
</html>
然后我们在Controller中创建一个访问请求即可,记得我们需要把上述配置的视图解析器给注释掉再进行测试哦
@Controller
//@RestController
public class DemoController {
@RequestMapping("/index")
public String testThymeleaf(ModelMap map) {
map.addAttribute("value", "Hello World");
return "index";
}
}