servlet请求转发与重定向的区别及页面跳转与传值

web实验一.1-- servlet请求转发、请求转发与重定向区别 1. 简单的综合应用,掌握Servlet将请求转发给另一个Servlet的方法。 【步骤1】创建一个名为input.html的HTML页面,其中包括一个表单,表单中包含两个文本域,分别供用户输入学号和姓名,该页面也包含提交和重置按钮。 【步骤2】 定义一个名为com.demo.Student类,其中包括学号sno和姓名name两个private的成员变量,定义访问和修改sno和name的方法。 阅读详情

此文章为个人理解和总结,如有不足或错误请大家及时提出并纠正,转载请注明出处谢谢

一、请求转发与重定向的区别

转发和重定向流程图如下

请求转发(服务器端转发):

1、客户端(HTML)向服务器发送一条请求,服务端发现匹配的servlet,并指定它去执行。当这个servlet执行完之后,它要调用getRequestDispacther()方法,返回值类型是RequestDispatcher,设定目标资源jsp(jsp==servlet是服务端)。

2、调用forward(ServletRequest req,ServletResponse res):该方法是RequestDispatcher接口的方法,将请求从一个servlet转发到服务器上另一个资源jsp(目标资源)(jsp==servlet是服务端)

3、目标资源jsp(jsp==servlet是服务端)接收转发过来的请求,并将接收数据后的jsp生成HTML返回给客户端

重点:转发是服务器行为,因此也是在这个web应用内转发,整个过程是一个请求一个响应。可以看做一个request请求里包含了多个servlet,多个servlet共享的是同一个request,所以他们之间可以通过getAttribute()读取前一个servlet的存值。

(因为是一次请求,所以地址栏是不会改变的)

由request执行转发操作,request.getRequestDispacther("url").forward(request,response)

 

重定向(客户端跳转):

1、客户端(HTML)发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样。

2、servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,看到response.senRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你的目标资源在哪里你必须要再发送一个请求,去访问你的目标资源jsp(jsp==servlet客户端)

服务器将你当前请求返回,然后给个状态标示给你,告诉你应该去重新请求另外一个url。

3、紧接着客户端收到这个请求后,立刻发出一个新的请求,去请求你的目标资源jsp(这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了)

4、目标资源jsp把自己生成HTML返回给客户端。

 

重点:重定向是客户端行为,也就注定可以向任何地址发送请求,客户端行为的改变是服务器所给的指示,亦即是response的行为返回,每次请求都是新的行为,request不保留上次的内容。

(因为是两次请求,所以地址栏会改变)

 

两者最大区别是:运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何 

请求转发重定向
服务器端跳转客户端跳转
客户端总共发送一次请求客户端总共发送两次请求
地址栏URL不会改变地址栏URL会改变

注意:

  • 重定向是不能访问WEB-INF下的资源,WEB-INF的资源只有服务器级别才可以访问。重定向的含义就是服务器把地址发给客户端,让客户端去访问,这样还是在客户端访问的WEB-INF目录,所以是无法访问到WEB-INF目录下的资源。详情请查看Web项目中关于WEB-INF目录的各种问题

 

===================================================================

上面的还是不好理解吗?好吧,下面是白话版场景模拟

请求转发(服务器端转发):

1、我(客户端)要找一本书,我告诉图书管理员(服务器端)我要找什么【第一次请求】;

2、管理员帮我找到;

3、并将找到的书翻译成我看的懂的文字(HTML)给我(客户端)

重定向(客户端跳转):

1、我(客户端)要找一本,我告诉图书管理员(服务器端)我要找什么【第一次请求】;

2、这个管理员A说这类书不归我管,告诉我让我去找这书所在类别区域的另一个管理员B(重点是另一个管理员)让他给我拿;

3、我根据管理员A告诉我的位置去找管理员B告诉他我要找一本书【第二次请求】;

4、管理员B帮很快帮我找到了书并翻译成我看的懂的文字(HTML)给我(客户端)

 

二、页面跳转

    1、请求转发(HttpServletRequest)

        request.getRequestDispacther("url").forward(request,response);

运用RequestDispatcher接口的Forward()方法 ;forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,只有在客户端没有输出时才可以调用forward方法。<br><br>如果当前页面的缓冲区(buffer)不是空的,那么你在调用forward方法前必须先清空缓冲区。

