目 录CONTENT

文章目录

请求转发和重定向的区别

在等晚風吹
2023-12-04 / 0 评论 / 1 点赞 / 43 阅读 / 0 字 / 正在检测是否收录...

请求转发与重定向的区别

不同1:语法不同

请求转发:request.getRequestDispatcher("dis02").forword(request,response);
重定向:response.sentRedirect("red02");

不同2:请求不同
请求转发:是一个请求
重定向:是不同的请求

不同3:地址栏是否发生改变

请求转发:不变
重定向:变

不同4:请求参数能否携带

请求转发:可以
重定向:不可以, 但是可以手动设置携带参数:resp.sendRedirect("red2?uname="+req.getParameter("uname")+"&pwd=123");

不同5:执行效率不同

请求转发:服务器内部跳转,所以效率高啊
重定向:相对效率低

不同6:跳转范围不同

请求转发:只能在服务器内部跳转
重定向:既能跳转服务器内部资源,又能跳转服务器外部资源

不同7:表单是否发生重复提交

请求转发:会,指的是数据提交后,刷新页面,因为地址栏地址不变,每刷新一次都会重复请求一次,数据提交一次。如果刚好是个添加操作,每次都会添加一次。

重定向:不会

不同8:路径书写方式不同

(1)绝对路径 - 有协议、IP、端口 ,eg: http://www.baidu.com

​ 请求转发:不支持

​ 重定向:支持

(2)相对路径:相对servlet的url地址的路径 (不建议)

​ 自行测试:将第一个servlet地址改为"/msb/s1",然后分别请求转发,重定向到第二个servlet,观看相对地址和运行结果

​ 对于不加/,就是相对路径,相对servlet配置的url-pattern(请求地址),所以你要是url-pattern配置的是 /a 那么不加/ 没啥问题 ,但是url-pattern里面要是 /a/b/c 那么在访问jsp的时候 可能就出错了! 代码不加/就出错了!

(3)根路径: 资源路径加"/" (建议)

​ 请求转发:到项目根目录下查找资源 http://localhost:8080/项目访问名/

​ 重定向:到服务器根目录下查找资源 http://localhost:8080/

​ eg:resp.sendRedirect(req.getContextPath()+"/dis2");

转发和重定向使用场景

1、跳转前后是否需要共享request中数据

​ 如果需要共享:转发

​ 如果不需要共享:都可以

2、是否要跳转到服务器外部资源

​ 如果需要跳出项目:重定向

​ 如果不需要:都可以

3、是否涉及表单重复提交

​ 重定向:不会造成表单重复提交

​ 转发:会造成表单重复提交

1

评论区