Servlet 中使用 sendRedirect、forward、JS 跳轉均報 404,核心原因通常是路徑錯誤或未重新發布。
| 方式 | 路徑參考點 | 正確寫法示例 |
|---|---|---|
| sendRedirect | 瀏覽器地址欄(相對當前請求 URL) | response.sendRedirect("excelInport.jsp") 或 response.sendRedirect(request.getContextPath() + "/excelInport.jsp") |
| forward | Web 應用根目錄(相對 Context Root) | request.getRequestDispatcher("/excelInport.jsp").forward(...) (建議以 / 開頭) |
| JS location.href | 瀏覽器地址欄 | window.location.href = '${pageContext.request.contextPath}/excelInport.jsp'; |
excelInport.jsp 物理位置:在 webapp/ 或 WebContent/ 根目錄下?還在子目錄?web.xml 中 <welcome-file-list>、Servlet 映射路徑是否衝突。Clean -> Rebuild -> 刪除 Server 發布目錄 -> 重新啟動 Server。sendRedirect("excelInport.jsp") 在 Servlet 路徑為 /a/b 時會跳轉到 /a/excelInport.jsp,應用 request.getContextPath() 拼絕對路徑。WEB-INF 下則無法直接訪問,需 forward 而非 redirect。90% 的 404 由路徑拼接錯誤或發布緩存導致,系統排查即可解決。