请求转发(Forward)和重定向(Redirect)
1、重定向(Redirect)
是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL
1、工作原理:
用户第一次通过手动方式通过浏览器访问OneServlet,OneServlet工作完毕后,将TwoServlet地址写入到响应头, localhost属性中,导致tomcat将302状态码写入到状态行。
在浏览器接收到响应包后,会读取到302状态,此时浏览器自动根据响应头中的localhost属性地址发起第二次请求,访问TwoServlet去完成请求中剩余任务。
2、servlet的实现命令:
response.sendRedirect("请求地址");
将地址写入到响应包中的响应包中
3、特点:
1)浏览器地址栏会发生变化
2)请求次数:
浏览器至少发送两次请求,但是只有第一次请求是用户手动发送的,后续请求都是浏览器自动发送的
3)请求方式:
重定向解决方案中,通过地址栏通知浏览器发起下一次请求,第一次是用户发起的可以是GET或者POST,但是后面的请求都是GET请求 (很简单验证,在get|post输出不同的内容,看控制台输出什么)
4)缺点:
重定向方案需要在浏览器与服务器之间进行多次往返,大量事件消耗在往返上,增加用户等待服务时间
图解:
分析过程:
(1) 浏览器发送了两次请求
(2)浏览器的地址发生改变
(3)请求过程产生了两个request和两个response请求
(4)两个servlet不共享同一个request和response
(5)通过response.sendRedirect(url)方式实现
就好比:你向A去借钱,但是A没有钱,A告诉你B有钱,然后你自己在去向B借钱
代码演示:
@WebServlet("/One")
public class OneServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doGet(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("doPost方法执行");//重定向解决方案resp.sendRedirect("Two");}
}//另一个Servlet
@WebServlet("/Two")
public class TwoServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("西红柿炒鸡蛋");}
}
页面:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>静态页面</title>
</head>
<body><form action="One" method="post"><table><tr><td>姓名</td><td><input type="text" name="name"></td></tr><tr><td>年龄</td><td><input type="text" name="age"></td></tr><tr><td> </td><td><input type="submit" value="提交"></td></tr></table></form>
</body>
</html>
2、请求转发(Forward)
是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转过程实在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址.
1、工作原理:
1)用户第一次通过手动方式要求浏览器访问OneServlet
2)Oneservlet工作完成后,通过当前的请求对象代替浏览器向Tomcat发送请求申请调用TwoServlet
3)Tomcat接收请求后,自动调用TwoServlet来完成剩余的任务
2、实现命令:
通过当前请求对象生成资源文件申请报告对象
RequestDispathcher report = request.getRequestDispatcher("/资源文件名")
将报告对象发送给Tomcat
report.forward(request,response);
例如:request.getRequestDispatcher("1.jsp").forward(request,response);
3、优点:
1)无论本次请求涉及到多少servlet,浏览器只是发送一次请求
2)Servlet之间调用发生在服务器计算机上,节省服务器与浏览器之间往返次数
增加处理服务速度
4、特征
1)请求次数
在请求发送过程中,浏览器只是发送一次请求
2)请求地址:
只能向tomcat服务器申请调用当前网站下的资源文件地址
3)请求方式
根据客户端而定
在请求转发的过程中,浏览器只是发送一个Http请求协议包,参与本次请求的所有的servlet共享一个请求协议包
因此这些servlet接收的请求方式与浏览器发送的请求方式保持一致
简单说:就是用户第一发起什么请求,后面的转发就是什么请求
图解:
简单说:就好比你向A借钱,但是A没有钱,所以A跑去向B借钱,然后把借来的钱给你
分析过程:
(1)浏览器只发送了一次请求
(2)浏览器的地址栏不会发生改变
(3)请求过程中只产生一个request和response对象
(4)几个Servlet共享同一个request和response对象
(5)通过 request.getRequestDispatcher("xxx").forward(request,response)方式实现
3、两者的区别:
重定向 | 请求转发 |
1、请求次数,至少两次 2、浏览器地址栏发生改变 3、不可以共享request | response 域中的数据 4、不可以转发到WEB-INF目录下 5、第一次是用户发起的可以是GET或者POST,但是后面的请求都是GET请求 |
1、请求次数只有一次 2、浏览器地址栏不发生改变 3、可以共享request | response域的数据 4、可以转发到WEB-INF目录下 5、用户第一发起什么请求,后面的转发就是什么请求 |
请求转发(Forward)和重定向(Redirect)相关推荐
- java中forward和redirect_java中转发forward和重定向redirect的区别
Forward(转发) 是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是 ...
- 请求 转发(forword)和重定向(redirect)
请求 转发forword和重定向redirect 两者含义 两者区别 总结 两者含义 forword转发: 服务器请求资源,直接访问目标地址的url,把那个url响应内容读取过来,然后把这些内容发给浏 ...
- servlet中请求转发forword与重定向redirect区别
1.请求转发(RequestDispatcher)的过程: 客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getReques ...
- 转发(Forward)和重定向(Redirect)的区别
转发是服务器行为,重定向是客户端行为. 转发(Forward) 通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServlet ...
- Java中转发(Forward)和重定向(Redirect)的区别
从URL来说,转发的地址栏没有发生改变,而重定向则是新的URL 从数据共享来说,转发可以共享request域里面的数据,而重定向则不能. 效率来说转发效率高,重定向效率低 转发一般用来登陆后转发到对应 ...
- httpservletresponse 重定向浏览器不变的原因_JavaWeb——Servlet——请求转发与响应重定向...
导语:在实际的软件开发过程中,往往需要多个Servlet来实现不同的功能,就需要对多个Servlet进行组合调用.多个Servlet之间如何进行通信和跳转?而这就需要用到请求转发与响应重定向技术. 原 ...
- 请求转发跟响应重定向的具体应用
1.请求转发与响应重定向的概念 ·转发 是服务器端的行为 发送了一次请求 网址不会发生变化 请求的数据不会丢失 一般情况下在进行查询操作时使用转发 方法:request.getRequestDispa ...
- 重定向(Redirect)和请求转发(forward)的区别?
1.本质区别:重定向是客户端行为,请求转发是服务器行为: 2.浏览器地址栏路径:重定向发生变化,请求转发不发生变化: 3.访问到的资源位置:可以重定向到任意位置的资源,服务器内外部均可,只能转发到当前 ...
- Servlet转发forward和重定向response.sendRedirect()区别
转发(forward):浏览器地址不会改变,始终是同一个请求.执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址.forward是内部重定向. 重定向(send ...
- 转发forword和重定向redirect
转发forword 转发是浏览器发送http请求给服务器,服务器接受请求,在内部调用方法在完成请求处理和转发动作将目标资源发送给浏览器,整个过程浏览器对服务器的请求只有一次,该请求也可以转发n次,都是 ...
最新文章
- flutter web:lottie jssdk报错处理
- 超级计算机游戏电脑,Salad邀请PC玩家参与全球最大分布式超级计算机的构建
- python静态变量_python静态变量
- 2021年青海省大学生首届网络安全知识与技能大赛——赛题回顾及基本讲解
- MySQL高级知识(六)——索引优化
- 暗藏 15 年,Linux 惊曝 3 大 Bug 直取 root 权限!
- HTML5_增强可访问性和解决IE兼容性问题
- 推荐阅读20100708
- 关于nginx file not found
- 大吉大利,今晚如何用R语言解锁“吃鸡”正确姿势
- rslogix5000pide实例_用RSLogix5000梯形图实现一种高级PID运算
- VC14(VC2015)安装失败,0x80240017 - 未指定的错误,解决办法
- Intellij中Maven项目html页面乱码解决方案
- 求轮廓最大内接圆(后续篇)---距离变换法
- 如何判断工作簿中是否存在某个工作表
- 公司-广告-分众传媒:分众传媒
- 罗克韦尔编程软件RSLogix5000 win7 64位那什么的方法
- 行云创新:车云一体化平台,实现软件定义汽车
- 2020-11-29 漫谈email之smtp、pop3、spf dkim
- 国企,可能会怎么改革?
热门文章
- Git 免密Pull/Push
- iOS音频播放 (七):播放iPod Library中的歌曲
- python入门——matplotlib画图,plt.rcParams处理图像中汉字、
- 利用nginx制作文件下载链接
- lol服务器维护得多长时间,lol维护时间
- 2022年考 PMP 证书到底还有没有意义?
- openldap介绍和使用
- 如何在BigQuant跑出夏普5.67的策略-附赠其他策略
- 想申请用户体验设计实习?先看这六大建议!
- 修改 html file 文字,修改input标签type=file类型的文字