JavaWeb中重定向sendRedirect和转发forward的区别
重定向和转发在外面看到,可能都是从页面A到页面B的跳转
但是其实现方式和原理都是不一样的
面试可能会问到
转发
通常的实现代码如下:
request.getRequestDispatcher("/跳转的地址").forward(request,response);
特点:
- 转发是服务器行为
- 转发地址栏路径不变
- 转发只能访问当前服务器下的资源
- 转发是一次请求
- 可以使用request对象来共享数据,请求域中数据不会丢失
重定向
通常的实现代码如下:
方法一:
//设置状态码 response.setStatus(302); //设置响应头 response.setHeader("location","/跳转的地址");
方法二:
response.sendRedirect("/跳转的地址");
特点:
- 重定向是客户端(浏览器)行为
- 重定向地址栏路径改变
- 重定向可以访问任意服务器(站点)的资源
- 重定向是两次请求
- **不可以共享数据,**请求域的数据会丢失
小结
Q:什么时候使用转发,什么时候使用重定向?
A:如果需要保留请求域的数据(带数据)使用转发,否则使用重定向
Q:具体一点
A:增删改操作请使用重定向,如果是采用转发则会因为地址栏没有变化而出现刷新一次就更新一次数据库(比如添加一条记录)的情况。查询时请使用转发,因为转发速度快且可以带数据
Q:转发、重定向是否相当于return,方法后续的代码不会执行?
A:不是,转发和重定向后续的代码均会继续执行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现