關於JAVA EE項目在WEB-INF目錄下的jsp頁面如何訪問WebRoot中的CSS和JS文件



在有Struts部署的Java EE環境中,我們一般把jsp頁面寫在WebRoot\WEB-INF\content 目錄下,這樣使得jsp頁面一定需要struts的控制轉發才可訪問,提高頁面安全性。

但是今天在jsp頁面中應用WebRoot目錄中的css,js文件發現十分困難,先看看我的文件結構:

目標是在index.jsp中訪問default.css。

defautl.css是在index.jsp目錄的父目錄的父目錄的CSS目錄下。所以我這樣寫:

ps:空格為故意添加,不知為何會自動變成博客園的網址

        <link href="../ ../css/default.css" rel="stylesheet" type="text/css"/>
<link href="../ ../css/uploadify.css" rel="stylesheet" type="text/css"/>

在Eclipes中也出現超鏈接提示,說明目錄正確,但是結果失敗。

查詢資料后,在百度百科中看到:

http://baike.baidu.com/view/1745468.htm

 TomCat 服務器下的WEB-INF文件夾是一個非常安全的文件,在頁面中不能直接訪問其中的文件,必須通過web.xml文件對要訪問的文件進行相應映射才能訪問。

從上面的實驗可以看出,不但是直接訪問,使用" ../ ../ "之類的間接訪問也不能成功。

在此多方查詢資料之后,嘗試使用如下方法訪問:

1         <!-- 輸出為項目根目錄,即WebRoot -->
2 <%String path = request.getContextPath(); %>
3 <link href="${path}/css/default.css" rel="stylesheet" type="text/css"/>
4 <link href="${path}/css/uploadify.css" rel="stylesheet" type="text/css"/>

原理很簡單,變量path值為項目根目錄,而css就是此目錄的子目錄,自然可以訪問。

可惜結果還是錯,思考之,el表達式的${}是以page,request,session,application的順序尋找匹配的項,而path並不在這個范圍之內,也許在java腳本中直接定義的對象是局部作用域,而不是page作用域?可惜百度之后難以找到相關資料,不過結論應該是沒錯的。

既然EL表達式無法取出,那么java腳本應該可以達到目的吧?嘗試如下:

1         <%String path = request.getContextPath(); %>
2 <link href="<%=path %>/css/default.css" rel="stylesheet" type="text/css"/>
3 <link href="<%=path %>/css/uploadify.css" rel="stylesheet" type="text/css"/>

果不其然,頁面成功讀出了css文件中的樣式,達到目的。不過此頁面中存在java腳本,不夠規范,查詢資料后,用以下純EL表達式實現:

1         <c:set value="${pageContext.request.contextPath}" var="path" scope="page"/>
2 <link href="${path}/css/default.css" rel="stylesheet" type="text/css"/>
3 <link href="${path}/css/uploadify.css" rel="stylesheet" type="text/css"/>

先將ContextPath放如page中,再使用el表達式取出,問題得以解決。

 

在查詢資料的過程中,發現如下問題:

WEB-INF目錄下加載CSS和JS問題?????

http://topic.csdn.net/u/20100420/14/c4efb68c-ca03-46b9-8277-126bd1290ebe.html 

此問題中,CSS和JS也在WEB-INF下,多方試驗后我還是沒能解決,望高手解答。

 

參考資料:

百度百科

http://baike.baidu.com/view/1745468.htm

EL表達式 (詳解)

http://blog.csdn.net/qwerasdf123/article/details/4189889

ITEYE問答

http://www.iteye.com/problems/37087

百度知道

http://zhidao.baidu.com/question/277894936.html


免責聲明!

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



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