簡體   English   中英

在JSP文件中包含JavaScript庫

[英]Include a JavaScript library in a JSP file

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

我實際上將與該庫相對應的.js文件放在WEB-INF文件夾中,並在JSP文件中添加了以下行以將其包括在其中:

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

我成功地在一個簡單的HTML文件中使用了該庫,這就是為什么我不明白為什么這行不通的原因。

編輯:

在此處輸入圖片說明

TLDR

將JS文件放在Web內容(而不是 WEB-INF)下的文件夾中,例如[WebContent] /js/jsgl.min.js,並在JSP中使用以下內容:

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

說明

JSP文件由服務器編譯,然后進行處理以將數據(通常為HTML)發送回Web瀏覽器。 <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進行解析(在本例中為http://example.com/SomeWebApp/some-resource注意沒有尾隨'/'),因此瀏覽器將從http://example.com/SomeWebApp/jsgl.min.js *請求JS文件。 這是因為script標記的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}位轉換為當前上下文路徑,從而使代碼可移植(如果您使用其他上下文路徑重新部署webapp,它將仍然有效)。 因此,瀏覽器收到的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

靜態資源應放在WEB-INF文件夾外部(因為通常不允許Web訪問其內容)。

您可以將文件放在webapp / js /下,然后將腳本導入更改為:

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

除了好的做法之外,這還不錯,因為它與JSP文件的位置無關。

Files in WEB-INF are inaccessible.

您可以將它們放在webapp下,然后嘗試如上所述進行訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM