2016-02-18 154 views
1

我試圖從JSP文件中的JavaScript庫中使用JavaScript函數在Web瀏覽器頁面上顯示結果,但似乎包含內容無效。在JSP文件中包含JavaScript庫

我居然把對應於WEB-INF文件夾中的庫的.js文件和JSP文件中添加以下行包括在它:

<script type="text/javascript" src="./jsgl.min.js"></script>

我成功設法在簡單的HTML文件中使用庫,這就是爲什麼我不明白爲什麼這不起作用。

編輯:

enter image description here

+0

是在'src'正確的路徑?那是真正的JavaScript文件的位置?也許檢查文件的名稱是正確的,作爲完整性檢查。 – mohammedkhan

+0

你試過嗎?src =「/ WebContent/js // jsgl.min.js」 – Rupesh

+0

@Rupesh是的,它既不工作也不工作 – Neo

回答

1

TLDR

將JS文件的文件夾中下的網頁內容(但不 WEB-INF)等[的WebContent] /js/jsgl.min.js,並使用在JSP以下:

<script type="text/javascript" src="${pageContext.request.contextPath}/js/jsgl.min.js"></script> 

說明

JSP文件由服務器編譯,然後處理以將數據(通常是HTML)發送回網絡瀏覽器。 A <script>標記是由瀏覽器解釋的HTML標記,而不是由servlet容器解析。因此,瀏覽器發現在HTML中,src屬性中的JavaScript文件的服務器發出了一個新請求

src屬性是相對於瀏覽器請求的URL而不是服務器上的JSP路徑。

因此,作爲一個例子,讓我們說:

  • 瀏覽器在http://example.com/SomeWebApp/some-resource
  • 請求一個頁面的servlet容器內部轉發在/WEB-INF/jsp/somepage.jsp
  • 響應請求到JSP發送到瀏覽器包含腳本標記<script type="text/javascript" src="./jsgl.min.js"></script>(如在你的問題)
  • 瀏覽器看到的URL ./jsgl.min.js並解決它相對於它的URL 它s詢問服務器(在本例中爲http://example.com/SomeWebApp/some-resource - 注意沒有結尾'/'),因此瀏覽器將從http://example.com/SomeWebApp/jsgl.min.js *請求JS文件。這是因爲腳本標籤的src屬性中的相對URL以'。'開頭。

另一個答案建議將JS文件放入'js'文件夾並將腳本標記更改爲<script type="text/javascript" src="/js/jsgl.min.js"></script>。使用與上例中相同的原始頁面URL,瀏覽器會將此src URL轉換爲http://example.com/js/jsgl.min.js。請注意,這裏缺少「/ SomeWebApp」上下文路徑。

因此,最好的解決方案確實是把JS文件中像/js/jsgl.min.js靜態的文件夾,但使用的JSP腳本標籤以下內容:

<script type="text/javascript" src="${pageContext.request.contextPath}/js/jsgl.min.js"></script> 

將JSP將${pageContext.request.contextPath}位翻譯成當前上下文路徑,使代碼具有可移植性(如果您重新部署具有不同上下文路徑的Web應用程序,它仍然可以工作)。因此,通過瀏覽器接收HTML響應將(再次,與上面的例子粘):

<script type="text/javascript" src="/SomeWebApp/js/jsgl.min.js"></script> 

瀏覽器現在將解決相對URL到正確的目標。

__

*如果原始URL有一個斜線=即是http://example.com/SomeWebApp/some-resource/,JS的URL會http://example.com/SomeWebApp/some-resource/jsgl.min.js

+0

我試過你的建議,但它仍然無效:/ @daiscog – Neo

+0

我在localhost工作,這可能是問題的根源嗎? – Neo

+0

這不應該是一個問題。您的瀏覽器仍然會像往常一樣解析相對的URL。只需確認:你的腳本文件位於'WebContent/js /'文件夾中,並且瀏覽器中的URL以'http:// localhost/YourWebApp/...'開始? – megaflop

0

靜態資源應該在WEB-INF文件夾外把(如你通常不允許其內容的web訪問)。

你可以把文件下的webapp/JS /,然後改變你的腳本進口:

<script type="text/javascript" src="/js/jsgl.min.js"></script> 

除了是很好的做法,這是件好事,因爲它相對於JSP的位置不文件。

+0

我沒有一個webapp文件夾,我使用Eclipse,我嘗試類似你說的,通過在WebContent中添加一個'js'文件夾,然後我用你的替換我的導入腳本,但它仍然不起作用。 – Neo

+0

'webapp'指的是您的Web應用程序的根文件夾。通常,eclipse動態web項目中的默認名稱是'WebContent'。所以這個文件應該在'WebContent/js /'之下,並且如上所示在jsp中使用腳本標籤。 –

+0

這就是我所要做的,檢查我最後編輯的 – Neo

0
Files in WEB-INF are inaccessible. 

你可以把它們放在webapp下,並嘗試訪問如上所述。