首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Servlet 轉發 JSP 路徑異常:URL 中出現 Servlet 包名的原因與調整 Web 目錄結構解決

     編輯:程式設計疑難解答

問題現象

Servlet 使用 request.getRequestDispatcher("result.jsp").forward(req, resp) 轉發,瀏覽器地址欄顯示 https://host/pkg/servlet/result.jsp,導致 404。

原因分析

RequestDispatcher 的路徑相對於 Web 應用根目錄,而非 Servlet 所在包路徑。若 JSP 放在 WEB-INF/jsp/,轉發路徑應為 /WEB-INF/jsp/result.jsp。

解決方案

  1. 移動 JSP 到根目錄:將 result.jsp 放在 WebContent/ 或 webapp/ 下,轉發路徑 result.jsp 或 /result.jsp。
  2. 統一前綴配置:在 web.xml 或 SpringMVC 視圖解析器中設置前綴 /WEB-INF/views/,Controller 返回邏輯視圖名 result。
  3. 使用絕對路徑:request.getRequestDispatcher("/result.jsp")(以 / 開頭表示 Web 根)。

目錄結構對比

錯誤結構:
src/
  com/example/servlet/MyServlet.java
WebContent/
  WEB-INF/
    jsp/
      result.jsp  ← 放這裡需用 /WEB-INF/jsp/result.jsp

正確結構(方案 1):
WebContent/
  result.jsp  ← 直接放根目錄
  WEB-INF/
    web.xml

最佳實踐

採用 MVC 模式:JSP 放在 WEB-INF/views/,配置 InternalResourceViewResolver 前綴 /WEB-INF/views/ 後綴 .jsp,Controller 僅返回視圖名,完全解耦物理路徑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved