Javaweb | 转发、重定向

news2025/1/19 3:10:21

在这里插入图片描述

💗wei_shuo的个人主页

💫wei_shuo的学习社区

🌐Hello World !


转发

转发与页面跳转

转发

  • 转发的作用在服务器端,将请求发送给服务器上的其他资源,以共同完成一次请求的处理

页面跳转

  • 使用forward跳转时,是在服务器内部跳转,地址栏不发生变化,属于同一次请求

调用业务逻辑的Servlet中,编写代码:

request.getRequestDispatcher("/目标URL-pattern").forward(request,response);

//跳转转发到login.jsp
req.getRequestDispatcher("login.jsp").forward(req,resp);

数据传递

request作用域

  • 拥有存数据的空间,作用范围是一次请求有效(一次请求可以经过多次转发)
    • 可以将数据存入request后,在一次请求过程中的任何位置进行获取
    • 可以传递数据(基本数据类型,对象,数组,集合等)

存数据

  • 以键值对的形式存储在request作用域中,key为String类型,value为Object类型
  • JSP内置对象session和request都有这个方法
request.setAttribute(key,value);

取数据

  • 通过String类型的key访问Object类型的value
request.getAttribute(key)

存取数据

//request作用域存储数据
req.setAttribute("admins",adminList);

//request作用取数据
request.getAttribute("admins");

重定向

重定向作用在客户端,客户端请求发送给服务器后,服务器响应给客户端一个新的请求地址,客户端重新发送新的请求

重定向与页面跳转

调用业务逻辑的Servlet中,编写代码:

// response.sendRedirect("目标URL");
resp.sendRedirect("index.jsp");		//重定向跳转到index.jsp页面

数据传递

sendRedirect跳转时,地址栏发生改变,代表客户端重新发送请求,属于两次请求

  • response没有作用域,两次request请求中的数据无法共享

传递数据

  • resp.sendRedirect(“URL”);

  • 通过URl的拼接进行数据传递 “网页地址?username=tom”;

  • response传递数据只能是String类型

获取数据

  • request.getParameter(“username”);
//传递数据
resp.sendRedirect("/WebProject_war_exploded/b?username=tom");   //传递数据为String类型,明文传递

//获取数据
String username = req.getParameter("username");

转发与重定向的区别

转发重定向
转发使用的是getRequestDispatcher()方法重定向使用的是sendRedirect()方法
浏览器URL的地址栏不变浏览器URL的地址栏改变
转发是服务器行为重定向是客户端行为
转发是浏览器只做了一次访问请求重定向是浏览器做了至少两次的访问请求
转发2次跳转之间传输的信息不会丢失重定向2次跳转之间传输的信息会丢失(request范围)
重定向的第二个请求一定是GET

转发和重定向总结:

  • 当两个Servlet需要传递数据时,选择forward转发,不建议使用sendRedirect转发,因为sendRedirect是明文传递不安全

Servlet生命周期(四阶段)

Servlet 生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

  • Servlet 初始化后调用 init () 方法
  • Servlet 调用 service() 方法来处理客户端的请求
  • Servlet 销毁前调用 destroy() 方法
  • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的

在这里插入图片描述

  • 实例化

用户第一次访问Servlet是,由容器调用Servlet的构造器创建具体的Servlet对象,也可以启动容器后立刻创建实例,使用如下代码可以设置Servlet是否在服务器启动时就创建

  • 只执行一次
  • 初始化

初始化阶段,init()方法会被调用,这个方法在javax.servlet.Servlet接口中定义,其中,方法以一个ServletConfig类型的对象作为参数

  • init方法只被执行一次
  • 服务

客户端有一个请求时,容器会将请求ServletRequest与响应ServletRequest对象转给Servlet,以参数的形式传给service方法

  • 此方法会执行多次
  • 销毁

Servlet容器(Tomcat)停止或者重新启动(Tomcat)都会引起销毁Servlet对象并调用destroy方法

  • destroy方法执行一次

实例:

package com.woniu.servlet2;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet(value = "/ls")
public class LifeServlet implements Servlet {

    public LifeServlet(){
        System.out.println("1.实例化");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2.初始化");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3.提供服务,接受请求,响应结果");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("4.销毁");
    }
}

  • 重启或停止Tomcat即会输出销毁

在这里插入图片描述


🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞👍收藏⭐️评论📝


在这里插入图片描述

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

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

相关文章

MySQL(七)-日期和时间函数的使用解析

日期和时间函数的使用解析 1 获取当前日期的函数和获取当前时间的函数2 获取当前日期和时间的函数3 UNIX时间戳函数4 返回UTC日期的函数和返 UTC 时间的函数5 获取月份的函数MONTH(date)和 MONTHNAME(date)6 获取星期的函数DAYNAME(d)DAYOFWEEK(d)和WEEKDAY(d)7 获取星期数的函…

芯片封装基本流程及失效分析处理方法

芯片封装 芯片封装的目的在于对芯片进行保护与支撑作用、形成良好的散热与隔绝层、保证芯片的可靠性,使其在应用过程中高效稳定地发挥功效。 工艺流程 硅片减薄 使用物理手段,如磨削、研磨等;或者化学手段,如电化学腐蚀、湿法腐蚀…

2023-04-24:用go语言重写ffmpeg的muxing.c示例。

2023-04-24:用go语言重写ffmpeg的muxing.c示例。 答案2022-04-24: 本程序的大体过程如下: 打开输出文件并写入头部信息。 添加音频和视频流,并为每个流创建 AVCodecContext 对象,根据输入格式设置编码器参数&#x…

springboot 整合itext 实现pdf下载

一 itext介绍 1.1 核心组件介绍 Text中用文本块(Chunk)、短语(Phrase)和段落(paragraph)处理文本。 1.文本块(Chunk)是处理文本的最小单位,有一串带格式(包括字体、颜色、大小)的字符串组成。如以下代码就是产生一个字体为HELVETICA、大小为…

【OAI】UERANSIM容器与OAI核心网分立部署及测试

说明启动核心网:启动基站:功能测试ueransim测试1:通过12.1.1.x ping192.168.70.1ueransim测试2: 通过nr-binder绑定自定义TCP程序传数据到核心网ueransim测试3:多ueransim启动 结论附录基站配置文件:TCP通信…

HCIA-RS实验-路由配置-静态路由缺省路由

在计算机网络中,路由器是实现数据包转发的重要设备。它通过查找路由表中的路由信息,将数据包从源地址转发到目标地址。而静态路由和缺省路由则是路由表中的两种重要信息,下面我们来详细了解一下它们的概念、特点和应用。 目录 简述 一、静态…

Let‘s Learn .NET|通过 Semantic Kernel .NET SDK 管理你的 OpenAI 项目

编辑:Alan Wang 排版:Rani Sun Lets Learn .NET 系列 “Lets Learn .NET” 是面向全球的 .NET 初学者学习系列,旨在通过不同语言,帮助不同地区的开发者掌握最新的 .NET 开发知识与技能。 在 ChatGPT 与 OpenAI 火热的当下&#x…

雪花算法

雪花算法(SnowFlake),是Twitter开源 的分布式ID生成算法 主要是由 64bit 的 long 型生成的全局 ID, 其中分为四个部分: ① 最高1位固定值 0,因为生成的 id 是正整数 ② 后面的41位存储毫秒级时间戳 ③ 第三部分的10位存储机器码…

tp6.1 bingher/ueditor(百度编辑器)(七牛、阿里OSS第三方云)详情图文教程(第二版)

之前做过一版:tp6 bingher/ueditor(百度编辑器)(七牛、阿里OSS第三方云)详情图文教程_我是高手高手高高手的博客-CSDN博客 登录权限是Session,现在系统是Cookie加jwt的Token方式验证 一、修改验证登录权限 修改文件: vendor\bingher\uedito…

R语言 | 向量对象运算

