前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >七、 转发与重定向

七、 转发与重定向

作者头像
Qwe7
发布2022-07-24 08:20:39
3390
发布2022-07-24 08:20:39
举报
文章被收录于专栏:网络收集网络收集

七、 转发与重定向

7.1 现有问题

在之前案例中,调用业务逻辑和显示结果页面都在同一个Servlet里,就会产生设计问题

  • 不符合单一职能原则、各司其职的思想
  • 不利于后续的维护

应该将业务逻辑和显示结果分离开

1.业务、显示分离

  • 问题:业务逻辑和显示结果分离后,如何跳转到显示结果的Servlet?
  • 业务逻辑得到的数据结果如何传递给显示结果的Servlet?

7.2 转发

转发的作用在服务器端,将请求发送给服务器上的其他资源,以共同完成一次请求的处理。

1.页面跳转

在调用业务逻辑的Servlet中,编写以下代码

  • request.getRequestDispatcher("/目标URL-pattern").forward(request, response);
  • 使用forward跳转时,是在服务器内部跳转,地址栏不发生变化,属于同一次请求

2.数据传递

forward表示一次请求,是在服务器内部跳转,可以共享同一次request作用域中的数据

  • request作用域:拥有存储数据的空间,作用范围是一次请求有效(一次请求可以经过多次转发)
    • 可以将数据存入request后,在一次请求过程中的任何位置进行获取
    • 可传递任何数据(基本数据类型、对象、数组、集合等)
  • 存数据:request.setAttribute(key,value);
    • 以键值对形式存储在request作用域中。key为String类型,value为Object类型
  • 取数据:request.getAttribute(key);
    • 通过String类型的key访问Object类型的value

3.转发特点

  • 转发是服务器行为
  • 转发是浏览器只做了一次访问请求
  • 转发浏览器地址不变
  • 转发两次跳转之间传输的信息不会丢失,所以可以通过request进行数据的传递、
  • 转发只能将请求转发给同一个Web应用中的组件

7.3 重定向

重定向作用在客户端,客户端将请求发送给服务器后,服务器响应给客户端一个新的请求地址,客户端重新发送新请求。

1.页面跳转

在调用业务逻辑的Servlet中,编写以下代码

  • response.sendRedirect("目标URI");
  • URI:统一资源标识符(Uniform Resource Identifier),用来表示服务器中定位一个资源,资源在web项目中的路径(/project/source)
  • 使用redirect跳转时,是在客户端跳转,地址栏发生变化,属于多次请求

2.数据传递

sendRedirect跳转时,地址栏改变,代表客户端重新发送的请求。属于两次请求

  • response没有作用域,两次request请求中的数据无法共享
  • 传递数据:通过URI的拼接进行数据传递("/WebProject/b?username=tom");
  • 获取数据:request.getParameter("username");

3.重定向特点

  • 重定向是客户端行为。
  • 重定向是浏览器做了至少两次的访问请求。
  • 重定向浏览器地址改变。
  • 重定向两次跳转之间传输的信息会丢失(request范围)。
  • 重定向可以指向任何的资源,包括当前应用程序中的其他资源、同一个站点上的其他应用程序中的资源、其他站点的资源。

7.4 转发、重定向总结

当两个Servlet需要传递数据时,选择forward转发。不建议使用sendRedirect进行传递

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 七、 转发与重定向
    • 7.1 现有问题
      • 7.2 转发
        • 7.3 重定向
          • 7.4 转发、重定向总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档