请求(request)

目录

前言

request概述

request的使用

获取前端传递的数据

实例

请求转发 

特点

语法

实例

实例1 

实例2 【关联实例1】

域对象

组成

作用范围:

生命周期:

使用场景:

使用步骤

存储数据对象

获得数据对象

移除域中的键值对【数据对象】


前言

在之前我们学习到真正处理前后端交互是重写 doGet()方法和doPost()方法。我们有注意到这些方法都有一个共同的参数列表:

HttpServletRequest req, HttpServletResponse resp

request概述

request是Servlet.service()方法的一个参数【在上面指的是req 】,类型为javax.servlet.http.HttpServletRequest。在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法,这说明在service()方法中可以通过request对象来获取请求数据。

因此,我后面讲的request 对象 就是指 req 对象

如下图所示

request的使用

  • 封装了请求头数据;

  • 封装了请求正文数据,如果是GET请求,那么就没有正文;

  • request是一个域对象,可以把它当成Map来添加获取数据;

  • request提供了请求转发和请求包含功能。\

接下来我将针对 如何获得前端数据 ,域对象,请求转发进行详细叙述

获取前端传递的数据

  • 使用getParameter()方法获得前端界面传递给服务器的数据
  • getParameter()方法 是 HttpServletRequest 的继承父类 ServletRequest 的方法

我们注意以下的方法

// 参数为key ,在前端一般是 name 属性值 ,返回值一般是我们输入的值String getParameter(String var1);
// 获得所有存储 key 的集合 EnumerationEnumeration<String> getParameterNames();
//通过传递的key 值 返回的是一个String类型的数组String[] getParameterValues(String var1);

注意第三个方法,常用于复选框 type=checkbox 时,这种情况下 name(key)值都是相同的

重点是 掌握第一个方法的使用

实例

前端写一个简单的用户登录表单,使用getParameter() 获得你输入的内容

请求转发 

首先我先提一下 “ 资源跳转” 我们可以理解为网页的切换。在前端HTML网页,我们使用超链接

<a href="目标网页"></a>来实现跳转。 在后端我们有两种方式完成的网页的切换(资源跳转)

资源跳转有两种形式

  • 请求转发
  • 重定向

本篇博客,我介绍的请求转发的具有应用

特点

  • 1 不能访问外部资源
  • 2浏览器中的urL 是不变的,一直是同一个请求在浏览器看来

语法

1 创建一个 RequestDispatcher 类型的对象 

  • 通过请request对象 调用getRequestDispatcher("url")
 RequestDispatcher rd = request.getRequestDispatcher("/BServlet");

2 调用该对象的forword方法

 rd.forward(request, response);	

为了方便,我们也可以合并写,这个大家都懂

实例

实例1 

刚刚举例 说使用 请求转发无法访问外部资源。我现在通过请求转发的形式,来访问百度试一下

前端代码,一个简单的表单

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>第一个web项目</title><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
</head>
<body>
<div class="container"><!-- Content here --><form action="/login"  method="post"><div class="form-group" ><label for="exampleInputEmail1" >用户账户</label><input type="text" class="form-control" id="exampleInputEmail1" name="username" aria-describedby="emailHelp"><small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small></div><div class="form-group"><label for="exampleInputPassword1">用户密码</label><input type="password" class="form-control" id="exampleInputPassword1" name="password"></div><button type="submit" class="btn btn-primary">Submit</button>
</form>
</div></body>
</html>

后端 重写 doPost方法

