转发以及重定向

转发 && 重定向

作用

在Servlet中实现页面的跳转有两种方式:转发和重定向

页面的跳转:转发

1.转发的原理 2.转发的方法 3.疑问 能否在FirstServlet中保存值到请求域中,在另一个SecondServlet中打印出来?

什么是转发

概念:由服务器端进行的页面跳转

原理图

转发的方法

1.得到转发器:RequestDispatcher request.getRequestDispatcher("/跳转的地址") ——》参数是要跳转的地址 2.实现转发:转发器对象.forward(request,response) 我们通常写成一句话: request.getRequestDispatcher("/跳转的地址").forward(request,response);

转发的案例

需求

实现从FirstServlet中转发到SecondServlet

步骤

FirstServlet向请求域中添加了一个键和值,转发给SecondServlet SecondServlet就从请求域中取出键和值,打印到浏览器上。

效果

 

代码

FirstServlet

package com.octuple.servlet;
​
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
​
/**与请求域相关的方法*/
@WebServlet(name = "FirstServlet", urlPatterns = "/first")
public class FirstServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();out.print("这是First<br/>");//向请求域中添加键和值request.setAttribute("msg","你好");String msg = (String) request.getAttribute("name");//从请求域中取出值out.print("消息:" + msg + "<br/>");out.print("<hr/>");
​//从请求域中取出值,直接输出Object对象out.print("消息:" + request.getAttribute("msg") + "<br/>");
​System.out.println("这是first");//开始转发,参数是:要跳转到的地址request.getRequestDispatcher("/second").forward(request, response);}
​protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}

SecondServlet

package com.octuple.servlet;
​
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
​
//从请求域中取出值
@WebServlet(name = "SecondServlet", urlPatterns = "/second")
public class SecondServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();out.print("这是Second,从请求域中取出First中的值:" + request.getAttribute("msg"));}
​protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}
​

转发的特点

1.地址栏不发生变化,显示的是上一个页面的地址

2.请求次数:只有1次请求

3.根目录:http://localhost:8080/项目地址/,包含了项目的访问地址

4.请求域中数据不会丢失

5.转发只能访问当前服务器下的资源

页面的跳转:重定向

1.重定向原理 2.重定向的方法

什么是重定向

概念:由浏览器端进行的页面跳转

原理图

重定向方法

1.设置状态码为302 response.setStatus(302); 2.设置响应头 response.setHeader("localtion","/跳转的地址"); 3.我们通常写成一句话: response.sendRedirect("/跳转的地址");

重定向的案例

需求

实现从FirstServlet中转发到SecondServlet

步骤

在FirstServlet中向请求域中添加键和值 使用重定向到SecondServlet,在SecondServlet中看能否取出请求域的值

效果

 

代码

FirstServlet

package com.octuple.servlet;
​
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
​
/**与请求域相关的方法*/
@WebServlet(name = "FirstServlet**", urlPatterns = "/first")
public class FirstServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();out.print("这是First<br/>");//向请求域中添加键和值request.setAttribute("msg","你好");String msg = (String) request.getAttribute("msg");//从请求域中取出值out.print("消息:" + msg + "<br/>");
​//从请求域中取出值,直接输出Object对象out.print("消息:" + request.getAttribute("msg") + "<br/>");
​System.out.println("这是First");//开始转发,参数是:要跳转到的地址//request.getRequestDispatcher("/second").forward(request, response);
​//使用重定向response.sendRedirect("/second");}
​protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}
​

SecondServlet

package com.octuple.servlet;
​
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
​
//从请求域中取出值
@WebServlet(name = "SecondServlet", urlPatterns = "/second")
public class SecondServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();out.print("这是Second,从请求域中取出First中的值:" + request.getAttribute("msg"));}
​protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}
​

重定向的特点

1.地址栏:显示新的地址

2.请求次数:2次

3.根目录:http://localhost:8080/ 没有项目的名字【重定向不需要写项目的名字】

4.请求域中的数据会丢失,因为是2次请求

5.重定向可以访问其他站点(服务器)的资源

总结:

1.问:什么时候使用转发,什么时候使用重定向?

如果要保留请求域中的数据,使用转发,否则使用重定向。

2.以后访问数据库,增删改使用重定向,查询使用转发。

问:转发或重定向后续的代码是否还会运行?

无论转发或重定向后续的代码都会执行

3.具体分析:

①请求转发:在地址栏处请求地址没有发生改变,还是初次发出请求的地址

请求重定向:在地址栏处请求地址发生改变

②请求转发:在最终的servlet中,request对象和中转的request是同一个对象

请求重定向:在最终的servlet中,若quest对象和中转的request不是同一个对象。

应用场景:如果在进行查询操作的时候,我们应该使用转发操作,速度快

如果在进行增、删、改操作的时候,我们应该使用重定向操作,如果此种情况采用转发进行操作,在操作前后URL地址栏信息不发生改变,仍然是修改的控制器,如果此时再对当前页面刷新的话,就会重新发送一次请求对数据进行修改,这也就是有的人在刷新一次页面就增加一条数据的原因。

后台接口中是否有return语句分析

通过以上分析得知,我们在增、删、改操作中使用重定向【因为此时我们需要保存请求域中的数据】,在查询操作中我们使用转发操作【因为此时我们不需要保存请求域中的数据】,那么由此分析后台接口中增、删、改操作并不需要有返回值,所以没有return语句,进而言之,查询操作中需要有返回值,所以使用return语句

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从匿名管道谈重定向技术

匿名管道与重定向技术 正文 首先我们得理解一个定义&#xff1a;重定向何谓重定向&#xff1f;可以先字面理解为&#xff1a;重新决定方向!在控制台程序中&#xff0c;将标准的输入、输出句柄用管道的读、写句柄替换,而控制台程序本身并不知道它的输入、输出句柄已发生了变化…

一文了解转发与重定向

一文了解转发与重定向 &#x1f3e0;个人主页&#xff1a;不会写代码的满满 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是满满&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; 目前状况&#x1f389;&#xff1a;开学即将大三&#xff0c;目…

转发与重定向

转发是服务器行为&#xff0c;重定向是客户端行为。转发耗时比重定向少。 转发——>客户浏览器发送HTTP请求——>web服务器接受请求——>调用内部一个方法在容器内部完成请求处理和转发动作——>再将转发跳转到的那个网页资源返回给客户&#xff1b; 转发只能在同…

将您重定向的次数过多什么意思_Linux重定向

通常说所重定向便是将命令结果如查询结果重定向到一个文件中,通常用在一些命令结果较多无法完全显示完,可以重定向到一个文件,在文件中查看。 重定向分为输入重定向<和输出重定向> 一、>和>> 区别:>是重定向到一个文件;>>追加内容到一个文件 如果…

API接口案例,淘宝商品详情数据采集

item_get-获得商品详情 API接口工具 请求参数 请求参数&#xff1a;num_iid520813250866&is_promotion1参数说明&#xff1a;num_iid:淘宝商品ID is_promotion:是否获取取促销价 Request address: https://api-gw.onebound.cn/taobao/item_get_app/?keyt& &num…

API数据接口该怎么对接

随着互联网和移动互联网的发展&#xff0c;API&#xff08;Application Programming Interface&#xff09;接口的作用越来越重要。API接口将各种平台相互连接&#xff0c;使得不同系统的信息可以互相获取和使用&#xff0c;大大提高了系统的互操作性和开发效率。本文将介绍如何…

如何实现高质量的系统数据对接/API接口整合集成方案?

我们建立一个数字化系统可能会有跟别的系统进行数据对接的需要&#xff0c;而别人的数字化系统也有可能需要跟我们的系统进行数据对接&#xff0c;也可能我们开发了不同的网站&#xff0c;网站小应用之间需要进行数据对接。那么数据对接应该如何操作呢&#xff1f;怎么才能更好…

以聚合数据为例,详细说明API接口使用方法

前言 以聚合数据为例&#xff0c;详细说明API接口使用细节方法&#xff0c;说明清楚如何使用API接口的每个步骤&#xff0c;防止以后忘记没地方找。 API网站注册后最重要的个人数据是请求key值&#xff0c;每个不同的数据都有与之对应的请求key值&#xff0c;这里我拿新…

举例说明如何使用【聚合数据】的API接口

更新&#xff1a;这篇文章写于2016年8月&#xff0c;现在的聚合数据可能有些变化&#xff0c;申请使用的方式相应有所改变&#xff0c;所以本文只作参考. ________________________________________________________________________________________________________________…

企业微信增加企业内部应用入口的超链接