"/"代表相对与web应用路径

RequestDispatcher rd = request.getRequestDispatcher("/ooo");
rd.forward(request, response);

提交至http://localhost:8080/demo/ooo


RequestDispatcher rd = getServletContext().getRequestDispatcher("/ooo");
rd.forward(request, response);

提交至http://localhost:8080/demo/ooo

 
RequestDispatcher rd =getServletContext().getNamedDispatcher("TestServlet");//(TestServlet为一个<servlet-name>)
rd.forward(request, response);

提交至名为TestServlet的servlet

 

 

    2、重定向(HttpServletResponse)

        response.sendRedirect();

        此方法是在用户的浏览器端工作,同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame的jsp文件。

        假设转发代码包含于注册的servlet-url为/demo/test;jsp为/demo/test.jsp。

绝对路径:
response.sendRedirect("http://www.baidu.com")
发送至http://www.baidu.com

根路径:
response.sendRedirect("/aaa")
发送至http://localhost:8080/aaa

相对路径:
response.sendRedirect("aaa")
发送至http://localhost:8080/demo/test/aaa

        绝对路径:response.sendRedirect("http://www.baidu.com")发送至http://www.baidu.com
        根路径:response.sendRedirect("/aaa")发送至http://localhost:8080/aaa
        相对路径:response.sendRedirect("aaa")发送至http://localhost:8080/demo/test/aaa

三、页面间传值

    1、请求转发request

<!--form表单传值-->
<!--传值-->
<form>
 <input name="username"/>
</form>
<!--接值-->
request.getParameter("password"); 
<!--Attribute传值-->  
<!--传值-->  
response.setAttribute("name",name)    
<!--接值-->  
response.getAttribute("name")
<!--URL拼接传值-->
<!--传值-->
url?id=1
<!--接值-->
request.getParameter("id");

 

    2、重定向response

        只能通过URL拼接传值,如:url?id=1

<!--URL拼接传值-->
<!--传值-->
url?id=1
<!--接值-->
request.getParameter("id");

 

请求转发与重定向的区别,并介绍请求转发与重定向 ** 请求转发与重定向的区别,并介绍请求转发与重定向 ** 一.请求转发与重定向的区别 1) 重定向对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求,这个过程好比有个叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。 由此可见,重定向的时候,“浏览器”一共发出了两封信和收到了两次回复,“浏览器”也知道他借到的钱出自 阅读详情

相关推荐

servlet中的请求转发和重定向

假设有这样的场景,你在web网站上输入相关的信息,点击提交,网站的页面会跳转到新的页面。那么这样是如何做到的? 这里就要用到请求转发或是重定向了。 请求转发: 顾名思义,就是将本次的请求扭转到下一个处理事务中去。我们来看一下它的具体流程。 我们假设有登录页面:PageServlet,(form表单会将请求数据发送到LoginServlet) 登...

MADE_哒哒 1280

重定向与跳转的区别

重定向:首先服务器受到浏览器客户端请求之后,服务器发送新的链接到客户端浏览器,浏览器接收到新的链接之后又重新请求收到的链接地址,在整个过程中完成之后在客户端浏览器看来是发生了一次跳转,其实是客户端浏览器请求了两次而已,所以在浏览器的地址栏里网络地址自然就会改变成新的连接 转发:服务器 接收到客户端的请求之后,服务器把控制权交到另一个JSP页面手里,新的JSP页面...

weixin_33671935的博客 546

记录rk3588 在Linux 6.1内核版本声卡 bug。

rk3588 Audio bug

Yongheng6的博客 855

Servlet、JSP实现页面跳转的两种方式

实现页面跳转的两种方式: 转发:客户端发送HTTP请求——>web端接受请求——>容器内部完成请求和转发动作——>将跳转到的那个网页资源返回给客户端 重定向:客户端发送HTTP请求——>web服务器接受请求后发送302状态码以及新的位置给客户端——>客户浏览器发现是302响应,则自动再发送一个新的HTTP请求,请求指向新的地址——>服务器根据此请求寻找资源发...

世俗的博客 1065

MFC使用Websocket通讯介绍和实例(附完整源码)

