请求转发
请求转发是服务器行为,即用户向服务器发送了一次http请求,该请求可能会经过多个信息资源处理以后返回给用户,各个信息资源使用请求转发机制互相转发请求,从用户的感官上来看,是感觉不到请求转发的。
请求转发的关键点:
从第一次发送请求到最后一次发送请求的过程中,web容器只创建一次request和response对象,新的页面继续处理同一个请求。
其本质是服务器将request对象在页面之间进行了相互的传递。
可以共用request对象信息。
服务器内部进行的转发
只有一次请求
地址栏不会发生变化
必须是在同一台服务器下完成
代码的实现:
//获取请求转发器
RequestDispatcher dispatcher = req.getRequestDispatcher("/myservlet04.do");
//请求转发
dispatcher.forward(req, resp);
1
2
3
4
请求重定向:
请求是客户端行为(客户端跳转)。服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。它本质上是两次HTTP请求,对应两个request对象。
几个关键问题
有两次请求
地址栏会发生改变
HttpServletRequest不能可以在这两次请求中共享数据
可以共享context,session域的数据
可以在不同服务器下完成
代码实现
方式一:设置响应头
resp.setStatus(302);
resp.setHeader("Location", "/myservlet04.do");
1
2
方式二:使用servlet提供的api
resp.sendRedirect("myservlet04.do")
1
转发与重定向的区别
转发在服务器端完成的;重定向是在客户端完成的
转发的速度快;重定向速度慢
转发的是同一次请求;重定向是两次不同请求
转发不会执行转发后的代码;重定向会执行重定向之后的代码
转发地址栏没有变化;重定向地址栏有变化
转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成
页面跳转问题
方式一:javascript中跳转页面
window.location.href="http://localhost:8080/index.html";
1
方式二:使用Html中标签来定义页面的元信息
<meta http-equiv="refresh" content="5;url=http://www.baidu.com"/>
1
2
方式三:请求转发的方式
//获取请求转发器
RequestDispatcher dispatcher = req.getRequestDispatcher("/a=index.html");
//请求转发
dispatcher.forward(req, resp);
1
2
3
4
方式四:重定向方式
resp.sendRedirect("/a.html")
1
ajax跳转页面
在success:
$(window).attr("location","index.html");
————————————————
版权声明:本文为CSDN博主「m_target」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m_target/java/article/details/82194218
网友评论