目录 一、数值型的向量对象 1.1 建立规则型的数值向量对象使用序列符号 1.2 简单向量对象的运算 1.3 建立向量对象:seq()函数 1.4 连接向量对象:c()函数 1.5 重复向量对象:rep()函数 1.6 numeric()函数 1.7 程序语句短语跨行的处理 …

阶段式软件研发项目管理工具

下面这个场景是是阶段式软件研发场景,适用于采用瀑布模式开展软件研发的企业或者团队。 创建项目 新建项目时,使用“阶段式软件开发项目”项目模板创建项目。 系统会自动创建10个阶段看板(一个阶段一个看板),1个缺陷…

libgo 流程分析(1)

libgo 基础模块 libgo逻辑结构 libgo主要的功能模块主要包括:调度器( Scheduler )、处理器( Processer )、协程( Task )和一个FastSteadyClock。 其中 Scheduler -> Processer -> Task 三层逻辑结构实现了对协程( Task )的生命周期管理和调度和运行。 sch…

【好书分享】数字信号处理入门宝典(Digital Signal Processing-A Student Guide)

简介 该书作为初学者的入门书籍,葵花宝典级的存在,发行量很少,在市面上很难见到,仅此一本,想要的私信! Digital signal processing (DSP) systems have developed at a rapid pace over the past two dec…

基于DSP+FPGA+ADS1282支持31Bit高精度数据采集方案(二)模拟电路设计

如图 4.1 所示是系统硬件系统的信号框图,数字信号处理板上的主要核心是 两个处理芯片,即 FPGA 和 DSP ,其中 FPGA 主要作用是做 DSP 和外围接口的 桥梁及数据预处理, DSP 做为数据解算核心。 FPGA 通过各种的数据总…

AJAX和JSON

1、什么是AJAX? AJAX(ASynchronous JavaScript And XML)异步的JavaScript 和 XML; 由Jesse James Garrett 在他的文章AJAX:A New Approoch to Web Applications中首次提出。 ajax(Web数据交互方式)_百…

[深度学习][CenterFusion]关于centerfusion训练注意的要点

我参考博客CenterFusion 项目超详细环境搭建步骤及可视化操作_centernet可视化_上班摸不了鱼的博客-CSDN博客本文引用 CenterFusion: Center-based Radar and Camera Fusion for 3D Object Detection,复现此论文中的代码,互相学习。注意:由于…

电影元素主题:《黑客帝国》中的js加密与解密

在《黑客帝国》中,加密和解密是非常重要的概念。加密是将信息转换为看起来毫无意义的数据,以确保只有拥有解密密钥的人才能读取和理解它。在这篇文章中,我们将探讨如何使用JavaScript进行加密和解密,就像黑客们在电影中所做的那样…

2023-04-27:用go语言重写ffmpeg的remuxing.c示例。

2023-04-27:用go语言重写ffmpeg的remuxing.c示例。 答案2023-04-27: ffmpeg的remuxing.c是一个用于将多媒体文件从一种容器格式转换为另一种容器格式的命令行工具。它可以将音频、视频和字幕等元素从源文件中提取出来,并按照用户指定的方式…

Windows 11 本地 php 开发环境搭建:PHP + Apache + MySQL +VSCode 安装和环境配置

目录 前言1. PHP 的下载、安装和配置1.1 下载 php1.2 安装 php1.3 配置 php 系统变量1.4 配置 php.ini 2. Apache 的下载、安装和配置2.1 下载 Apache2.2 安装 Apache2.3 修改配置 Apache2.4 指定服务端口(非必须)2.5 配置系统变量2.6 安装服务2.7 启动服…

在Docker上部署SpringBoot项目(纯步骤)

在Docker上部署SpringBoot项目 在学习中发现了部署的时候总是有各种问题,此文章只有操作步骤没有原理解释,只是用来提醒自己部署步骤 部署总共可以分为五步! 第一步:将SpringBoot项目打包成jar包 这里使用idea的上maven选项打包,点一下就行。…