请求(request)

news2025/1/8 6:03:48

目录

前言

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 的集合 Enumeration

    Enumeration<String> getParameterNames();
//通过传递的key 值 返回的是一个String类型的数组

    String[] getParameterValues(String var1);

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

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

实例

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

请求转发 

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

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

资源跳转有两种形式

  • 请求转发
  • 重定向

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

特点

  • 1 不能访问外部资源
  • 2浏览器中的urL 是不变的,一直是同一个请求在浏览器看来
  • 3表单最好不要使用请求转发

语法

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")
 @Override
    protected 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 对象。

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

  • request域只在同一请求内有效,如果你想要在其他请求使用,是无效的

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

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

使用步骤
存储数据对象

调用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.coloradmin.cn/o/2251336.html

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

相关文章

推荐学习笔记:矩阵补充和矩阵分解

参考&#xff1a; 召回 fun-rec/docs/ch02/ch2.1/ch2.1.1/mf.md at master datawhalechina/fun-rec GitHub 业务 隐语义模型与矩阵分解 协同过滤算法的特点&#xff1a; 协同过滤算法的特点就是完全没有利用到物品本身或者是用户自身的属性&#xff0c; 仅仅利用了用户与…

构造函数与析构函数错题汇总

构造函数不能定义返回类型&#xff0c;也没有返回类型。 堆、栈、静态存储区。栈上的对象main函数结束就释放&#xff0c;堆上的需要手动释放&#xff0c;静态存储区的在所在作用域的程序结束时释放。这里static在main函数内&#xff0c;是局部变量&#xff0c;所以作用域为…

[免费]SpringBoot+Vue景区订票(购票)系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue大景区订票(购票)系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue景区订票(购票)系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 现代经济快节奏发展以及不断完善升级的信息…

fastdds:编译、安装并运行helloworld

fastdds安装可以参考官方文档&#xff1a; 3. Linux installation from sources — Fast DDS 3.1.0 documentation 从INSTALLATION MANUAL这一节可以看出来&#xff0c;fastdds支持的操作系统包括linux、windows、qnx、MAC OS。本文记录通过源码和cmake的方式来安装fastdds的…

HTTP 探秘之旅:从入门到未来

文章目录 导言&#xff1a;目录&#xff1a;第一篇&#xff1a;HTTP&#xff0c;互联网的“快递员”第二篇&#xff1a;从点开网页到看到内容&#xff0c;HTTP 究竟做了什么&#xff1f;第三篇&#xff1a;HTTP 的烦恼与进化史第四篇&#xff1a;HTTP 的铠甲——HTTPS 的故事第…

【软件项目测试文档大全】软件测试方案,验收测试计划,验收测试报告,测试用例,集成测试,测试规程和指南,等保测试(Word原件)

1. 引言 1.1. 编写目的 1.2. 项目背景 1.3. 读者对象 1.4. 参考资料 1.5. 术语与缩略语 2. 测试策略 2.1. 测试完成标准 2.2. 测试类型 2.2.1. 功能测试 2.2.2. 性能测试 2.2.3. 安全性与访问控制测试 2.3. 测试工具 3. 测试技术 4. 测试资源 4.1. 人员安排 4.…

前端拿不到 response 响应流返回的 header 例如 Content-Disposition 等

同步发布于我的网站 &#x1f680; 背景介绍默认可访问的响应头问题分析解决方案 示例 前端代码示例注意事项总结 背景介绍 在进行前后端交互时&#xff0c;前端有时需要读取服务器返回的特定响应头&#xff08;如 Content-Disposition&#xff09;&#xff0c;以便根据这些…

SQL进阶——C++与SQL进阶实践

在C开发中&#xff0c;SQL数据库的操作是开发者常见的任务之一。虽然前面我们已经介绍了如何在C中通过数据库连接执行基本的SQL查询&#xff0c;但在实际项目中&#xff0c;我们通常需要更加复杂和高效的数据库操作。存储过程与函数的调用、复杂SQL查询的编写、以及动态构造SQL…

论文概览 |《Urban Analytics and City Science》2023.05 Vol.50 Issue.4

本次给大家整理的是《Environment and Planning B: Urban Analytics and City Science》杂志2023年5月第50卷第4期的论文的题目和摘要&#xff0c;一共包括19篇SCI论文&#xff01; 论文1 Data analytics and sustainable urban development in global cities 全球城市的数据…