背景 2020年初,新冠疫情导致很多企业远程办公,接到许多方便员工移动办公的开发需求.比如最近接到一个任务,是需要再企业微信的工作台台添加一个超链接,连接到企业已经有的一个web项目上去.并且能够携带用户信息进行访问. 放超链接很简单,复杂的是如何携带用户信息到这个超链接…

企业微信url及生成授权链接

企业微信第三方开发课程 14-18 一、简介 这里主要分为四部分&#xff0c;验证 url 有效性、完成用户的测试安装、获取生成预授权码、生成授权安装链接。这几部就可以完成第三方有用的回调和安装&#xff0c;这也是后续功能开发的基础。 二、Get 请求验证 URL 有效性 1.为什…

对接企业微信3:网页授权登录

构造网页授权链接 如果企业需要在打开的网页里面携带用户的身份信息&#xff0c;第一步需要构造如下的链接来获取code参数&#xff1a; https://open.weixin.qq.com/connect/oauth2/authorize?appidCORPID&redirect_uriREDIRECT_URI&response_typecode&scopesnsa…

企业微信-构造网页授权链接实现登录

文档地址&#xff1a;构造网页授权链接 - 接口文档 - 企业微信开发者中心 注意&#xff1a; 1.redirect_uri&#xff1a;回调链接地址&#xff0c;需要使用urlencode对链接进行处理 2.scope&#xff1a;如果需要获取成员的头像、手机号等信息需要设为snsapi_privateinfo 例如前…

windows浏览器无法访问虚拟机上Linux部署的consul

一、问题&#xff1a; 查看consul服务 是启动的&#xff0c;但是就是无法访问。 二、解决步骤&#xff1a; 1、查看防火墙是否关闭或者添加接口映射 关闭防火墙&#xff08;具体看应用场景&#xff0c;请不要盲目的操作&#xff09; systemctl stop firewalld 查看防火墙状…

插件部署环境

插件部署环境 前言 按照前面的文章已经安装好了同步工具&#xff0c;那么在使用之前&#xff0c;我们需要为同步工具做一些准备工作&#xff0c;插件才能正常使用 准备工作 准备工作主要两点&#xff0c;许可&#xff0c;金蝶环境配置 许可试用 插件一共提供四种许可方式…

RabbiteMQ 部署到虚拟机的 Linux 上,加入插件后,无法通过浏览器访问 RabbiteMQ 控制台

解决办法&#xff1a; 可以通过安装 docker 容器&#xff0c;在 docker 容器上面安装 RabbiteMQ 解决。 具体操作如下&#xff1a; 1.先安装 docker 安装yum工具 yum install -y yum-utils \device-mapper-persistent-data \lvm2 --skip-broken更新本地镜像源&#xff1a; …

量化交易入门--写第一个量化程序

一位量化交易程序员手把手教你入门 上篇介绍完了如何配置量化交易所需要的环境&#xff0c;这篇继续介绍如何写第一个量化交易程序。 MT4提供的sample程序只有基本的功能&#xff0c;不能够自动交易。 我们写一个自动交易程序&#xff0c;逻辑如下 下一个多单 检查当前盈…

《PyTorch深度学习实践》

【《PyTorch深度学习实践》完结合集】 https://www.bilibili.com/video/BV1Y7411d7Ys/?share_sourcecopy_web&vd_source684aec3a42a2952834511895317ee34b 链接&#xff1a;https://pan.baidu.com/s/1vZ27gKp8Pl-qICn_p2PaSw 提取码&#xff1a;cxe4 一、&#xff08;学习…

C++_开发图形界面_EasyX(笔记)

笔记目录 前言一、为什么使用EasyX二、搭建EasyX图形开发环境三、测试EasyX图形开发环境1.绘制圆2.用ChatGpt测试EasyX的Y轴朝向 三、图形开发进阶四、黑客攻击系统界面总结 前言 Rock老师 ; C ; EasyX ; 笔记 一、为什么使用EasyX 1.辅助学习和提高C的工具 2.开发简单的图形…

吴恩达机器学习作业二Python实现

作业二 文章目录&#xff08;嫌墨迹可以直接点击目录跳转到源代码查看&#xff09; 文章目录 作业二第一题1.1 数据可视化代码讲解结果 1.2 实现1.2.1 热身运动 sigmoid 函数代码 1.2.2 损失函数和梯度代码结果思路 1.2.3 手动梯度下降尝试学习参数代码结果总结 1.2.3 使用fm…