spring boot 请求转发和重定向
在尝试过滤器的时候牵扯到请求转发的场景,就顺手测试了一下。这里记录基本的使用套路。
1. 添加依赖
maven:
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version>
</dependency>
gradle:
// https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api
compile group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1'
2. 测试代码
目标:不论是 forward 还是 redirect,最终是到达这个方法中。从请求中拿出 method
并打印出来。
@GetMapping("/forward")public String filterForward(HttpServletRequest request,HttpServletResponse response){String method = request.getParameter("method");System.out.println("method: "+ method);return "hello "+ method ;}
请求转发:
(1) 这种请求转发方式是不 work 的。网上有好多这样的 demo,但我测试的时候都是直接返回了 forward:/forward
字符串。
@GetMapping("/hello")public String helloFilter() {String hello = "hello filter \n";return "forward:/forward";}
(2)转发正确的打开方式。
@GetMapping("/hello/forward")public void helloForward(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {RequestDispatcher requestDispatcher = request.getRequestDispatcher("/forward?method=forward");requestDispatcher.forward(request,response);}
从代码中可以看出,请求转发是通过请求分配器( RequestDispatcher ) 直接将请求转发到了另一个 url 上。此时请求依旧在后端,还没有返回响应给前端。
重定向:
@GetMapping("hello/redirect")public void helloRedirect(HttpServletRequest request,HttpServletResponse response)throws IOException {response.sendRedirect(request.getContextPath() + "/forward?method=redirect");}
从代码中可以看出,重定向是当前请求已经被 helloRedirect
执行完了,在 response 中”嵌入“新的 URL 并返回给前端。浏览器收到响应后会向嵌入的 URL 再发起一次请求,并将这次请求的结果渲染給用户。我测试了一把,当前端不是浏览器,而只是个 curl 命令,那么是不会有第二次请求的。
3. 转发和重定向的区别
最大的区别是:转发是有一次请求,重定向是两次请求。其他的区别点都是从这个点衍生来的。
转发:
- 浏览器上的 URL 不会发生变化。
- 原始的请求会发送到第二个 url 对应的方法中去。
请求:
浏览器上的 URL 会发生变化。
浏览器会创建一个新的请求发送给第二个 url 对应的方法。
4. demo 地址
forward-and-redirect
spring boot 请求转发和重定向相关推荐
- 【JavaWeb】一文Servlet全解:继承关系、生命周期、容器和请求转发与重定向等
文章目录 一.Servlet 概述 二.Servlet HelloWorld 三.Servlet 继承关系 四.Servlet 生命周期 五.ServletConfig 和 ServletContex ...
- SpringMVC第二讲——传参、修改端口、请求转发、重定向、跨服务器文件上传
传参 在地址栏?代表开始传参,用&来分隔变量 /*** 请求参数-简单传参* @param name* @param age* @return*/@RequestMapping("t ...
- spring boot请求后缀匹配的操作
这篇文章主要介绍了spring boot 请求后缀匹配的操作,具有很好的参考价值,希望对大家有所帮助.如有错误或未考虑完全的地方,望不吝赐教 spring boot 请求后缀匹配 spring boo ...
- jsp:请求转发和重定向
HttpServletResponse对象的sendRedirect(String location)方法称作重定向, 如果location地址前面加上"/",则表示相对于Serv ...
- 浅析请求转发和重定向
浅析请求转发和重定向 1.请求转发 request.getRequestDispather("/indexServlet").forword(request,response); ...
- 【相对/绝对路径】JavaWeb项目中,请求转发与重定向的路径写法
相对路径.全路径 是要不以/开头,都是相对路径.相对路径是从当前资源出发,去寻找其他资源. 只要路径中以/开肉,就是全路径.全路径是从项目根目录出发,去寻找其他资源. 在开发中,写文件路径时,最好使用 ...
- 【Servlet】请求转发、重定向、Cookie使用之三天自动登陆
三天自动登陆项目源码:GitHub地址-LoginSystem JDBC 手写SORM框架 手写Servlet 开发环境:Eclipse 一.请求乱码问题解决 // 设置请求.响应编码格式req.se ...
- 【JavaWeb】Response请求转发与重定向辨析
请求转发与重定向对比 辨析 请求转发只有一次请求.一次响应,是在服务端内部跳转 重定向有两次请求.两次响应:将结果返回给客户端,让客户端重新发起一次跳转 请求转发的登陆界面实现 login.jsp & ...
- ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段...
原文地址:ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段 ServletRequest 基本概念 ...
- 请求转发与重定向的区别和执行流程
请求转发与重定向的区别和执行流程 文章目录 请求转发与重定向的区别和执行流程 1 请求转发与重定向区别 2 现实生活的例子 2.1 重定向 2.2 请求转发 3 重定向-流程图.代码.结果 3.1 流 ...
最新文章
- 基于双向LSTM和迁移学习的seq2seq核心实体识别
- linux安装python3.6以后报错处理
- vue-router向子组件传递参数
- 深度学习(1)---2017年深度学习NLP重大进展与趋势
- Linux命令sort的常用用法
- 深度学习(三)----算法岗面试题
- UISwitch用法详解
- py3 写的基于GUI 的 旁注 wwwscan集成扫描工具
- python+selenium实现QQ空间的登录
- 视频教程-【深入理解计算机网络】讲师解读计算机网络原理视频课程(上)-计算机网络
- MFC动态修改Static Text控件caption
- 遍历文件夹进行点云格式转换 PCD转BIN BIN转PCD PCD转TXT TXT转PCD PLY转PCD
- 乐鑫ESP32-S3双核处理器,专为 AIoT 市场打造
- PyQt5编程-鼠标事件
- ShowType=0,交换机命令showinterfacestype0/port_#switchport|trunk用于显 - 信管网
- 计算机无法用630打印机,爱普生LQ-630型针式打印机突然打印几行乱码,就不工作了...
- Qt部分拉伸的背景图片
- java计算机毕业设计歌唱比赛积分管理系统源码+mysql数据库+系统+lw文档+部署
- 博客搬家到Octopress(Mac)
- 云和恩墨祝各位“女神”节日快乐!
热门文章
- MSM8937系统启动流程【转】
- paraview启动失败:failed to get wglChoosePixelFormatARB
- 完美解决Teamview12 过期之后不能用问题
- 中国各省所处的经纬度范围
- 黑苹果内置硬盘识别成外置硬盘_空间大?安全更重要,麦沃 K35274D硬盘阵列盒使用体验--数据无价...
- FPGA-08FPGAVGA彩条显示
- facade模式 java_Java设计模式之外观模式(Facade模式)介绍
- Visual Studio Ultimate 2012 激活密钥
- Intellij idea 2018.3热部署 jrebel 激活
- 三菱plc pwm指令_三菱plc功能指令集大全和自学基础