前言
spring-boot 支持多種模版引擎包括:
FreeMarker
Groovy
Thymeleaf
Velocity
-
Jsp
其中官方是推薦使用Thymeleaf
,而Jsp
官方不推薦,原因是spring-boot創建的項目在src/main/resources
下有個templates
目錄用於放模板文件,而jsp
頁面是放在webapp目錄下,spirng-boot沒有這樣的目錄。但是企業用jsp用的很多,所以還是可以學習一下的。
正文
在pom.xml
中添加依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
在application.properies
中加入如下配置,指定jsp頁面的目錄和後綴
#配置要獲取的信息
com.mlin.hello=hello,mlin
# 頁面默認前綴目錄
spring.mvc.view.prefix=/WEB-INF/jsp/
# 響應頁面默認後綴
spring.mvc.view.suffix=.jsp
新建文件UserController.java
,添加如下代碼:
@Controller
public class UserController {
@Value("${com.mlin.hello}")
private String hello; //獲取配置文件的信息:mlin,hello
@RequestMapping("/index")
public ModelAndView index(){
// 默認會去尋找配置文件配置的 spring.view.prefix 目錄下的頁面
// 即/WEB-INF/jsp/index.jsp
ModelAndView modelAndView = new ModelAndView("index");
modelAndView.addObject("msg",this.hello);
return modelAndView;
}
}
在 src/main
下面創建 webapp/WEB-INF/jsp
目錄存放jsp頁面,新建index.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Spring Boot jsp Sample</title>
</head>
<body>
Message: ${msg}
</body>
</html>
把pom.xml
文件中的jar改成war,這樣纔可以支持jsp
<packaging>war</packaging>
啓動服務,瀏覽器輸入:http://localhost:8080/index
總結
在實踐過程中發現如下問題
當引入的依賴tomcat-embed-jasper
指定範圍是provide
的時候,右鍵啓動類一直報404找不到頁面錯誤,不指定則運行正常。尋找資料發現前輩們的總結如下:
指定provided時:
- 右鍵運行啓動類,訪問頁面報404錯誤
- 使用
spring-boot:run
運行正常 - 打包成jar,通過
java -jar xxxxx.jar
運行報錯 - 打包成war,通過
java -jar xxxxx.war
運行正常
不指定provided時
- 右鍵運行啓動類,訪問頁面正常
-
spring-boot:run
運行 訪問頁面正常 - 打包成jar,通過
java -jar xxxxx.jar
運行報錯 - 打包成war,通過
java -jar xxxxx.war
運行正常
原創作者:夢凌小樣
作品鏈接:https://www.jianshu.com/p/891c3e401e2f【原創不易,轉載請註明出處,感謝理解】
一位愛生活,愛創作,愛分享,愛自己的90後女程序員一枚,記錄工作中的點點滴滴,一起學習,共同進步,期待能和優秀的您交上朋友