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

一、

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

二、

  • 请求转发:

    • 使用相对路径:(原来请求的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()中可以不写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值