Web转发(forward)与重定向(redirect)

请求转发forward

-> xxServlet收到请求
-> 直接转发给yyServlet
-> yyServlet返回给客户端

整个过程中,客户端发出一个请求,收到一个响应。

在这里插入图片描述

实现:

方式一:利用RequestDispather接口中的forward方法实现请求转发。

RequestDispather实例对象
RequestDispather实例对象是由Servlet引擎创建的,它用于包装一个要被其他资源调用的资源(例如Servlet,HTML文件,JSP文件等),并可以通过其中的方法将客户端的请求转发给所包装的资源。

public class forwardServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {PrintWriter out=response.getWriter();System.out.println("forwardServlet's doGet");String path="testServlet";//1.调用HttpServletRequest的getRequestDispatcher()方法,调用时需要传入转发的地址;RequestDispatcher requestDispatcher=request.getRequestDispatcher(path);//2.调用HttpServletRequest的forward(request,response)方法进行请求的转发;requestDispatcher.forward(request,response);}}

代码流程分析

  1. forwardServlet收到客户端的请求后,forwardServlet调用HttpServletRequest的getRequestDispatcher()方法,
  2. forward(request,response)方法进行请求转发,将请求直接转发给testServlet
  3. testServlet将响应返回给客户端。

请求重定向redirect

xxServlet收到请求,然后发出一个响应给客户端,客户端立即又发送一个请求访问xxServlet中给的URL,即yyServlet的路径,然后yyServlet给客户端一个响应。整个过程中,客户端发出两个请求,收到两个响应。
在这里插入图片描述

实现

利用HttpServletResponse的sendRedirect(path)方法实现请求重定向。

public class redirectServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("redirectServlet's doGet");String path="testServlet";response.sendRedirect(path);}
}

区别

转发 Forward重定向 sendRedirect
服务器端的跳转客户端的跳转
服务器直接将请求转发到其他JSP或者Servlet服务器会返回客户端一个响应报头和新的URL地址
参数的信息原封不动的传递原来的参数信息如果服务器没有特殊处理就不存在了
请求转发不知道,他只需要有返回即可;请求重定向,前端知道后端访问了多少个servlet
请求转发始终显示的是原来的servlet,转发只能看见第一次访问的页面URL,以后的工作都是有服务器来做的重定向会改变地址栏的url地址,会直接显示出被重定向之后的结果,也就是说重定向可以看见目标页面的URL
请求转发只能在自己项目内转发,不可以到外部地址方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源
使用转发后,之前的request中存放的变量不会失效,就像两个页面拼在了一起,调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程使用重定向后,之前的request中存放的变量全部失效,并进入一个新的request作用域

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144157.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SMART PLC高速计数器(CV=PV)中断应用

PLC如何开中断,请参考下面文章链接: PLC定时中断程序应用注意事项(西门子三菱信捷)_plc中的定时中断是什么意思-CSDN博客文章浏览阅读3.4k次,点赞5次,收藏12次。本文探讨PLC中断的概念,介绍了西门子、三菱和信捷PLC开启中断的步骤,强调了主程序扫描时间与定时中断时间…

基于SpringBoot的在线教育平台的设计与实现

文未可获取一份本项目的java源码和数据库参考。 选题的背景与意义: 随着互联网时代信息技术的不断发展,线下已经产生了很多IT技术的培训机构,但是价格却十分昂贵并且需要人们持续不断的去具体培训地点学习,因此更需要一个课程优…

