idea環境下SpringBoot Web應用引入JSP


1. 環境

開發環境:idea2019.3
jkd版本:1.8
springboot版本:2.6.2

2. 引入JSP的步驟

2.1 新建工程,引入依賴

這里只是解析jsp,因此只需要引入springboot內嵌的tomcat對jsp的解析包

<!-- 引入依賴:springboot內嵌的tomcat對jsp的解析包-->
<dependency>
	<groupId>org.apache.tomcat.embed</groupId>
	<artifactId>tomcat-embed-jasper</artifactId>
</dependency>

這里引入依賴,網上很多教程,培訓教材中,引入過多依賴,其實是多余的。僅僅訪問jsp,只需要引入內嵌tomcat對jsp的解析包即可。

如果jsp中使用了jstl,則需要引入jstl的包;這里並不需要。

如果使用了servlet相關api,則引入servlet-api,這里並不需要

2.2 建立webapp資源目錄

image

這時,如果在webapp目錄下右鍵新建jsp,發現在新建菜單中,沒有jsp選項,解決方法如2.3

2.3 將webapp設置為web資源存放目錄

打開項目結構(project structure),選擇module,選擇該moule的web項,添加資源目錄。
image

這時,webapp目錄編程帶有綠色小點的圖標。如下圖所示:

image

2.3 創建jsp頁面

這里新建一個簡單的index.jsp文件,內容如下所示:

<%--
  Created by IntelliJ IDEA.
  User: Think
  Date: 2022/1/7
  Time: 12:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    這是springboot應用中引入的第一個jsp
</body>
</html>

2.4 訪問jsp

運行springboot應用,瀏覽器訪問index.jsp,發現無法訪問

2.5 訪問不到jsp的原因及問題解決

2.5.1 原因分析

分析springboot工程的target目錄,沒有發現jsp相關的資源,說明webapp下的web資源沒有編譯到target下的輸出目錄,因此訪問不到。

另外一種情況也值得注意,在調試時候通過設置,即使web資源沒有被打包輸出到target目錄,但是也可以訪問。這是下面的第一種情況。但是在部署上線時,仍然需要手動配置將web資源輸出到target目錄。

2.5.2 問題解決

通過實驗,有兩種解決方法,可能有標准的解決方法,這里將找到的兩種可行的方法總結如下:

方法1:設置工作目錄

點擊Edit Configuation,設置工作目錄,如下圖所示:
image

設置工作目錄為 $MODULE_WORKING_DIR$(或者$MODULE_DIR$, idea2019.3中默認沒有這個目錄,可以用戶輸入$MODULE_DIR$和$MODULE_WORKING_DIR$效果相同)

image

方法2:配置web資源編譯后的輸出目錄

在pom文件的 節點中設置web資源編譯后的輸出目錄

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
		<resources>
			<resource>
				<!-- 下面的目錄可以自己設置 -->
				<directory>src/main/webapp</directory>
				<targetPath>META-INF/resources</targetPath>
				<includes>
					<!-- **匹配任意目錄,*匹配任意字符 -->
					<include>**/*.*</include>
				</includes>
			</resource>
		</resources>
	</build>

3. 總結

Q&A
問:pom中的路徑/代表什么,src/main/java代表什么

答:對於maven工程,pom文件位於module的根目錄,因此/代表的是module的根目錄,src/main/java則代表模塊下的src/main/java目錄

問:application.properties中的/代表什么,spring.mvc.view.prefix=/中的/代表什么

答:
application.properties是src/main/resource中的配置文件,在springboot的maven工程中,src/main/javasrc/main/resources,以及用戶自己添加的src/main/webapp資源目錄中的內容,在編譯后都會被部署到target/classes下,因此/有如下對應關系:
/代表了target/classes目錄,由於src/main/java、src/main/resource、src/main/webapp中內容編譯后會輸出到target/classes,因此/也代表了這些目錄。

開發人員更關注的是src/main中的內容,因此,對於在application.properties中的/,記住下面的映射關系

/	對應於		src/main/java
			src/main/resources
			src/main/webapp

當然,你也可以使用方法2中在pom中添加配置,修改src下的目錄和target下目錄的默認映射關系。


免責聲明!

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



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