请求转发(forward)和重定向(sendRedirect)

文章目录

  • 引例
  • 一、解决方法
  • 二、用法
  • 三、转发和请求的特点和区别
    • 1.转发
    • 2.重定向
  • 总结


引例

设想这样一种情况,在我们登录某个网站时,登录页面会要求我们输入账号密码以及其他信息,当我们点击登录按钮时,浏览器会将我们的信息以及请求的一些信息发送到服务器端,在服务器端,我们可以从request中拿到这些信息,接下来需要对这些信息进行处理,我们会用到不同的web组件处理他们,比如我会在一个web组件1中将你的信息和数据库中的信息进行比对,而在另一个web组件2中判断你是管理员账号还是普通用户账号,这个时候,我们需要将信息送到两个不同的组件中,那么怎么做呢?

一、解决方法

解决方法一:将存在一个request中的信息从web组件1转发到web组件2中,这就是请求转发(Forward)
请求转发(forward)和重定向(sendRedirect)_第1张图片

解决方法二:web组件1处理完请求后返回一个response响应,这个响应中包含了web组件2资源的url,告诉浏览器,让你重新向web组件2发送一个请求。这就是重定向(sendRedirect)
请求转发(forward)和重定向(sendRedirect)_第2张图片

二、用法

转发(利用request转发请求):

request.getRequestDispatcher("/要跳转的地址").forward(request, response);

重定向(利用response返回要重定向的组件的url):

response.sendRedirect("/要跳转的地址");

三、转发和请求的特点和区别

1.转发

1、转发是服务器端行为
2、转发整个过程浏览器端只做了一次请求
3、转发浏览器地址不变
4、在转发过程中request域中的数据不会丢失
5、转发只能将请求转发给同一个web应用中的组件

2.重定向

1、重定向是客户端行为
2、重定向是浏览器做了至少两次的访问请求
3、重定向浏览器地址改变
4、重定向两次跳转之间request域中信息数据会丢失(新的request会替代旧request但是不会继承旧request中的数据)
5、重定向可以指向任何资源,包括当前应用程序中的其他资源、同一站点上其他应用程序中的资源以及其他站点的资源


总结

转发和重定向是实现页面跳转的两种方式,他们也有不同的优缺点和应用场景,比如,当两个web组件之间需要传递数据时,最好选择用请求转发(forward),而在做增、删、改时最好用重定向(查用转发),因为不用重定向,每次刷新页面就相当于一次新的请求,就可能做额外的操作,导致数据不对。

你可能感兴趣的:(java)