admin管理员组

文章数量:1530518

为什么“请求重定向“可以防止浏览器通过刷新重复提交表单?而请求转发不行?

    • 一·请求转发与请求重定向概念区别:
    • 二·为什么“请求重定向”可以防止浏览器刷新(F5键)导致用户重复提交表单?而“请求转发”不行?
    • 三·注意事项:

一·请求转发与请求重定向概念区别:

什么叫请求转发?
1.请求转发:

请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。

什么叫请求重定向?
2.请求重定向:

请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说。我给你一些地址。你去新地址访问。叫请求 重定向(因为之前的地址可能已经被废弃)。

二·为什么“请求重定向”可以防止浏览器刷新(F5键)导致用户重复提交表单?而“请求转发”不行?

1.为什么“请求转发”不能防止浏览器,通过刷新重复提交表单信息?:

(1)因为:(请求转发,不会改变浏览器中的地址,即使中间经过了很多其他资源路径,浏览器中仍会保持最初始的访问路径。)

(2)所以:点击“请求转发表”的提交按钮后,浏览器地址栏发生最后一次改变,直到这次请求结束,浏览器地址栏也会保持这个初始地址不变

(3)但是一旦刷新浏览器,浏览器就会自动,将现在浏览器中的地址,再次发送给服务器

(4)这个就跟点击表单的“提交按钮”,没有区别了所以请求转发会导致,用户可能多次重复提交表单。

案例:如下

1.(这里的动态web工程自己建一个)打开配置的服务器,在浏览器中进入该工程的首页,如图

2.刷新一下,看红圈部分

2.为什么“请求重定向”能防止浏览器,通过刷新重复提交表单信息?:

(1)因为:(请求重定向,会改变浏览器中的地址。每次重定向,都会将浏览器地址,变为最后访问资源的路径,而不是最初始的访问路径地址

(2)所以:最后浏览器即使不断刷新,也只是在不停的访问这个最终资源而已(例如:index页面等等)而不是如请求转发刷新一样,在不断的发送初始访问路径

案例:如下

点击提交按钮,地址栏会变成最后一次重定向的地址;(在这里不断刷新浏览器,就是不停访问首页资源)

三·注意事项:

(1)在“请求转发”的servlet程序中:

req.getRequestDispatcher(String str).forward(req,resp)方法中,书写转发路径(str)的方式(只有一种):写绝对路径

但是注意:

1.不能直接写绝对路径(以http开头),会报错。

2.必需先用 斜杠 “/” 来替换 “当前工程的绝对路径” 之后,再加上其他资源路径才OK;

(即,用斜杠“/” 代替 “http://localhost:8080/工程名/”这个路径,再在之后添加其他资源路径)

这个“/”,会映射到工程项目的web目录下。

(这里我想跳转到另外一个servlet程序,所以直接写 “/+配置的访问路径”就OK了)

(2)在“请求重定向”的servlet程序中:

resp.sendRedirect(String str) 方法中,书写重定向的路径(str)的两种方式:

1.写绝对路径(以http开头)

2.写相对路径:

注意:这种方式是,相对当前工程的绝对路径所写。
(即,这个相对这个路径 “http://localhost:8080/工程名/” 来写)

以相对路径方式,写重定向路径的时候,注意不要以带(斜杠) “/”开头斜杠在这里不解释为当前工程的绝对路径

(例如:这里需要重定向到首页因为是相对这个 “http://localhost:8080/temp/ ” 路径写的所以直接写个“index.jsp”就OK了)temp是工程名。

本文标签: 表单可以防止重定向浏览器