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