找了這么久資料,總算解決了
感謝博客園:http://www.cnblogs.com/xsht/p/5275081.html
在有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文件對要訪問的文件進行相應映射才能訪問。
從上面的實驗可以看出,不但是直接訪問,使用" ../ ../ "之類的間接訪問也不能成功。
在此多方查詢資料之后,嘗試使用如下方法訪問:
<!-- 輸出為項目根目錄,即WebRoot --> <%String path = request.getContextPath(); %> <link href="${path}/css/default.css" rel="stylesheet" type="text/css"/> <link href="${path}/css/uploadify.css" rel="stylesheet" type="text/css"/>
果不其然,頁面成功讀出了css文件中的樣式,達到目的。
不過此頁面中存在java腳本,不夠規范,查詢資料后,用以下純EL表達式實現:
<c:set value="${pageContext.request.contextPath}" var="path" scope="page"/> <link href="${path}/css/default.css" rel="stylesheet" type="text/css"/> <link href="${path}/css/uploadify.css" rel="stylesheet" type="text/css"/>
先將ContextPath放如page中,再使用el表達式取出,問題得以解決。
但是,也有不少程序猿是在用Struts_2的標簽,要做到上面的效果,就有區別了
Struts_2的標簽要訪問到 pageContext.request.contextPath,寫法上就與jstl的有區別
<s:set value="#request.get('javax.servlet.forward.context_path')" var="cssPath" scope="page"/> <link rel="stylesheet" href="${cssPath}/css/index.css" />
Struts_2標簽set的value屬性要進行訪問對象,語法就是 value="#對象" 或者 value="%{對象}"兩種寫法
----------------------------------------------------------------------
(over)
