转发和重定向

本文详细解析了Java Servlet中请求转发和重定向的原理、用法,并比较了它们的异同,涵盖了request域、地址变化、范围限制和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转发和重定向

// return "/site/admin/data"这种是返回到模板,
// 模板交给dispatchersevlet去后续处理
return "/site/admin/data";

// forward转发到另一个请求而不是模板,再继续处理;
return "forward:/data";

重定向的方法
response.sendRedirect(“list.jsp”);

转发方法
getRequestDispatcher()包含两个重要方法,分别是请求转发和请求包含。一个请求跨多个Servlet时,需要使用请求转发和请求包含。
首先需要获得一个RequestDispatcher 对象:RequestDispatcher rd = request.getRequestDispatcher("/MyServlet");
请求转发: rd.forward( request , response );
请求包含: rd.include( request , response);
需注意的是,无论是请求转发还是请求包含,都在一个请求范围内!使用同一个request和response!

 response.sendRedirect(request.getContextPath() + "/index");  //重定向到首页

 request.setAttribute("error", e.getMessage());  //转发时带入的信息
 request.getRequestDispatcher("/loginpage").forward(request, response); //转发

转发和重定向对比

  1. 请求转发是一个请求一次响应,而重定向是两次请求两次响应。
  2. 请求转发地址不变化,而重定向会显示后一个请求的地址。这是因为请求转发是服务器的行为,是由容器控制的转向,整个过程处于同一个请求中,因此客户端浏览器不会显示转向后的地址;但重定向是客户端的行为,重新发送了请求,整个过程不在同一个请求中,因此客户端浏览器会显示跳转后的地址。
  3. 请求转发只能转发到本项目其它Servlet,而重定向不只能重定向到本项目的其它Servlet,还能定向到其它项目。
  4. 请求转发是服务端行为,只需给出转发的Servlet路径,而重定向需要给出requestURI,既包含项目名。

在这里插入图片描述

request域

request是Java四大域对象之一,正是它提供了请求转发和请求包含的功能。一个请求会创建一个request对象,若在一个请求中跨越了多个Servlet,那么这些Servlet可以使用request来共享数据。**同一个请求范围内使用request.setAttribute()和request.getAttribute()来传值!**前一个Servlet调用setAttribute()保存值,后一个Servlet调用getAttribute()获取值。

参考链接 :转发重定向

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值