[英]Include a JavaScript library in a JSP file
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
請求頁面 /WEB-INF/jsp/somepage.jsp
的JSP。 <script type="text/javascript" src="./jsgl.min.js"></script>
(如您所問) ./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.