请求转发
请求转发是服务器行为,即用户向服务器发送了一次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="/>
方式三:请求转发的方式
//获取请求转发器RequestDispatcher dispatcher = req.getRequestDispatcher("/a=index.html");//请求转发dispatcher.forward(req, resp);
方式四:重定向方式
resp.sendRedirect("/a.html")
ajax跳转页面
在success:
$(window).attr("location","index.html");