Spring Boot 支援 JSP配置

胖先森發表於2018-12-29

Spring Boot 支援JSP

個人感覺這篇文件寫的沒有什麼意義,但是終究有的時候需要面對一些新手,他們還是比較JSP的,所以胖先森還是將這篇文件整理一下

SpringBoot預設不支援JSP,因為jsp相對於一些模板引擎,效能都比較低,官方推薦使用thymeleaf,如果想在專案中使用,需要進行相關初始化工作。

1.問題列表

  • 修改JSP需重啟才能生效

    在生產環境中,SpringBoot重新編譯JSP可能會導致較大的效能損失,並且很難追查到問題根源,所以在最新 的版本中,官方已經預設關閉此功能,詳見JspServlet類的初始化引數。

    • 使用devtools(我使用的這種方式)
    • 新增配置server.servlet.jsp.init-parameters.development=true
  • 如何避免各種404

    • 匯入Tomcat+JASPER+JSTL
    • 必須建立webapp目錄

2.搭建步驟說明

A. 通過腳手架搭建

首先使用 Spring Initializr 構建工程,選擇war型別進行構建,整體結構圖如下:

請注意我們選中的是war的選項

專案結構圖

B. 新增依賴關係

<!--配置jsp jstl的支援-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<!--對jsp的支援-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>
<!-- 熱部署 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
<!--Provided  start-->
<!--War包部署到外部的Tomcat中已經包含了這些,所以需要新增以下依賴 否則會和內嵌的Tomcat 容器發生衝突 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
複製程式碼

C. 修改application.properties

#如果按照一般web工程將頁面放在src/main/webapp/WEB-INF/jsp/,則配置字首
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp
# 配置Tomcat編碼
server.tomcat.uri-encoding=UTF-8
server.port=8001
server.servlet.context-path=/boot
複製程式碼

D.新建JSP頁面

  • 在src/main下建立webapp/WEB-INF/jsp資料夾。
  • 在jsp資料夾下建立hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        Hello,${requestScope.name}
    </body>
</html>
複製程式碼

image

E. 建立Controller

package com.hanpang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class IndexController {

    @GetMapping({"/","/os01"})
    public String test01(Model model){
        model.addAttribute("name","胖先森");
        return "jsp/hello";
    }

}
複製程式碼

F.啟動專案

  • 啟動方式1:在IDE啟動Demo02BootApplication,然後開啟專案地址。

    image

  • 啟動方式2:部署到外接Tomcat,啟動完成後,開啟專案地址。這裡需要注意的是,使用外接Tomcat部署的時候,需要將嵌入式容器調整為provided級別。(防止衝突)

    image

    **我的疑問:**這裡我部署到外部的Tomcat之後,是訪問成功了,但是每次修改JSP的時候,我都需要重啟JSP,我個人感覺很頭疼,不知道是不是有解決方案,百度了一下,並沒有找到我想要的答案!

3.最後一句話

既然Spring boot不推薦使用jsp,那隻能換成thymeleaf了,當然其他的比如freemarker也可以選。

相關文章