HarmonyOS4+NEXT星河版入门与项目实战(24)------Stage模型

文章目录 1、概念2、配置文件1、全局配置文件2、模块配置文件3、UIAbility生命周期1、图文归纳2、生命周期方法入口4、页面生命周期1、图文描述1、概念 2、配置文件 1、全局配置文件 2、模块配置文件 统一修改配置文件技巧:点击任意json 文件,选择 Open editor ,在显示的列表…

kubernetes——part3-2 集群声明式文件YAML

一、YAML介绍 YAML 的意思是&#xff1a;仍是一种标记语言&#xff0c;但为了强调这种语言以数据做为中心&#xff0c;而不是以标记语言为重点。是一个可读性高&#xff0c;用来表达数据序列的格式。 二、基本语法 1.低版本缩进时不允许使用Tab键&#xff0c;只允许使用空格…

告别 Kafka,拥抱 Databend:构建高效低成本的用户行为分析体系

用户行为数据埋点指标是数据仓库中不可或缺的重要数据源之一&#xff0c;同时也是企业最宝贵的资产之一。通常情况下&#xff0c;用户行为数据分析包含两大数据源&#xff1a;用户行为分析日志和上游关系型数据库&#xff08;如 MySQL&#xff09;。基于这些数据&#xff0c;企…

产出一篇论文的各个步骤

产出一篇论文的各个步骤 建议–实用 如何看论文&#xff1a; &#xff08;前提&#xff1a;优秀论文&#xff0c;如顶会论文/杂志&#xff0c;了解顶会是那些&#xff0c;召开时间是什么时候&#xff09; 创新点 记录下来说过的别的文章/方法的缺陷 – 看文章就是看优点/指出…

AtomicIntegerFieldUpdater能否降低内存

1. 代码如下&#xff1a; import java.util.LinkedList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger;public class AtomicIntegerTest {final AtomicInteger startPosition new AtomicInteger(0);final AtomicInteger wrotePosition new Atom…

ClickHouse数据迁移(远程)

一、背景 公司最近买了新的服务器&#xff0c;旧的服务器上面安装了ClickHouse22.2.2.1&#xff0c;新的服务器上面安装了ClickHouse24.9.2.42&#xff0c;两个版本之间要做历史数据迁移 旧服务器&#xff1a;80(IP最后一段&#xff0c;以下代称)&#xff0c;ClickHouse版本&am…

Flutter:页面滚动

1、单一页面&#xff0c;没有列表没分页的&#xff0c;推荐使用&#xff1a;SingleChildScrollView() return Scaffold(backgroundColor: Color(0xffF6F6F6),body: SingleChildScrollView(child: _buildView()) );2、列表没分页&#xff0c;如购物车页&#xff0c;每个item之间…

Artec Leo:航海设备维护的便携式3D扫描利器【沪敖3D】

挑战&#xff1a;海军服务提供商USP Maritime需要CAD数据来执行维修和改装任务&#xff0c;特别是在偏远地区的任务&#xff0c;以及原始设计丢失的情况下。 解决方案&#xff1a;Artec Leo, Artec Studio, Autodesk Inventor 效果&#xff1a;高精度船舶组件和船坞机械模型&…

复杂网络(三)

一、几种常见的中心性指标 1.1 度中心性 度中心性分为节点度中心性和网络度中心性。前者指的是节点在其与之直接相连的邻居节点当中的中心程度&#xff0c;二后者则侧重节点在整个网络的中心程度&#xff0c;表征的是整个网络的集中或集权程度&#xff0c;即整个网络围绕一个…

蓝桥杯嵌入式入门指南-UART【7】

在all.c定义缓存变量 char uart_tx[50];//uart缓冲区 char uart_rx[50];//uart缓冲区USRT发送(使用strlen时需要在all.h添加string.h) sprintf(uart_tx ," PB15:%.4f V \r\n ",adc_data_PB15);HAL_UART_Transmit(&huart1,(uint8_t *)uart_tx,strlen(uart_tx)…

docker 在ubuntu系统安装,以及常用命令,配置阿里云镜像仓库,搭建本地仓库等

1.docker安装 1.1 先检查ubuntu系统有没有安装过docker 使用 docker -v 命令 如果有请先卸载旧版本&#xff0c;如果没有直接安装命令如下&#xff1a; 1.1.0 首先&#xff0c;确保你的系统包是最新的&#xff1a; 如果是root 权限下面命令的sudo可以去掉 sudo apt-get upda…