请求的转发和重定向

news/2025/3/6 2:14:21/

RequestDispatcher接口实现转发:

jsp1上链接到Servlet,Servlet再转发(关键在这里怎么实现转发??)

演示index.html页面---->Servlet1(转发到)------>Servlet2

实现转发流程

1.用HttpServletRequest的getRequestDispatcher(path)方法,path就是指定转发到的目标地址

RequestDispatcher rd = request.getRequestDispatcher("/servlet2");

2.getRequestDispatcher方法返回的RequestDispatcher对象调用forword方法实现最终的转发动作。

rd.forward(request, response);

演示index.html页面---->Servlet1(重定向到)------>Servlet2

sendRedirect接口实现重定向:

直接HttpServletResponse调用sendRedirect(重定向的目标地址)。

response.sendRedirect("servlet2");

转发和重定向的区别:

1.请求的转发是一种服务器行为,转发时request对象会被保存,也就是说被转发到的另外一个servlet或其他资源中的request对象,跟请求转发的request是同一个对象。又由于这个过程是服务端行为,所以客户端的地址栏不会发生改变。从始到终请求只有一次,一个!

2.请求的重定向是一种客户端行为,实际上期间发生的是两次请求,前一次的请求request对象不会作保存,两个Servlet里的reuqest对象不是同一个,且地址栏地址会发生改变。

jsp页面也是一样的,演示:a.jsp链接到->b.jsp转发到->c.jsp(request保留)

3.转发只能转发到Web应用内部的资源,重定向可以到任何资源。

4.转发中地址用“/”表示WEB应用的根目录,重定向中地址“/”是站点的根目录。

index01.jsp:

<a href="/requestDispatcher/servlet1">跳转到Servlet01</a>

index02.jsp:

<h2>此页面为index02.jsp</h2>

index03.jsp:

<h2>[重定向:]这里是index03.jsp页面</h2>

Servlet1:

public class Servlet01 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//转发:getRequestDispatcher("转发地址").forward(request, response)request.getRequestDispatcher("/servlet2").forward(request, response);//转发到servlet2//重定向:
//		response.sendRedirect("/requestDispatcher/index03.jsp");}
}

Servlet2:

public class Servlet02 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置浏览器响应字符集response.setHeader("Content-type", "text/html;charset=UTF-8");response.getWriter().print("[转发:]本Servlet是Servlet02");}
}

 


http://www.ppmy.cn/news/1143922.html

相关文章

运行vue create vue-demo报错:无法加载文件,因为在此系统上禁止运行脚本

运行vue create vue-demo报错&#xff1a;无法加载文件 C:\Users\sun\AppData\Roaming\nvm\nodejs\vue.ps1,因为在此系统上禁止运行脚本。 因为win中段禁止脚本运行&#xff0c;需要调整运行策略&#xff0c;打开PowerShell&#xff08;只能PowerShell&#xff09;&#xff0c…

【Leetcode】189. 轮转数组

一、题目 1、题目描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例1: 输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1…

Spark 9:Spark 新特性

Spark 3.0 新特性 Adaptive Query Execution 自适应查询(SparkSQL) 由于缺乏或者不准确的数据统计信息(元数据)和对成本的错误估算(执行计划调度)导致生成的初始执行计划不理想&#xff0c;在Spark3.x版本提供Adaptive Query Execution自适应查询技术&#xff0c;通过在”运行…

2.1 Qemu系统模拟:简介

目录 1 后端/加速器2 特性简介3 运行 1 后端/加速器 系统模拟主要用于在host设备上运行guest OSQEMU支持多种hypervisors,同时也支持JIT模拟方案&#xff08;TCG&#xff09; 例如从上表我们可以看出&#xff0c;运行在x86硬件上的Linux系统支持KVM,Xen,TCG 2 特性简介 提供…

浅谈分散式存储项目MEMO

Memo本质上是互联网项目&#xff0c;应用了一些区块链技术而已&#xff0c;或者叫做包了层区块链皮的互联网项目。 最开始对标Filcoin&#xff0c;后来发现Filcoin也有问题&#xff0c;分布式存储解决方案并不完美&#xff0c;抑或者是自己团队的研发能力无法与IPFS团队PK&…

解决Playwright无法登录Google账号的问题

文章目录 问题描述解决问题免费登录生成代码问题描述 当使用playwright需要登入google帐号的时候,有可能会出现下面的情况:无法登录,提示浏览器不安全(因为我们是脚本使用) 【Python自学笔记】微软自动化测试工具playwright,微软版selenium解决问题 解决上面这个无法登入…

【Linux】基本指令-入门级文件操作(一)

目录 前言 ⭕linux的树状文件结构 ⭕绝对路径和相对路径 ⭕当前路径和上级路径 ⭕隐藏文件 基本指令&#xff08;重点&#xff09; 1 pwd 指令 2 mkdir 指令 3 touch 指令 4 ls 指令 4.1 ls只加选项不加文件/目录名&#xff0c;默认查看当前目录下的文件 4.1.1 ls -a…

Spring:处理@Autowired和@Value注解的BeanPostProcessor

AutowiredAnnotationBeanPostProcessor,它实现了MergedBeanDefinitionPostProcessor,因此会调用postProcessMergedBeanDefinition方法。 它实现了InstantiationAwareBeanPostProcessor,因此在属性注入时会调用postProcessPropertyValues方法 如果Autowired注解按类型找到了大…