请求转发和重定向区别

原创 2016年08月28日 22:26:13

请求转发和重定向区别

标签 : servlet


对于初学者来说,什么时候该用请求转发什么时候该用重定向,是比较容易搞混的一些知识点,下面就详细的来区分一下,两者的区别。

1、请求转发

①请求转发的介绍

请求转发的固定代码:
request.getRequestDispatcher("/s3").forward(request, response);
请求转发的路径是由服务器内部发起的,所以服务器路径

②请求转发的注意事项

 1、请求转发 不会改变地址栏的路径
 2、请求转发 代码执行完毕后,会接着回来执行转发后的代码

    业务会出错例如:
    发现注册失败了,
        请求转发到失败页面,然后显示失败信息
        请求转发后面的代码是注册成功的代码
    建议:
        请求转发代码后面尽量直接加return。特殊业务除外【过滤器再详细介绍】

 3、请求转发N次,响应1次。由最后的Servlet生成响应
 4、请求转发只能跳转本项目内部资源,不能跳转其他项目甚至外网
 5、执行请求转发代码的Servlet,不要执行任何写流操作,因为执行请求转 发代码会清除缓冲区。不要自己flush(),否则后面的请求转发失败抛异常。
 6、请求转发中存在request作用域
 7、请求转发可以 转发到受保护目录 的资源
 8、请求转发中,get的请求转发还是是get请求,post请求转发还是post请求。
 9、请求转发的效率高,因为①服务器内部跳转,没有网速因素②没有主动写响应信息

③请求转发的本质

1、共享request作用域的属性,共享request的参数信息,同时还可以转发时候讲参数改变,代码如下所示:

request.getRequestDispatcher("/sc?username=xiaohong").forward(request, response);

2、在请求转发中,request对象并不是同一个,旧的request数据复制给了新的request对象response对象请求转发中,都是同一个

2、重定向

    重定向固定代码:`response.sendRedirect(path);`  //客户端的路径为绝对路径。
     1、重定向会改变地址的;
     2、重定向N次,响应/请求 N+1次
     3、重定向可以定位到任意资源,包括外网资源
     4、重定向代码尽量不要写 写流【响应体】操作。因为网速快的时候,自动请求会极快得到响应,覆盖之前的响应内容。 只有网速极差的时候,才能看到响应体一次。即:写了也白写。
     5、重定向不存在request作用域
     6、重定向无法访问受保护目录资源 (eg:WEB-INF中的)
     7、重定向get请求重定向后还是get;而post重定向是get请求,相当于在浏览器上写了地址直接回车进入
     8、重定向效率不高。①受网速限制 ②每次重定向都要生成对应的响应信息

什么时候用重定向,什么时候使用请求转发

     ① 是否需要修改地址。,如果需要修改地址,用重定向,如果不需要修改地址
     ② 效率高 ,用请求转发
     ③ 是否需要定位外网资源。 如果需要定位外网---重定向; 如果是内网本项目---建议用请求转发
     ④ 如果需要使用request作用域 。使用请求转发
     ⑤ 如果需要访问受保护目录资源。 使用请求转发。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

重定向和转发的区别

  • 2014-09-04 16:55
  • 685B
  • 下载

转发与重定向的区别

  • 2016-01-07 20:24
  • 907B
  • 下载

请求转发与重定向的区别

重定向与转发的区别: 1.重定向访问服务器两次,转发只访问服务器一次。 2.重定向可以看见目标页面的URL,转发只能看见第一次访问的页面URL,以后的工作都是有服务器来做的。 3.重定向跳转后必...

重定向和转发的区别

  • 2014-04-02 23:13
  • 970B
  • 下载

struts2中的跳转详解 ----“请求转发”和“重定向”之间的区别

Struts2的ResultType和Action处理链  Struts2的结果类型 在struts-default.xml中定义了Struts2内置的所有可用的 所有的Struts2结果...

转发与重定向区别

  • 2015-09-14 16:59
  • 16KB
  • 下载

重定向和转发的区别

  • 2012-05-11 08:19
  • 67KB
  • 下载

servlet中请求转发(forword)与重定向(sendredirect)的区别

servlet请求转发与重定向的区别: request.setAttribute("test","hello"); request.getRequestDispacther("/test....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)