WEB-INF目錄是web應用的安全目錄,裏面的資源不能被瀏覽器直接訪問。css
web下的靜態資源(html、css、js、圖片等)都不能被瀏覽器直接訪問,html
直接放到web下,或者放到WEB-INF下,都是同樣的。前端
web下的動態資源(jsp)能夠被瀏覽器直接訪問,好比瀏覽器直接訪問web下的首頁index.jsp,這是能夠的。web
若是把jsp放到WEB-INF下,那jsp受到WEB-INF的保護,瀏覽器就不能直接訪問。瀏覽器
SpringMVC提倡由controller處理請求,調用視圖來響應,用戶不能直接訪問視圖,因此把jsp放到WEB-INF下。安全
總得留個頁面做爲網站入口吧,入口的index.jsp直接放在web下,用戶能夠直接訪問。服務器
部署項目時,會把jar包拷貝到輸出目錄的 WEB-INF\lib 下。mvc
在WEB-INF下新建文件夾lib,把所需的jar包放到lib下,app
部署項目時,會把全部的jar包都拷貝到輸出目錄的 項目\WEB-INF\lib 裏。jsp
若是咱們是在web下新建lib存放jar包,或者在項目下新建lib存放jar包,
部署項目時,會把全部的jar包拷貝到輸出目錄的 項目\WEB-INF\lib裏,並會把咱們新建的lib文件夾拷貝到輸出目錄的 項目下,這一步就多餘了,不必。
若是部署時,jar包拷貝不全,參考:
http://www.javashuo.com/article/p-abfcljrk-hc.html
咱們在web.xml中使用DispatcherServlet攔截全部請求,全部的請求都轉交給controller處理。
就是說,前端頁面的<img />要加載圖片、<script src="">要加載js腳本、<link />要加載的樣式表,這些請求都會被DispatcherServlet攔截,
而DispatcherServlet又找不到對應的controller來處理這些請求,即便路徑是對的,在瀏覽器中f12->Network,看到狀態碼是40四、或者400(因爲找不到所需的資源而引發的錯誤)。
咱們須要配置一下靜態資源,讓DispatcherServlet放行某些靜態資源的請求。
有3種配置方式。
<mvc:resources mapping="/js/**" location="/js/**" /> <mvc:resources mapping="/css/**" location="/css/**" /> <mvc:resources mapping="/image/**" location="/image/**" />
location是實際地址,mapping是映射地址。通常咱們不改路徑,只是讓DispatcherServlet放行。
<mvc:resources />是以文件夾爲單位配置的,最小單位只能是文件夾,不能是文件。
能夠寫上**表示該文件夾下的全部東西,也能夠缺省**。
這種方式能夠放行對靜態資源的請求、對WEB-INF下資源的請求、對動態資源(jsp)的請求。
<mvc:default-servlet-handler default-servlet-name="default" />
配置web服務器默認的ServletHandler,DIspatcher攔截到靜態資源後,找不到對應的controller來處理,會交給web服務器默認的ServletHandler來處理。
默認的ServletHandler會調用web服務器的默認Serlvet來處理,web服務器的默認Servlet的處理方式都是直接放行(返回該資源做爲響應)。
但不一樣的web服務器,默認Servlet的name是不一樣的:
更換web服務器時,須要修改default-servlt-name,配置簡單但項目移植性差。
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping>
使用多個<filter-mapping>,不能一個<filter-mapping>裏配置多個<url-pattern>,也不能在一個<url-pattern>裏配置多個規則。
麻煩且移植性差。
方式1、三更靈活,能夠指定要加載的靜態資源,方式二是加載項目中全部的靜態資源。
方式2、三響應靜態資源更快,由於web服務器啓動時就會建立默認Servlet的實例,就會加載靜態資源,靜態資源一直在內存中,響應快、但吃服務器內存。
方式一是請求這個靜態資源時才加載,用完就釋放,速度慢、但內存佔用少。