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/>