Java学习笔记(Redirect重定向和forward转发区别)

重定向和转发的区别

1.概念

      重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。

2.JSP跳转方式

方式1 response.sendRedirect(“路径”);
public class localServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("转发到local2Servlet");
        resp.sendRedirect("javaWebDemo/loc2Servlet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           doGet(req,resp);
    }
}


1.JSP跳转后浏览器地址发生变化
2.路径可以是一个绝对的URL,也可以是相对的URL。
3.其底层原理(如代码所示)

resp.setStatus(302);
resp.setHeader("location","/javaWebDemo/loc2Servlet");

通过将Http响应头进行设置的方式。

方式2 RequestDispatcher.forward()
public class localServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       RequestDispatcher rd =request.getRequestDispatcher("loc2Servlet");
       rd.forward(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           doGet(req,resp);
    }
}

注:
1.forward()后面路径中无法带参数传递。
2.转发后浏览器地址为第一次访问的地址,并没有改变。
3.转发的路径必须是同一个web容器下的地址或者是web.xml设置的映射路径,中间传递的是自己的容器内的request 请求。因为是服务器内部传递,转发路径可写为:/请求路径
4.可将请求发送到任意一个服务器资源

类别概念共享数据应用
RedirectURL重新定向:可以是任意的URL不能共享request里面的数据一般用于用户注销登录时返回主页面和跳转到其它的网站等等
Forward页面的转发:只能是同一个Web应用程序的其他Web组件转发页面和转发到的页面可以共性request里面的数据一般用于用户登录的时候根据角色转发到相应的模块等等

总结

请求转发和重定向的区别:
1.重定向发送两次请求,请求转发一次请求。
2.重定向地址栏发生变化,请求转发没变化。
3.重定向是浏览器发送,请求转发是服务器内部转发。
例如,重定向的路径:/shopping(项目名)/msg
请求转发的路径:/mssg
4.重定向不存在request域对象,请求转发可使用request域对象。
5.重定向是response的方法,请求转发是request方法。
6.重定向可请求站外资源,请求转发不可以。

部分摘自 https://blog.csdn.net/oscar999/article/details/19039355.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值