servlet中的请求转发和重定向的路径问题

来源:互联网 发布:java 没错溢出 编辑:程序博客网 时间:2024/05/16 06:29

一、

  • 相对路径(即在路径最前面没有/)
  • 绝对路径(即在路径最前面有/)

二、

  • 请求转发:

    • 使用相对路径:(原来请求的URL’目录‘)+参数
    • 使用绝对路径:(当前的WEB应用本身)+参数———-请求转发中WEB应用本身指发布工程名
  • 请求重定向:

    • 使用相对路径:(原来请求的URL’目录‘)+参数
    • 使用绝对路径:(当前的WEB应用本身)+参数———-重定向中WEB应用本身指端口号之后(不包含发布工程名)
    • 其他web应用地址:容器直接定向到该URL

三、举例

假设发起的请求为:http:localhost:8080/mvc/sys/shxt01
(mvc为发布的工程名,/sys/shxt01为@WebServlet(“”)所写的)

  • 请求转发

    • 使用相对路径
      request.getRequestDispatcher(“WEB-INF/jsp/demo01.jsp”).forward(request, response);
      则转发的地址为:http:localhost:8080/mvc/sys/WEB-INF/jsp/demo01.jsp(错误)

    • 使用绝对路径
      request.getRequestDispatcher(“/WEB-INF/jsp/demo01.jsp”).forward(request, response);
      则转发的地址为:http:localhost:8080/mvc/WEB-INF/jsp/demo01.jsp(正确)

  • 请求重定向:(cy40为WebContent下与WEB-INF同级的文件夹,里面有一个demo02.jsp)

    • 使用相对路径:
      response.sendRedirect(“cy40/demo02.jsp”);
      则重定向的地址为:http:localhost:8080/mvc/sys/cy40/demo02.jsp(错误)

    • 使用绝对路径
      response.sendRedirect(“/cy40/demo02.jsp”);
      则重定向的地址为:http:localhost:8080/cy40/demo02.jsp(错误)
      所以应当为response.sendRedirect(request.getContextPath()+”/cy40/demo02.jsp”);(正确)

    • 其他web应用地址
      response.sendRedirect(“http://www.baidu.com“);

五、补充
(1)请求转发也可以使用
ServletContext.getRequestDispatcher(String),不过参数只能为绝对路径
生成的URL和HttpServletRequest.getRequestDispatcher(String)相同

(2)在@WebServlet(“”)中不能不写 /
在SpringMVC中的ResultMapping()中可以不写

原创粉丝点击