事情發生
在上個暑假第一次寫Java web大專案的時候,對於目錄管理及分配沒有任何經驗,就想著清晰明瞭。
後端servlet是用maven進行構建的,所以在目錄上沒有碰到什麼大問題。
用idea進行Java Web專案構建的時候,會自動生成這樣一個前端目錄
當時對攔截器以及安全目錄什麼的完全沒有概念,於是就把頁面,還有css和js以及resource全部放進WEB-INF。
於是乎災難來了嗎,最直觀的體現就是,css樣式不生效,怎樣都不生效,因為沒有安全目錄以及攔截器概念,完全找不到解決方法,這個bug真的是找的天昏地暗。
問題原因
原來WEB-INF是安全目錄。
WEB-INF下面的內容只能由伺服器級別才能訪問,客戶端並不能訪問。
伺服器級別指:經過伺服器內的Controller渲染。
客戶端級別指:透過瀏覽器直接訪問。
所以作為安全目錄,將jsp檔案放到裡面是對的,避免客戶端直接訪問,保證了安全性。
使用者想要訪問就要訪問伺服器的Controller,經過它的渲染,才能呈現檔案,這就是為什麼index.jsp不在WEB-INF目錄下的原因。
因為我把css和js以及資原始檔放在了WEB-INF目錄底下,頁面自然訪問不到安全目錄,自然css不生效。
問題解決
頁面可以放在它下面可以用Contriller渲染然後進行訪問,但是其他資源不可以呀。
把css等靜態檔案放在WEB-INF目錄外面。就可以解決無法訪問以至於css樣式不生效等問題。
但是
我當時不知道呀,不知道還有安全目錄一說,不會把他們放在外面,但是問題不能不解決。
爬了半天的搜尋引擎,看遍了各種部落格以及分享,試了各種方式之後。
從鋪天蓋地的資訊中看出來了兩個字:
路徑,要讀取WEB-INF下面的檔案要用這個路徑:getServletContext().getRealPath("/WEB-INF/");
但是那是後端訪問方法,我是要在前端引用那些css
於是我的前端頁面出現了這個東西
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
在申明之後,引入css的時候,就用的
<link rel="stylesheet" href="<%=basePath%>css/login_style.css" type="text/css">
之後就能正常顯示了。
只能說確實好看。
專案地址為 https://gitee.com/zxeao/Study_Station.git
可以點個star嘛?