Spring Boot整合模板引擎jsp

jsp也算是一種模板引擎吧。整合jsp前,先說一下運行SpringBoot項目的幾種方式java

1. 運行SpringBoot項目的幾種方式

1.1 使用內嵌Tomcat運行項目

  1. 在IDE中右鍵運行啓動類,也就是直接直接運行Appliction啓動類中的main方法
  2. 使用mvn spring-boot:run
  3. 打成jar包,使用java -jar xxx.jar
  4. 打成war包,使用java -jar xxx.war

1.2 內嵌Tomcat的屬性配置

Tomcat的全部屬性都在org.springframework.boot.autoconfigure.web.ServerProperties 配置類中作了定義 ,咱們只須要在application.properties中配置覆蓋默認配置。git

經常使用配置github

#配置程序端口,默認爲8080
server.port=8080
#用戶繪畫session過時時間,以秒爲單位
server.session.timeout=
# 配置默認訪問路徑,默認爲/
server.context-path=

# 配置Tomcat編碼,默認爲UTF-8
server.tomcat.uri-encoding=UTF-8
# 配置最大線程數
server.tomcat.max-threads=1000

1.3 使用外部Tomcat部署war包

將Spring Boot導出人war包直接放在Tomcat中部署,若是是使用的jsp做爲模板引擎,也就是接下來作的。還須要作一些額外配置,具體配置繼續看下面的操做。web

1.4 總結

總結一下,運行一個Spring Boot項目至少有5種方法,下面就讓jsp做爲模板引擎的Spring Boot項目在這5種啓動方式下正常運行吧。spring

2. 使用jsp做爲模板引擎

項目結構以下:shell

2.1 引入依賴

pom.xmlapache

<!--WEB支持-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!--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>

<!-- 部署到外部容器tomcat時用到 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

注意: tomcat-embed-jasper這個依賴若是設置依賴範圍爲provided在第1種第3種方式運行的進修會報錯,用默認依賴範圍就好,默認爲compile,在使用Intellij Idea按照spring boot項目啓動時,有以下發現,因此設置成provided就好,官方也推薦使用providedtomcat

2.2 設置打包方式

pom.xmlspringboot

<!-- 打成jar包 -->
<packaging>jar</packaging>
<!-- 打成war包 -->
<packaging>war</packaging>

不一樣啓動方式下的打包方式session

  • IDE中執行main方法 均可以
  • 執行 mvn spring-boot:run 均可以
  • 執行java -jar xxx.jar jar包
  • 執行java -jar xxx.war war包
  • 外部容器 war包

2.3 application.properties配置

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

2.4 編寫控制器

編寫一個測試用的控制器,其餘引用類參考項目代碼

@Controller
public class WelcomeController {
    @GetMapping("/")
    public String index(ModelMap model) {
        System.out.println("demo/jsp/index");
        DemoUser user = new DemoUser();
        user.setName("張三abc");
        user.setPassword("password-zhangsan");
        user.setBirthday(new Date());
        user.setDesc("個人描述");
        user.setId(1001L);
        model.addAttribute("user", user);

        model.addAttribute("currentTime", new Date());
        return "welcome";
    }
}

2.5 編寫jsp頁面

略,參考代碼 webapps/WEW-INF/jsp/welcome.jsp

2.6 編寫啓動類

@SpringBootApplication
public class JspApplication extends SpringBootServletInitializer {
    // war啓動 署到外部容器tomcat須要:
    // 1)要實現SpringBootServletInitializer
    // 2)覆蓋該方法
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(JspApplication.class);
    }

    // jar啓動
    public static void main(String[] args) {
        SpringApplication.run(JspApplication.class, args);
    }
}

2.7 驗證是否起做用

404

正常訪問

3. 小結

項目源碼 https://gitee.com/yysue/tutorials-java

5種啓動方式小結:

  1. 內嵌容器,intellij idea中執行啓動類main方法
    1. 單模塊項目時,可正常訪問
    2. 多模塊項目時,404,將jsp文件移到以下目錄結構,也可正常訪問 這個帖子子就描述了這個問題,給出的方案是部署到外部容器中
  2. 內嵌容器,java -jar xxx.jar
    1. 按以下目錄配置執行,可正常訪問
    2. 其餘狀況下執行,404
  3. 內嵌容器,java -jar xxx.war,可正常訪問
  4. 內嵌容器,mvn spring-boot:run,可正常訪問
  5. 外部容器,war包放到tomcat的webapps目錄下,可正常訪問

4. 參考

相關文章
相關標籤/搜索