【LeetCode】每日一题 2024_9_18 坐上公交的最晚时间(排序,模拟)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 题目:坐上公交的最晚时间 代码与解题思路 func latestTimeCatchTheBus(buses []int, passengers []int, capacity int) (ans int) {// 核心思路分析:// 你可以搭乘公交车的最晚到达…

mysql怎样优化count(*) from 表名 where …… or ……这种慢sql

一 问题描述 线上发现一条类似这样的慢sql(查询时长8s): select id,name,(select count(*) from t14 where t14.idt15.id or t14.id2t15.id) as cnt from t15 ; t14的id和id2字段上都有索引,但是因为条件里有or,导致…

数据结构(Day15)

一、学习内容 结构体位域 #include <myhead.h>typedef struct {int a:2;short b:1;char c:1; }m1;typedef struct {char a:3;short b:7;int c:10; }m2; int main(int argc, const char *argv[]) {printf("%ld\n",sizeof(m1));printf("%ld\n",sizeof(…

Matlab simulink建模与仿真 第十八章(Stateflow状态机)

参考视频&#xff1a;Simulink/stateflow的入门培训_哔哩哔哩_bilibili 一、概述 Stateflow是集成于Simulink中的图形化设计与开发工具&#xff0c;主要用于针对控制系统中的复杂控制逻辑进行建模与仿真&#xff0c;或者说&#xff0c;Stateflow适用于针对事件响应系统进行建模…

物联网系统中如何通过光电效应实现位置监测_光电传感器

物联网系统中为什么要使用光电传感器 物联网系统中使用光电传感器的原因可以归结为以下几个方面&#xff1a; 一、光电传感器的特性与优势 非接触性&#xff1a;光电传感器通过光线与物体相互作用来进行探测和测量&#xff0c;无需直接接触被测物体&#xff0c;避免了对物体的…

基于web的工作管理系统设计与实现

博主介绍&#xff1a;专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

如何使用ssm实现大湾区旅游推荐系统的设计与实现+vue

TOC ssm621大湾区旅游推荐系统的设计与实现vue 第1章 绪论 1.1 研究背景意义及内容 1.1.1 研究背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域…

【Python百日进阶-Web开发-FastAPI】Day802 - FastAPI安装和起步

文章目录 一、安装 FastAPI1.1 进入虚拟环境1.2 安装FastAPI及所有相关依赖1.3 可以分开来安装二、第一步2.1 最简单的FastAPI应用2.2 uvicorn.run() 常用参数2.3 交互式 API 文档2.3.1 docs文档(由 Swagger UI 提供)2.3.2 docs文档空白解决方案2.3.2.1 解决方法1:更新FastA…

Python OpenCV精讲系列 - 高级图像处理技术(八)

&#x1f496;&#x1f496;⚡️⚡️专栏&#xff1a;Python OpenCV精讲⚡️⚡️&#x1f496;&#x1f496; 本专栏聚焦于Python结合OpenCV库进行计算机视觉开发的专业教程。通过系统化的课程设计&#xff0c;从基础概念入手&#xff0c;逐步深入到图像处理、特征检测、物体识…

软件卸载工具(windows系统)-geek

有时候软件卸载会很麻烦&#xff0c;使用geek会比较方便。但是针对一些特别大的软件&#xff0c;geek也好像会稍微费点劲&#xff08;比如MATLAB2022A&#xff09;,不过针对一般常规软件的卸载&#xff0c;geek就可以有效地完全卸载了&#xff0c;使用方法也很简单&#xff0c;…

【Elasticsearch系列十二】聚合-电视案例

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Vue3 中 Aos 动画同时触发的解决办法

文章目录 问题现象解决之后的效果解决办法问题猜测 问题现象 我总共有四行数据&#xff0c;每一行都是一个动画&#xff0c;但是触发第一个之后其他三个也都触发了 我想要的效果是&#xff1a;动画从底部出现的时候触发一个动画&#xff0c;不要都触发掉 解决之后的效果 解决…

css边框修饰

一、设置线条样式 通过 border-style 属性设置&#xff0c;可选择的一些属性如下&#xff1a; dotted&#xff1a;点线 dashed&#xff1a;虚线 solid&#xff1a;实线 double&#xff1a;双实线 效果如下&#xff1a; 二、设置边框线宽度 ① 通过 border-width 整体设置…

uni-data-select 使用 localdata 传入数据出现 不回显 | 下拉显示错误的 解决方法

目录 1. 问题所示2. 正确Demo3. 下拉显示错误(Bug复现)4. 下拉不回显(Bug复现)1. 问题所示 uni-app的下拉框uni-data-select 使用 localdata 传入数据 主要总结正确的Demo以及复现一些Bug 数据不回显数据不显示下拉选项2. 正确Demo 详细的基本知识推荐阅读:uni-app中的…

基于SpringBoot+WebSocket实现地图上绘制车辆实时运动轨迹图

实现基于北斗卫星的车辆定位和轨迹图的Maven工程&#xff08;使用模拟数据&#xff09;&#xff0c;我们将使用以下技术&#xff1a; Spring Boot&#xff1a;作为后端框架&#xff0c;用来提供数据接口。Thymeleaf&#xff1a;作为前端模板引擎&#xff0c;呈现网页。Leaflet…

图书馆座位预约系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;图书馆管理&#xff0c;座位信息管理&#xff0c;预约选座管理&#xff0c;签到信息管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;论坛&#xf…

力扣最热一百题——缺失的第一个正数

目录 题目链接&#xff1a;41. 缺失的第一个正数 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;标记数组法 1. 将非正数和超出范围的数替换 2. 使用数组下标标记存在的数字 3. 找到第一个未标记的位置 4. 为什么时间复杂…

【Vue】- 路由及传参

文章目录 知识回顾前言源码分析1. 声明式导航2. 路由传参3. 可选符4. 重定向5. 4046. 跳转及传参7. 路由懒加载拓展知识总结router-link静态传参和动态路由的对比知识回顾 前言 什么是单页面应用程序? ● 所有功能在一个html页面上实现 单页面应用优缺点? ● 优点:按需更新…