踩坑点,下载了好几个boost版本编译,经常出问题,后来搜索了好久资料才发现如下评论:WebSocket++0.8.2 has been tested through Boost 1.72。WebSocketpp依赖于boost,因此在使用WebSocketpp前需要编译Boost;所以我们直接下载Boost 1.72的windows版的进行安装,安装完成还需要编译;WebSocketpp也叫WebSocket++;服务编译好之后,使用。

weixin_42530684的博客 1171

Ubuntu下NVIDIA驱动安装全攻略:从报错到完美运行nvidia-smi的完整流程

本文提供了在Ubuntu系统中安装NVIDIA驱动的完整解决方案,重点解决因驱动版本冲突、内核模块未加载或Secure Boot安全启动导致的`nvidia-smi`报错问题。通过彻底清理旧驱动、处理Secure Boot、选择兼容版本并正确安装,最终确保驱动完美运行。

weixin_29196891的博客 364

request ,response,req.setAttribute()应用及含义和个人理解

request ,response,req.setAttribute()应用及含义和个人理解

qq_45840693的博客 2347

AutoSAR RTE调度机制揭秘:从定时器事件到Runnable执行的完整流程

本文深入解析了AutoSAR RTE(运行时环境)的核心调度机制,详细阐述了从定时器事件触发到Runnable(可运行实体)执行的完整流程。通过剖析Rte_Start()函数、OS任务与警报的交互,以及事件驱动循环,揭示了RTE如何作为幕后指挥家,高效、可靠地协调软件组件间的周期性任务执行,是打通AutoSAR应用开发的关键。

weixin_29169899的博客 227

页面跳转的两种方式(转发和重定向)区别

在java web开发的程序员,在使用servlet/jsp的时候,我们必须要知道实现页面跳转的两种方式的区别和联系:即转发和重定向的区别。 1.转发:RequestDispatcher.forward方法 重定向:HttpServletResponse.sendRedirect 2.RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而Ht...

weixin_40473591的博客 2812

WOFOST作物模型(7):6.0.6版本的PCSE使用(多层水分平衡和SNOMIN碳氮模型的集成)

wofost81文件结构如上,其中所需的参数可从github上获取然后input下有两个需要调用的功能函数py文件,需要拖到自己的运行py文件同级目录下在使用土壤模块SNOMIN进行作物生长模型模拟时,需要为土壤剖面的不同层次提供多种输入变量。这些变量通常不随年份变化,因此会统一在土壤文件中定义。本节将说明如何将这些输入变量整合到一个字典中,进而生成SNOMIN能够读取的土壤文件。

所有专家都曾始于新手 638

知识蒸馏⚗️ | YOLOv5知识蒸馏实战篇

YOLOv5知识蒸馏教程

Coding... 9361

页面跳转和重定向的区别?

forward(转发):是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的相应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪里来的,所以它的地址栏中还是原来的地址,转发时并不通知客户机,对象可以存储在请求中,并发给下一个资源使用,并且完全在服务器上面进行;redirect(重定向):是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般...

weixin_30776273的博客 367

linux系统下XDMA驱动的安装与测试问题总结

先看两个常见的问题。一个是驱动安装问题,一个是驱动测试错误;error 512 能识别PCIE的设备,但是The kernel modle installed correctly, but no devices were recognized.

whm128的博客 3805

请求重定向、请求转发、请求包含的特点与区别详解

本文超详细的介绍了请求重定向、请求转发、请求包含的特点和区别,并使用一个小栗子结合丰富的图片文字来让读者更容易理解;并且配合代码、chrome调试工具来讲解三者的同与异。最后,通过一张表格,详细的列举了这三者的区别。

丹丹的后花园 4435

【图像去噪】论文精读:Restormer: Efficient Transformer for High-Resolution Image Restoration

论文题目:Restormer: Efficient Transformer for High-Resolution Image Restoration —— Restormer:用于高分辨率图像恢复的高效变压器高效Transformer模型用于图像恢复!由于卷积神经网络 (CNN) 在从大规模数据中学习可泛化的图像先验方面表现良好,因此这些模型已广泛应用于图像恢复和相关任务。最近,另一类神经架构 Transformer 在自然语言和高级视觉任务中显示出显着的性能提升。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1526

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Servlet之请求转发与重定向区别

前言                        在前面一片文章中笔者实现了一个简单的登录验证的功能,在验证中涉及到了两种页面                  跳转的方式  请求转发 和重定向。那么这两种方式到底有什么区别呢?在这篇文章中,笔者                  将结合实例进行探讨。         请求转发                     在实际的开发中我们

