七、SpringBoot項目集成JSP以及項目不同啟動方式及訪問路徑配置


1.創建JSP目錄

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

然后再改文件夾下面我們創建JSP文件:

大家在使用IDEA 的new菜單創建JSP時發現菜單里面根本沒有JSP。。。這就很尷尬了吧。你知道為啥嗎?因為IDEA很專業的,IDEA項目下面每一種文件夾都代表不同的功能,現在new的菜單沒有JSP說明IDEA根本不認為這里應該創建JSP,那怎么辦呢?按照下圖設置:

Ctrl+Alt+Shift+S快捷鍵打開設置項目配置的頁面:

上面的操作就是告訴IDEA:喂!老I,那個webapp是搞web的,她得創建JSP!。。。

執行上面的操作之后細心的同學會發現,webapp文件夾被“戳了個洞”,標志她是web文件夾了:

創建完成jsp之后:

2.application.properties配置Jsp信息

application.properties為全局配置文件,里面可以設置很多信息,比如設置日志、設置緩存、設置Spring、Spring SESSION等信息,我們本文只需要設置JSP的目錄文件,以及文件后綴,代碼如下:

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

更多application.properties設置信息,查看官方文檔:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties

3.pom.xml添加JSP配置

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

  • spring-boot-starter-web (用於運行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>

<!--內置tomcat對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 的功能,我們會盡可能的簡化業務邏輯,在這個示例中我們創建一個Dog類,設置返回對象user="miyue",在頁面輸出標簽即可。

Dog.java代碼

@Controller
@RequestMapping("/dog")
public class Dog {
    @RequestMapping("/houru")
    public ModelAndView houru() {
        ModelAndView modelAndView = new ModelAndView("/hello");//設置對應JSP的模板文件
        modelAndView.addObject("name", "miyue");
        return modelAndView;
    }
}

Spring MVC注解解讀

  • @Controller 標識在一個類上,標識的類就是Spring MVC的控制器類,分發處理器會掃描使用了該注解的類是否使用了@RequestMapping 注解,@Controller只是定義了一個控制器類,只用使用了@RequestMapping 注解,才是真正處理請求的處理器;
  • @RequestMapping 標識在類或者方法上,用來處理請求地址的注解,一共有6個屬性:
    1. value 對應請求的實際地址
    2. method 請求的類型:get、post、put、delete 等,例如:@RequestMapping(value = "/test", method = RequestMethod.GET)只接受前台的get形式請求,method不寫的情況下,接收所有類型的請求。關於post和get的相關描述和區別可以參考鄙人另外一坨博客:https://www.cnblogs.com/luzhanshi/p/10923326.html
    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才可以訪問方法

hello.jsp代碼:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${name}
</body>
</html>

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

5.運行程序

方法1:SpringBoot自帶啟動類運行

注意:SpringBoot項目默認啟動之后的訪問地址是localhost:8080+我們的Controller類的映射地址+方法映射地址

方法2:IDEA集成tomcat啟動項目:

a,下載一個全新的tomcat

b,idea集成該tomcat

c,啟動tomcat

 

 

 

 

注意,上面介紹的兩種啟動方式,只要保證端口不沖突的情況下,可以同時啟動同一個項目

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM