Javaweb 请求转发和请求重定向

简介: 1.请求转发和请求重定向区别请求转发和请求重定向主要区别,包含以下 5 点:定义不同请求方不同数据共享不同最终 URL 地址不同代码实现不同定义不同:🙌


1.请求转发和请求重定向区别


请求转发和请求重定向主要区别,包含以下 5 点:


定义不同

请求方不同

数据共享不同

最终 URL 地址不同

代码实现不同

定义不同:🙌


请求转发:当服务器端收到一个客户端的请求之后,会先将请求转发给目标地址,再将目标地址返回的结果转发给客户端。而客户端对于这一切毫无感知的。


请求重定向指的是服务器端接收到客户端的请求之后,会给客户端返回了一个临时响应头,这个临时响应头中记录了客户端需要再次发送请求(重定向)的 URL 地址,客户端再收到了地址之后,会将请求发送到新的地址上,这就是请求重定向。


请求方不同:🧨


请求转发是服务器端的行为,服务器端代替客户端发送请求,并将结果返回给客户端;而请求重定向是客户端的行为


状态码:请求转发:307


重定向:302



数据共享不同:🧇


请求转发是服务器端实现的,所以整个执行流程中,客户端(浏览器端)只需要发送一次请求,因此整个交互过程中使用的都是同一个 Request 请求对象和一个 Response 响应对象,所以整个请求过程中,请求和返回的数据是共享的;而请求重定向客户端发送两次完全不同的请求,所以两次请求中的数据是不同的


最终 URL 地址不同:👌


请求转发是服务器端代为请求,再将结果返回给客户端的,所以整个请求的过程中 URL 地址是不变的;而请求重定向URL是会改变的


2.服务端内部转发案例


先写一个转发源servlet:


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * 服务端内部转发案例
 */
public class ServerSideForwarding extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("服务端内部转发...");
        req.getRequestDispatcher("ssfp").forward(req,resp);
    }
}


req.getRequestDispatcher("ssfp").forward(req,resp);这句话是转发给url为ssfp的servlet执行🍔

再写一个目的servlet:


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * 服务端内部转发目的地址
 */
public class ServerSideForwardingPurpose extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("我是服务端内部转发目的地址...");
    }
}


xml文件配置如下:


<servlet>
    <servlet-name>ServerSideForwarding</servlet-name>
    <servlet-class>servlets.ServerSideForwarding</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ServerSideForwarding</servlet-name>
    <url-pattern>/ssf</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>ServerSideForwardingPurpose</servlet-name>
    <servlet-class>servlets.ServerSideForwardingPurpose</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ServerSideForwardingPurpose</servlet-name>
    <url-pattern>/ssfp</url-pattern>
</servlet-mapping>


此时我们若访问url:ssp,控制台会输出:


服务端内部转发...
我是服务端内部转发目的地址...


成功实现服务端内部转发操作!🤪


3.客户端重定向案例


客户端重定向的例子很简单,只需要使用如下语句即可:


// 客户端重定向,重定向到路径ssfp
resp.sendRedirect("/ssfp");
相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
2月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
412 37
|
1月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
32 2
|
1月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
48 5
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
1月前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
63 1
|
2月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
101 2
|
2月前
|
JSON 前端开发 JavaScript
java中post请求调用下载文件接口浏览器未弹窗而是返回一堆json,为啥
客户端调接口需要返回另存为弹窗,下载文件,但是遇到的问题是接口调用成功且不报错,浏览器F12查看居然返回一堆json,而没有另存为弹窗; > 正确的效果应该是:接口调用成功且浏览器F12不返回任何json,而是弹窗另存为窗口,直接保存文件即可。
142 2
|
1月前
|
小程序 Java
小程序通过get请求提交数据到java后台
小程序通过get请求提交数据到java后台
29 0
|
2月前
|
SQL JSON JavaScript
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
Vue 指令、生命周期、this和$、vue脚手架进行模块化开发/ElementUI框架、综合案例,element商品列表展示增删改查
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
|
3月前
|
数据采集 人工智能 监控
【Azure 应用程序见解】Application Insights Java Agent 3.1.0的使用实验,通过修改单个URL的采样率来减少请求及依赖项的数据采集
【Azure 应用程序见解】Application Insights Java Agent 3.1.0的使用实验,通过修改单个URL的采样率来减少请求及依赖项的数据采集