LCore的专栏 3416

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Servlet请求转发与重定向

JavaServlet

weixin_42051619的博客 2710

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jsp页面跳转请求转发和请求重定向的区别

jsp实质上就是一个servlet,在完成多页面跳转的时候有俩种方式1.请求转发2.请求重定向 用servlet来举列子实现(现把三个Servlet在项目的web.xml中初始化和映射哦) 列子思路:写好一个界面,里面有跳转请求转发实现的servlet(图中:ForwardServlet),和请求重定向的servlet(图中:RedirectServlet).通过点击界面的超链接来实现不同的跳转方...

shitou1259的博客 1425

Servlet 页面跳转:转发和重定向

当我们浏览一个网页的时候,从index.jsp页面到xx.jsp页面,这里存在一个跳转的过程,书面名称叫页面重定向。 Servlet实现页面重定向有两种办法:请求跳转和重定向跳转。 请求跳转过程 客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的index.jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的。因此servlet和...

野生码农 1389

servlet之转发与重定向的区别

转发(服务器端跳转):  一次请求 request.getRequestDispatcher("new.jsp").forward(request, response); 重定向(客户端跳转):  两次请求 response.sendRedirect("new.jsp"); new.jsp 转发重定向: 1.转发是在服务器端完成,因此称为服务器端跳转     重定向是在客户端完成

lichuanyuelth的博客 4946

servlet请求转发和重定向区别

我们知道,在servlet中实现页面的跳转有好几种方式 现在从以下几个方面来探究一下比较常用的 请求转发 和 重定向 有什么区别!!! 1. 跳转方式 2. 能否跳转外网 3. 能否访问安全目录中页面 4. 能否获取setAttribute中的值 首先配置好相关资源 新建一个web项目,在WebContent目录下新建 index.jsp , login.jsp ,在WEB-INF目录下新建sa...

wllana的博客 845

什么是重定向?重定向与请求转发的区别?

机制本质地址栏数据传递性能重定向客户端跳转(二次请求)变化需手动处理较低请求转发服务端跳转(内部调度)不变自动共享请求域数据较高选择策略需要 SEO 友好的新 URL → 301 重定向多步骤表单共享数据 → 请求转发支付后防止刷新重复扣款 → 302/307 重定向。

tschen的博客 1635

SpringMVC 重定向和请求转发

servlet的请求转发(forward)和重定向(sendRedirect):请求转发(forward)用法:request.getRequestDispacther(“/test.jsp”).forword(request,response); 过程:客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDi

我的博客 2万+

servlet的请求转发和响应重定向

请求转发(Request Forwarding):请求转发是指服务器端将请求从一个 Servlet 转发到另一个 Servlet、JSP 页面或 HTML 页面,整个过程在服务器内部进行,对于客户端来说,只发送了一次请求,地址栏的 URL 不会发生改变。 响应重定向(Response Redirect):响应重定向是指服务器向客户端发送一个特殊的响应,告诉客户端重新发送一个新的请求到另一个 URL,客户端收到这个响应后,会自动向新的 URL 发送请求,这会导致地址栏的 URL 发生改变

weixin_51395608的博客 1604

Servlet请求转发与重定向的详细介绍

请求的转发,是服务器内部的独立行为,客户端用户是不可见的。出于复杂的业务需求或架构的需要,一个请求进入后,可能需要多个servlet配合完成。请求在一个servlet中完成处理后,就调用RequestDispatcher,将请求转发到下一个servlet,直至最后一个servlet处理完,响应给客户端。

go24k的博客 1696

Servlet中的重定向和转发的区别

在实际的网站开发中,页面的跳转是最常见的。Servlet中的页面跳转可以通过转发或者重定向来实现。 使用response对象提供的sendRedirect()方法,可以将网页重定向到另一个页面。SendRedirect()方法的语法格式: response.sendRedirect(String path)。参数path指的是目标的路径,这个路径可以是相对的,也可以是不同主机的其他URL地址。 ...

weixin_42132959的博客 1331
上一篇: Eclipse创建maven项目及问题
下一篇: spring AOP(Aspect Oriented Programming)
Marvin-Fox
博客等级 码龄11年 190粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值