请求转发、请求重定向与页面跳转问题

请求转发

请求转发是服务器行为,即用户向服务器发送了一次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");
展开阅读全文

没有更多推荐了,返回首页