request.getRequestDispatcher(path) 的 path:
/ 開頭:相對於 Web 應用根目錄(Context Root)。/ 開頭:相對於 當前請求的路徑(即瀏覽器地址列的目錄層級)。假設部署路徑 /myapp,Servlet 映射 /servlet/myservlet,當前請求 https://host/myapp/servlet/myservlet:
| 程式碼 | 解析後的絕對路徑 | 說明 |
|---|---|---|
request.getRequestDispatcher("/userinfo.jsp") | /myapp/userinfo.jsp | 推薦:絕對路徑,不受 Servlet 映射影響 |
request.getRequestDispatcher("userinfo.jsp") | /myapp/servlet/userinfo.jsp | 相對於 /servlet/ 目錄 |
request.getRequestDispatcher("../userinfo.jsp") | /myapp/userinfo.jsp | 相對路徑向上一層,同絕對路徑 |
/ 開頭的絕對路徑,如 /WEB-INF/views/userinfo.jsp 或 /userinfo.jsp。/WEB-INF/views/ 避免直接外部訪問。request.getContextPath() 拼接時也要加 /:request.getContextPath() + "/userinfo.jsp"。如此可避免因 Servlet 映射層級不同導致的路徑錯誤。