Spring Boot 最佳實務(二)整合Jsp與生產環境部署

來源:互聯網
上載者:User
一、簡介

提起Java不得不說的一個開發情境就是Web開發,也是Java最熱門的開發情境之一,說到Web開發繞不開的一個技術就是JSP,因為目前市面上仍有很多的公司在使用JSP,所以本文就來介紹一下Spring Boot 怎麼整合JSP開發,以及生產環境的詳細部署方法。

二、整合JSP開發環境
  • Spring Boot 2.0.4 RELEASE
  • Tomcat 9.0.10
  • IDEA(Intellij IDEA簡稱,下文統一使用)2018.2
  • Windows 10
JSP整合步驟
  1. 建立JSP目錄
  2. application.properties配置Jsp資訊
  3. pom.xml添加相依元件
  4. 編寫Spring MVC代碼
  5. 運行程式

具體整合方法如下:

1.建立JSP目錄

在src/main目錄下建立目錄webapp/WEB-INF/jsp用於存放jsp頁面,如:

2.application.properties配置Jsp資訊

application.properties為全域設定檔,裡面可以設定很多資訊,比如設定日誌、設定緩衝、設定Spring、Spring SESSION等資訊,我們本文只需要設定JSP的目錄檔案,以及檔案尾碼,代碼如下:

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

更多application.properties設定資訊,查看官方文檔:docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties

3.pom.xml添加JSP配置

在pom.xml需要添加3個組件:

  • spring-boot-starter-web (用於運行web項目)
  • jstl (JavaServer Pages Standard Tag Library,JSP標準標籤庫,用於程式中解析JSP)
  • tomcat-embed-jasper (內建tocat對Jsp支援的依賴,用於編譯Jsp)

具體代碼如下:

<!--web支援--><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId></dependency><!--JavaServer Pages Standard Tag Library,JSP標準標籤庫--><dependency>    <groupId>javax.servlet</groupId>    <artifactId>jstl</artifactId></dependency><!--內建tocat對Jsp支援的依賴,用於編譯Jsp--><dependency>    <groupId>org.apache.tomcat.embed</groupId>    <artifactId>tomcat-embed-jasper</artifactId>    <scope>provided</scope></dependency>

注意:tomcat-embed-jasper的scope(範圍)值為provided,表示打包的時候不用打包進去,其他裝置會提供,如果打包進去會和外部Tomcat提供的jar衝突,導致項目啟動失敗。

scope(範圍)值列表代表含義解釋如下:
  • compile:預設值 他表示被依賴項目需要參與當前項目的編譯,還有後續的測試,運行周期也參與其中,是一個比較強的依賴。打包的時候通常需要包含進去
  • test:依賴項目僅僅參與測試相關的工作,包括測試代碼的編譯和執行,不會被打包,例如:junit
  • runtime:表示被依賴項目無需參與項目的編譯,不過後期的測試和運行周期需要其參與。與compile相比,跳過了編譯而已。例如JDBC驅動,適用運行和測試階段
  • provided:打包不會包含進去,別的設施會提供。事實上該依賴理論上可以參與編譯,測試,運行等周期。相當於compile,但是打包階段做了exclude操作
  • system:從參與度來說,和provided相同,不過被依賴項不會從maven倉庫下載,而是從本地檔案系統拿。需要添加systemPath的屬性來定義路徑
4.編寫Spring MVC代碼

經過前3步的配置,項目配置部分已經完成的差不多了,接下來就是代碼的編寫了,代碼的編寫和Spring MVC一樣,分為兩部分Java類編寫與標識註解,JSP模板建立與編寫。為了更好的示範Spring Boot 的功能,我們會儘可能的簡化商務邏輯,在這個樣本中我們建立一個Cat類,設定標籤hi="Hello Cat",在頁面輸出標籤即可。

a).Cat.java代碼
package com.hellospringboot.hellospringboot;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;@Controller@RequestMapping("/cat") //建立路由規則http://xxxx/catpublic class Cat {    /**     * 預設路由方法     *     * @return     */    @RequestMapping("")    public ModelAndView index() {        ModelAndView modelAndView = new ModelAndView("/index"); //設定對應JSP的模板檔案        modelAndView.addObject("hi", "Hello,Cat"); //設定${hi}標籤的值為Hello,Cat        return modelAndView;    }}

Spring MVC註解解讀

  • @Controller 標識在一個類上,標識的類就是Spring MVC的控制器類,分發處理器會掃描使用了該註解的類是否使用了@RequestMapping 註解,@Controller只是定義了一個控制器類,只用使用了@RequestMapping 註解,才是真正處理請求的處理器;
  • @RequestMapping 標識在類或者方法上,用來處理請求地址的註解,一共有6個屬性:
    1. value 對應請求的實際地址
    2. method 請求的類型:get、post、put、delete 等,ex:@RequestMapping(value = "/test", method = RequestMethod.PUT)
    3. consumes 指定請求上的內容類型,比如application/json、text/html等
    4. produces 指定返回的資料類型,類型必須是Request Headers中accept包含的類型
    5. params 過濾請求,只有請求中包含某個參數,才會執行,比如@RequestMapping(value = "",params = "flag"),只有參數中包含flag才會執行,不然不能訪問,http://localhost:8080/cat?true=flag這個地址是訪問不到的,正確的地址是http://localhost:8080/cat?flag=true才可以正常訪問
    6. headers 和params類似,只有請求headers裡麵包含某個key才可以存取方法
b).JSP端代碼
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Title</title></head><body><h1>    ${hi}</h1></body></html>

這個jsp只做了一件事,把java類裡面的${hi}標籤的值顯示出來。

5.運行程式

到此為止,如果您使用的是IDEA開發工具,那麼現在就可以運行偵錯工具了,直接運行Index.jsp或者開機檔案,或者開機檔案(Application.java)即可,然後在瀏覽器輸入:http://localhost:8080/cat 即可查看。

三、生產環境部署部署步驟
  1. 下載安裝Tomcat
  2. 入口類繼承SpringBootServletInitializer重寫configure方法
  3. 配置pom.xml
  4. IDEA產生war檔案
  5. 配置Tomcat運行項目
1.下載安裝Tomcat

:tomcat.apache.org/download-90.cgi

如所示:

Windows下載:64-bit Windows zip | Linux下載:tar.gz

注意:如果是Windows版下載的免安裝版如果放到C盤的話,注意給檔案夾分配足夠的許可權,不然啟動之後訪問頁面顯示400或者505類似的問題。

2.入口類繼承SpringBootServletInitializer重寫configure方法

如果要進行生產環境部署,需要單獨配置一下Spring Boot 的入口類,需要繼承SpringBootServletInitializer類,重寫configure方法,因為預設情況外部Tomcat不能讀取到Spring Boot 入口類的main方法啟動程式載入,使用需要繼承,代碼如下:

package com.hellospringboot.hellospringboot;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;/** * 啟動類,程式入口 */@SpringBootApplicationpublic class HelloSpringBootApplication  extends SpringBootServletInitializer{    /**     * 重寫configure方法,載入啟動類     * @param application     * @return     */    @Override    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {        return application.sources(HelloSpringBootApplication.class);    }    /**     * Spring Boot 預設main方法     * @param args     */    public static void main(String[] args) {        SpringApplication.run(HelloSpringBootApplication.class, args);    }}
3.配置pom.xml

需要配置一下pom.xml,排除一下內建tomcat的jar包,防止打包之後與外面Tomcat jar 包衝突,導致項目啟動失敗,配置如下:

<!--排除內建tomcat jar包--><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-tomcat</artifactId>    <scope>provided</scope></dependency>

主要的代碼是provided,設定打包不會包含進去,由其他設施提供。

4.IDEA產生war檔案步驟一:修改產生jar為war格式

找到:

jar

修改為:

war

為什麼需要修改jar包格式為war,因為如果打包為jar包的時候,不會包含JSP檔案,所以訪問的時候回404,而打包為war的時候回包含JSP檔案,所以需要把打包格式修改為war.

jar和war的區別?

  • jar(java application archive)java應用程式庫,通常為開發引用的通用類
  • war(web application archive)web應用程式

所以從jar和war的區別來看,網頁程式打包成war格式也是很合適的。

如果需要修改組建檔案的檔案名稱,可以設定build下的finalName屬性,代碼如下:

<build>    <finalName>name</finalName></build> 
步驟二:使用IDEA產生war包

選擇功能表列Build => Build Artifacts.. => 點擊Rebuild,即可產生war包,

產生完之後,在項目的target目錄下找到產生war檔案,如:

5.配置Tomcat運行項目步驟一:把war檔案複製到tomcat的webapps目錄下步驟二:配置conf/server.xml

在Host標籤內添加Context設定,docBase屬性填寫war檔案名稱,配置如下:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">        <Context path="" docBase="springbootjsp" debug="0" privileged="true" reloadable="true" />    <!--    其他代碼    --></Host>
步驟三:啟動tomcat

運行bin/shutdown.bat檔案,啟動tomcat

輸入地址:http://localhost:8080/cat 訪問。

到此項目部署成功,雖然本人部署到Windows伺服器了,Linux也是一樣的步驟。

四、知識擴充:Spring Boot 模板推薦

雖然上文我們詳細介紹了JSP在Spring Boot 中使用,但是Spring Boot官方並不推薦使用JSP(原因見下文)。

Spring Boot推薦模板引擎:
  • Thymeleaf
  • Freemarker
  • Mustache
  • Groovy Templates

如所示:

Spring為什麼不推薦使用JSP?

Spring官方不推薦使用JSP的原因有這麼幾個:

  1. 官方文檔JSP沒有Thymeleaf好;
  2. Thymeleaf健康的開源項目,幾乎每個月都有更新,而JSP已經好幾年沒有實質性的進展;
  3. Thymeleaf有迅速響應的使用者論壇。

更多詳情,點擊查看:spring.io/blog/2012/10/30/spring-mvc-from-jsp-and-tiles-to-thymeleaf

總結:按照官方的說法,如果你有數百個JSP頁面,我們並不建議您應該立即拋棄它們,重新使用Thymeleaf,但是,如果您開始開發一個新項目,強烈鼓勵您比較其他模板引擎和JSP,以確認哪一個更適合您。

五、參考資料

開發Web應用之JSP篇:http://tengj.top/2017/03/13/springboot5/

歡迎掃碼,加入圈子討論交流

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.