在有Struts部署的Java EE環(huán)境中,我們一般把jsp頁面寫在WebRoot\WEB-INF\content 目錄下,這樣使得jsp頁面一定需要struts的控制轉(zhuǎn)發(fā)才可訪問,提高頁面安全性。 但是今天在jsp頁面中應(yīng)用WebRoot目錄中的css,js文件發(fā)現(xiàn)十分困難,先看看我的文件結(jié)構(gòu): 目標(biāo)是在index.jsp中訪問default.css。 defautl.css是在index.jsp目錄的父目錄的父目錄的CSS目錄下。所以我這樣寫: ps:空格為故意添加,不知為何會(huì)自動(dòng)變成博客園的網(wǎng)址 <link href="../ ../css/default.css" rel="stylesheet" type="text/css"/> 在Eclipes中也出現(xiàn)超鏈接提示,說明目錄正確,但是結(jié)果失敗。 查詢資料后,在百度百科中看到:
從上面的實(shí)驗(yàn)可以看出,不但是直接訪問,使用" ../ ../ "之類的間接訪問也不能成功。 在此多方查詢資料之后,嘗試使用如下方法訪問: 1 <!-- 輸出為項(xiàng)目根目錄,即WebRoot --> 原理很簡(jiǎn)單,變量path值為項(xiàng)目根目錄,而css就是此目錄的子目錄,自然可以訪問。 可惜結(jié)果還是錯(cuò),思考之,el表達(dá)式的${}是以page,request,session,application的順序?qū)ふ移ヅ涞捻?xiàng),而path并不在這個(gè)范圍之內(nèi),也許在java腳本中直接定義的對(duì)象是局部作用域,而不是page作用域?可惜百度之后難以找到相關(guān)資料,不過結(jié)論應(yīng)該是沒錯(cuò)的。 既然EL表達(dá)式無法取出,那么java腳本應(yīng)該可以達(dá)到目的吧?嘗試如下: 1 <%String path = request.getContextPath(); %> 果不其然,頁面成功讀出了css文件中的樣式,達(dá)到目的。不過此頁面中存在java腳本,不夠規(guī)范,查詢資料后,用以下純EL表達(dá)式實(shí)現(xiàn): 1 <c:set value="${pageContext.request.contextPath}" var="path" scope="page"/> 先將ContextPath放如page中,再使用el表達(dá)式取出,問題得以解決。
在查詢資料的過程中,發(fā)現(xiàn)如下問題:
此問題中,CSS和JS也在WEB-INF下,多方試驗(yàn)后我還是沒能解決,望高手解答。
參考資料:
|
|