SpringMVC 請求頁面路徑問題


 1. spring boot web項目,在沒有使用模板的情況下,頁面默認路徑在resources文件夾下的static文件夾

springboot訪問靜態資源,默認有兩個默認目錄,

一個是  classpath/static 目錄 (src/mian/resource)

一個是 ServletContext 根目錄下( src/main/webapp )

這里簡要的介紹下,classpath 即WEB-INF下面的classes目錄 ,在springboot項目中可能就是,src/main/resource 目錄。

main下的java與resources會被構建到classpath(idea的classpath為編譯后的文件存放路徑target/classes/)

 spring.resources.static-locations 的默認值是:classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

則在 properties文件里面設置  spring.resources.static-locations 就可以配置目標資源默認位置,瀏覽器訪問的資源與controller返回的資源將定位到該文件夾下的資源。

2. spring.mvc.view.prefix=/ :帶有“/”,路徑前綴為“static/”,controller中返回的頁面字符串不能出現多余的“/”

 如Controller:

訪問該in時,return “index”;會直接定位到static文件夾下的index.html

此種方式,瀏覽器能夠直接訪問到static下的資源,導致不用登陸,就可以直接訪問目標頁面

3. 當使用thymeleaf模板時,服務器controller返回的資源默認在templates中查找

static中的靜態資源可以被直接訪問

templates中的資源必須通過服務訪問

4. webapp與WEB-INF的區別

webapp可以直接通過瀏覽器訪問,WEB-INF必須要通過后端服務訪問

通常情況下我們的項目結構是將css/js/html放在WEB—INF下面,因為WEB—INF是webapp的安全目錄。所謂安全目錄就是客戶端無法訪問的目錄,只有服務端可以訪問,當靜態資源放在WEB—INF下面的時候,外部是不能訪問的,我們一般通過springmvc配置文件配置資源映射,如下所示:

<!-- 資源映射 -->
<mvc:resources location="/WEB-INF/css/" mapping="/css/**"/>
<mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>

而webapp則可以通過瀏覽器直接訪問到。

然而,其實靜態資源我們沒有必要非得放在WEB—INF下面,因為前端我們就是要展示給客戶的;之所以大家會把他放在WEB-INF下面主要原因有兩個:

  • 遠古時代的模式會把業務邏輯,數據庫連接等敏感信息寫在jsp里面,被用戶直接訪問會有安全問題。現代模式里這個不再成為問題,不應該成為問題。
  • jsp是在服務器端運行的,而且通常都需要其他程序支持——比如后台處理好數據再讓jsp渲染等,用戶直接訪問一則沒有意義,二則會拋異常,這些都浪費服務器資源。

備注:

在web.xml中配置靜態資源是不管用的:
<servlet-mapping> 
<servlet-mapping> 
<servlet-name>default</servlet-name> 
<url-pattern>*.jpg</url-pattern> 
<url-pattern>*.png</url-pattern>
<url-pattern>*.css</url-pattern>
<url-pattern>*.js</url-pattern> 
</servlet-mapping> 

如果你非要在web.xml中配置資源,那么你需要在Spring.xml中加一個這樣的配置:

<!-- 允許對靜態資源文件的訪問 -->
<!--將靜態資源交給defaultServlet處理,不給springmvc處理-->
<mvc:default-servlet-handler/>

 


免責聲明!

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



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