關於SpringBoot與JSP整合的問題,url直接訪問Jsp

首先就是在SpringBoot中你要在Pom中添加幾個Tomcat的Jasper的解析包(包括其他配置網上都有教程,不贅述。)java

而後記得就是若是要部署到tomcat底下跑的話,記得在Pom包中將那幾個Tomcat的包的Scope標記爲Provider,不然會和Tomcat服務器中的jar包衝突致使出錯()。web

接下來就是核心部分:spring

一般狀況下,網上的教程我發現都是把上述依賴設置完,而後就進行訪問,不過這種方式每每只可以經過SpringMvc的Controller層接收請求來解析查找Jsp文件,在不少狀況下這已經足夠了,可是不少場景下其實你們是須要直接經過url訪問某個Jsp頁面而後返回頁面,這就須要進行額外的配置。apache

詳細配置:tomcat

由咱們手動的註冊一個Servlet到SpringBoot,這個Servlet要繼承Tomcat的JspServlet,這就至關於咱們手動的把Tomcat的Jsp解析器給註冊進了容器,這樣就能夠作到直接訪問而且解析Jsp文件,而不是隻能經過SpringMVC的視圖解析器來調用(關於這個問題也同時要注意一下路徑的問題,由於JSP文件其實也是一種靜態資源,而SpringBoot和原生Servlet對於靜態資源的路徑實際上是有一些差異的,下面代碼會有詳細解釋。)springboot

package cn.restcloud.rq.config;

import org.apache.jasper.servlet.JspServlet;
import org.springframework.boot.web.servlet.ServletComponentScan;

import javax.servlet.annotation.WebServlet;

/**
 * 配置這個servlet是爲了覆蓋默認的jasper解析器的映射路徑
 * 由於springboot默認是不直接支持jsp的
 * 必須添加額外的解析器支持,額外的解析器默認也不支持直接 xxx.jsp訪問jsp必須經過controller訪問
 * 因此覆蓋JspServlet的映射路徑 就能夠直接經過url訪問xxx.jsp文件並解析了
 * 同時 須要注意的是 在Springboot框架中,訪問靜態資源默認的web項目根目錄對應的是
 * classpath:static classpath:WEB-INF/resources classpath:public 等
 * 而對於原生的servlet來講 web項目的根目錄是不同的 對應的是classpath:/ 或者 部署在Tomcat webapps底下具體webapp對應文件夾的根目錄
 */
@ServletComponentScan
@WebServlet(urlPatterns = "*.jsp",name = "rqjspServlet")
public class rqJspServlet extends JspServlet {
}

通過後來進一步的研究....發現,也能夠不用配置上方的解析器,只是要注意一下路徑的問題,jsp解析器的默認路徑是web應用根目錄開始查找靜態資源,之前沒有搞清楚Springboot下的Web應用根路徑在哪,因此纔出現訪問不了的狀況,實際上,上面的JspServlet配置是能夠不須要的。服務器

相關文章
相關標籤/搜索