关于重定向与请求转发中的路径问题

路径问题

假设当前 web 应用地址为 localhost:8080/test。

  • 请求转发:/代表的是当前 web 站点的根目录,eg:localhost:8080/
  • 重定向:/代表的是当前 web 应用的根目录,eg:localhost:8080/test

举例

假设当前 web 应用地址为 localhost:8080/test,需要跳转到 webapp下的 login.jsp 页面。

正确写法

  • 请求转发:
    • req.getRequestDispatcher("login.jsp").forward(req, resp);
    • req.getRequestDispatcher("/login.jsp").forward(req, resp);
    • req.getRequestDispatcher("./login.jsp").forward(req, resp);
  • 重定向:
    • resp.sendRedirect("login.jsp");
    • resp.sendRedirect("./login.jsp");
    • resp.sendRedirect(req.getContextPath() + "/login.jsp");

错误写法

  • 重定向:
    • resp.sendRedirect("/login.jsp");
      错误原因: 因为 / 代表的是当前 web 站点的根目录,即 localhost:8080/,如果像上面这样写,最终响应回去的地址为 localhost:8080/login.jsp,login.jsp 在 test/login.jsp 下,所以找不到资源,最终报 404 错误。
posted @ 2021-12-25 21:20  Acx7  阅读(168)  评论(0编辑  收藏  举报