JSP 頁面引入本地 jQuery:<script src="jquery.min.js"></script>,瀏覽器開發者工具 Network 顯示 404 Not Found。
| 原因 | 說明 | 解決 |
|---|---|---|
靜態檔案置於 WEB-INF/ | Servlet 規範禁止直接存取 WEB-INF、META-INF 目錄 | 移至專案根目錄或 resources/, static/, js/ 等公開目錄 |
| 路徑寫法錯誤 | 相對路徑隨 JSP 所在層級變化 | 使用 ${pageContext.request.contextPath}/js/jquery.min.js 絕對路徑 |
| 專案未發布/發布路徑不一致 | Eclipse/IDEA 部署時未包含該資源夾 | 檢查 Deployment Assembly / Artifacts 設定 |
| Spring MVC / Struts 截獲靜態請求 | DispatcherServlet url-pattern 為 / 且無 <mvc:resources/> | 配置 <mvc:resources mapping="/js/**" location="/js/"/> 或 <mvc:default-servlet-handler/> |
MyWebApp/
├── src/
├── WebContent/ (或 webapp/)
│ ├── WEB-INF/
│ │ ├── web.xml
│ │ └── jsp/ <-- JSP 放這裡
│ ├── js/
│ │ └── jquery.min.js <-- 靜態資源放這裡
│ ├── css/
│ └── index.jsp
<script src="<%=request.getContextPath()%>/js/jquery.min.js"></script>
<c:url value="/js/jquery.min.js" var="jqUrl"/>
<script src="<%=jqUrl%>"></script>
https://localhost:8080/MyWebApp/js/jquery.min.js 應可下載/顯示原始碼。核心鐵律:靜態資源絕不可放入 WEB-INF,路徑必須以 ContextPath 為基準。