@WebServlet("/login")
 @Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {System.out.println("欢迎使用post请求方式查询");req.getRequestDispatcher("https://www.baidu.com/").forward(req, resp);//resp.sendRedirect("https://www.baidu.com/");}

启动服务器,浏览器手动访问 该Servlet 

  • 不管提交的表单是否符合条件,观察是否会跳转到百度

但如果访问本机资源,如BServlet. 是可以的

BServlet 

发现

跳转成功

实例2 【关联实例1】

同时我们也应该注意到,浏览器的搜索栏一直都没有变化

即使在后面使用请求转发,跳转到BServlet,也是如此

域对象

组成
  • PageContext;

  • ServletRequest;

  • HttpSession;

  • ServletContext;

注意:

所有域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据

这里的域对象,我只说ServletRequest类型的request 域对象,同时我们也知道request对象 是 访问Servlet 时,自动创建的。其他的域对象,当具体使用时,再添加到博客中。

特点

  • 可以作为一个仓库,存储数据,当我们要使用时,再从中获取相关数据
作用范围:
  • HttpServletRequest 对象的作用范围是单个 HTTP 请求。
  • 数据只能在同一个请求的生命周期内共享,即从客户端发送请求到服务器处理完请求并返回响应的这段时间内有效。
生命周期:
  • 每次新的请求都会创建一个新的 HttpServletRequest 对象。

  • 当请求处理完毕后,该对象会被销毁。

使用场景:
  • 适用于在同一个请求的不同处理阶段之间传递数据。

  • 例如,在一个请求处理过程中,前端控制器将数据传递给业务逻辑层或视图层。

使用步骤
存储数据对象

调用setAttribute(String name, Object value)方法,存储key-value 键值对形式的对象

  • void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性,
获得数据对象

Object getAttribute(String name):用来获取request中的数据,当前在获取之前需要先去存储才行,例如:String value = (String)request.getAttribute(“xxx”);,获取名为xxx的域属性;

移除域中的键值对【数据对象】

void removeAttribute(String name):用来移除request中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做;

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

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

相关文章

离线安装 Docker-IO:详细步骤指南

离线安装 Docker-IO:详细步骤指南 一、准备工作1.1 下载 Docker 离线安装包1.2 准备安装环境1.3 配置防火墙和 SELinux(可选)二、上传和解压离线安装包2.1 上传安装包2.2 解压安装包三、安装 Docker-IO3.1 移动 Docker 文件到系统目录3.2 配置 Docker 服务3.3 赋予服务文件执…

python图像彩色数字化

效果展示&#xff1a; 目录结构&#xff1a; alphabets.py GENERAL {"simple": "%#*-:. ","complex": "$B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_~<>i!lI;:,\"^. " } # Full list could be found here…

宠物空气净化器推荐2024超详细测评 希喂VS霍尼韦尔谁能胜出

最近有粉丝一直在评论区和后台探讨宠物空气净化器是不是智商税的问题&#xff0c;有人认为宠物空气净化器肯定不是智商税&#xff0c;有些人认为将其购回家就是个没用的东西&#xff0c;还占地方&#xff0c;双方各有自己的观点。 其实宠物空气净化器和普通的空气净化器是有很大…

屏幕分辨率|尺寸|颜色深度指纹

一、前端通过window.screen接口获取屏幕分辨率 尺寸 颜色深度&#xff0c;横屏竖屏信息。 二、window.screen c接口实现&#xff1a; 1、third_party\blink\renderer\core\frame\screen.idl // https://drafts.csswg.org/cssom-view/#the-screen-interface[ExposedWindow ] …

3mf 格式详解,javascript加载导出3mf文件示例

3MF 格式详解 3MF&#xff08;3D Manufacturing Format&#xff09;是一种开放标准的文件格式&#xff0c;专门用于三维制造和打印。3MF 格式旨在解决 STL 格式的局限性&#xff0c;提供更丰富和灵活的数据表示。3MF 文件是一种 ZIP 文件&#xff0c;其中包含了描述三维模型的…

[OS] A4-前菜介绍

从你的描述来看&#xff0c;这段话是给你的一些 预备知识 和 mkfs工具的使用 提示&#xff0c;帮助你了解如何构建和管理文件系统&#xff0c;特别是关于 xv6 文件系统的一些基本操作。 我会通过比喻和通俗化的方式逐步解释&#xff1a; 预备知识&#xff1a;xv6 文件系统的基…

Android 14之HIDL转AIDL通信

Android 14之HIDL转AIDL通信 1、interface接口1.1 接口变更1.2 生成hidl2aidl工具1.3 执行hidl2aidl指令1.4 修改aidl的Android.bp文件1.5 创建路径1.6 拷贝生成的aidl到1和current1.7 更新与冻结版本1.8 编译模块接口 2、服务端代码适配hal代码修改2.1 修改Android.bp的hidl依…

数据结构代码合集

一、排序算法 1、插入排序 1.1 直接插入排序 void InsertSort(int A[],int n){int temp,i,j; for( i 1;i<n;i){ //外循环&#xff0c;每个元素都要进行排序 if(A[i-1]>A[i]){ //前面元素比后面元素大的话 temp A[i];for( j i-1; A[j]>temp && j>0…

《硬件架构的艺术》笔记(九):电磁兼容性能设计指南

简介 电子线路易于接收来自其他发射器的辐射信号&#xff0c;这些EMI&#xff08;电磁干扰&#xff09;使得设备内毗邻的元件不能同时工作。这就有必要进行电磁兼容设计以避免系统内有害的电磁干扰。 确保设备不产生多余的辐射&#xff0c;设备也不易受到射频辐射的干扰&…

Anaconda安装(2024最新版)

安装新的anaconda需要卸载干净上一个版本的anaconda&#xff0c;不然可能会在新版本安装过程或者后续使用过程中出错&#xff0c;完全卸载干净anaconda的方法&#xff0c;可以参考我的博客&#xff01; 第一步&#xff1a;下载anaconda安装包 官网&#xff1a;Anaconda | The O…

【SpringBoot问题】IDEA中用Service窗口展示所有服务及端口的办法

1、调出Service窗口 打开View→Tool Windows→Service&#xff0c;即可显示。 2、正常情况应该已经出现SpringBoot&#xff0c;如下图请继续第三步 3、配置Service窗口的项目启动类型。微服务一般是Springboot类型。所以这里需要选择一下。 点击最后一个号&#xff0c;点击Ru…

力扣,88. 合并两个有序数组

我的思路是先单独对 数组2 做快排&#xff0c;但是快排的最差性能是 o(n^2) &#xff0c; 题目要求性能是 o( mn) 。 哦哦&#xff0c;不对不对&#xff0c; 它这数组给的就是有序的了&#xff1f; 麻蛋&#xff0c; 不需要排序了。 那就是 一开始最简单的思路&#xff0c; 直接…

Jmeter测试工具的安装和使用,mac版本,jmeter版本5.2.1

Jmeter测试工具的安装和使用JSON格式请求 一、安装1、安装jdk包和设置java环境2、去官网下载Jmeter3、解压后&#xff0c;打开mac终端&#xff0c;进入apache-jmeter的bin文件开启jmeter 二、使用jmeter1、添加线程2、添加HTTP请求3、配置请求的协议、IP地址、端口号、请求方法…

Cookie跨域

跨域&#xff1a;跨域名&#xff08;IP&#xff09; 跨域的目的是共享Cookie。 session操作http协议&#xff0c;每次既要request&#xff0c;也要response&#xff0c;cookie在创建的时候会产生一个字符串然后随着response返回。 全网站的各个页面都会带着登陆的时候的cookie …

多项式加法运算的链表实现

多项式加法运算的链表实现 主要思路&#xff1a;相同指数的项系数相加&#xff0c;其余部分进行拷贝。 两个多项式分别使用单链表实现&#xff0c;链表的每一个节点的结构为&#xff1a;系数、指数、下一个节点的地址。 链表节点按照指数递减顺序排列。 一句话&#xff1a;…

【N 卡 掉驱动 Driver 】NVML ERROR: Driver Not Loaded

问题描述 输入 nvitop 时报错 NVML ERROR: Driver Not Loaded&#xff0c;重启问题依旧存在。 问题解决-重新下载驱动 进入官网选择合适自己的驱动版本 https://www.nvidia.cn/geforce/drivers/ 根据个人情况搜索后&#xff0c;选择最新的 Driver 进行下载&#xff0c;如果希…

杭州网世一站式网络解决方案,助力安邦护卫网络升级改造

随着信息技术的不断进步&#xff0c;浙江台州安邦护卫有限公司现有的网络设备已无法满足其日益增长的业务需求。网络性能瓶颈、安全隐患和管理复杂性等问题逐渐凸显&#xff0c;严重影响了企业的运营效率和服务质量。为了解决这些问题&#xff0c;浙江台州安邦护卫有限公司决定…

IIC和SPI的时序图

SCL的变化快慢决定了通信速率&#xff0c;当SCL为低电平的时候&#xff0c;无论SDA是1还是0都不识别&#xff1a; ACK应答&#xff1a;当从设备为低电平的时候识别为从设备有应答&#xff1a; 谁接收&#xff0c;谁应答&#xff1a; 起始位和停止位&#xff1a; IIC的时序图&am…

C底层 函数栈帧

文章目录 一&#xff0c;什么是寄存器 二&#xff0c;栈和帧 前言 我们在学习c语言程序的时候&#xff0c;是不是有很多的疑问&#xff0c;如 1&#xff0c;为什么形参不可以改变实参 2&#xff0c;为什么我们编写程序的时候会出现烫烫烫......这个乱码 3&#xff0c;那些局…

全桥LLC变换器原理及MATLAB仿真模型

“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 主电路拓扑 全桥LLC 谐振变换器主电路拓扑结构图。图中S1 &#xff5e; S4为功率开关管&#xff0c; D1 &#xff5e; D4为功率开关管的体二极管&#xff0c; C1 &#xff5e; C4 为功率开关管的寄生电容。谐振电感r…