请求转发和URL从定向的区别

WEB组件之间有三种跳转方式:请求转发;URL重定向;请求包含。

请求转发

从Servlet1,请求转发到Servlet2。Servlet1完成一部分的功能,再跳转到Sservlet2,继续完成剩余的功能。

request.getRequestDispatcher(String path).forward(request,response);

特点:

1.浏览器地址栏不会发生改变。 
2.请求转发只发送一个请求。
3.转发前和转发后共享请求中的数据。
4.最终相应给浏览器的由转发后来决定。
5.请求转发不能跨域访问,只能跳转到当前应用中的资源。
6.请求转发可以访问WEB-INF目录中的资源。

URL重定向

response.sendRedirect(String url);

特点:

1.浏览器地址会发生改变。   
2.URL重定向是两次不同的请求。
3.因为URL重定向是两次独立的请求,所以不能共享请求中的数据。
4.最终相应给浏览器的由定后来决定。
5.URL重定向能跨域访问,可以访问其他应用中的资源。
6.URL重定向不能访问WEB-INF目录中的资源。

请求包含

在一个页面中可以包含其他页面的内容。在Servlet中没有意义,但是在JSP中有意义。
request.getRequestDispatcher(String path).inclode(request,response);

选择方式:如果需要共享请求的数据,使用请求转发;如果需要访问WEB-INF中的资源使用请求转发;如果需要跨域访问,避免表单的重复提交使用URL重定向。


示例:

请求转发是服务端行为:用户发送一个HTTP请求>>>服务器接收到请求>>>调用内部方法在作用域(项目)中完成请求处理和转发>>>将资源相应给客户端。服务器转发的地址只能是域(项目)中的路径,不能跳转到其他域(项目)的路径上,转发后的URL地址栏不变,只能通过浏览器开发者模式查看到对应请求转发的地址,客户端只请求了一次服务端。

重定向是客户端行为:用户发送一个HTTP请求>>>服务器接收到发送302状态码相应和重定向的地址>>>客户端接受到状态码和定向的URL地址>>>客户端重新发送新的HTTP请求(请求的路径是服务端相应给客户端的URL路径)>>>服务端接受到客户端再次请求的数据并相应给客户端数据。所以浏览器的URL地址栏是会编发的,而且在两次请求中不能共享数据。

301,302都是HTTP状态的编码,都带便这URL发生了变化。301表示永久性跳转,302表示暂时性跳转。如果不是暂时性转译推荐使用301永久性跳转,301永久性跳转对搜索引擎优化更好。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值