HttpServletRequest

news2025/1/12 5:58:08

1、HttpServletRequest对象

在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用于封装HTTP请求消息

1.1 获取请求行信息的相关方法

当访问Servlet时,请求消息的请求行中会包含请求方法、请求资源名、请求路径等信息。因此HttpServletRequest接口定义了一系列用于获取请求行的方法

  • 1、String getMethod()

功能:获取HTTP请求消息中的请求方式(例如GET、POST等)

  • 2、String getRequestURI()

功能:获取请求行中资源名称部分,即位于URL的主机和端口之后、参数部分之前的数据

  • 3、String getQueryString()

功能:获取请求行中的参数部分,也就是资源路径后面问号(?)以后的所有内容

  • 4、String getProtocol()

功能:获取请求行中的协议名和版本,例如HTTP/1.0或HTTP/1.1

  • 5、String getContextPath()

功能:获取请求URL中属于Web应用程序的路径,这个路径以“/“开头,表示相对于整个Web站点的根目录,路径结尾不含“/”。如果请求URL属于Web站点的根目录,那么返回结果为空字符串(“”)

  • 6、String getServletPath()

功能:获取Servlet的名称或Servlet所映射的路径

  • 7、String getRemoteAddr()

功能:获取请求客户端的IP地址,其格式类似于“192.168.0.3”

  • 8、String getRemoteHost()

功能:获取请求客户端的完整主机名,其格式类似于“pc1.itcast.cn”。需要注意的是,如果无法解析出客户机的完整主机名,该方法会返回客户端的IP地址

  • 9、int getRemotePort()

功能:获取请求客户端网络连接的端口号

  • 10、String getLocalAddr()

功能:获取Web服务器上接收当前请求网络连接的IP地址

  • 11、String getLocalName()

功能:获取Web服务器上接收当前请求网络连接的IP所对应的主机名

  • 12、int getLocalPort()

功能:获取Web服务器上接收当前请求网络连接的端口号

  • 13、String getServerName()

功能:获取当前请求所指向的主机名,即HTTP请求消息中Host头字段所对应的主机名部分

  • 14、int getServerPort()

功能:获取当前请求所连接的服务器端口号,即HTTP请求消息中Host头字段所对应的端口号部分

  • 15、String getScheme()

功能:获取请求的协议名,例如HTTP、HTTPS或FTP

  • 16、StringBuffer getRequestURL()

功能:获取客户端发出请求时的完整URL,包括协议、服务器名、端口号、资源路径等信息,但不包括后面的查询参数部分。需要注意的是,getRequestURL()方法返回的结果时StringBuffer类型,而不是String类型,这样便于对结果进行修改

案例:

1.2 获取请求头的相关方法

当请求Servlet时,需要通过请求头向服务器传递附加消息,例如客户端可以接受的数据类型、压缩方式、语言等。为此HttpServletRequest接口定义了一系列用于获取HTTP请求头字段的方法

  • 1、String getHeader(String name)

功能:获取一个指定头字段的值,若没有指定头字段则返回null,若含有多个则返回一个头字段值

  • 2、Enumeration getHeaders(String name)

功能:返回一个Enumeration集合对象,该集合对象由请求消息中出现的某个指定名称的所有头字段值组成。在多数情况下,一个头字段名在请求消息中只出现了一次,但有时候可能出现多次

  • 3、Enumeration getHeaderNames()

功能:获取一个包含所有请求头字段的Enumeration对象

  • 4、int getIntHeader(String name)

功能:获取指定名称的头字段,并且将其值转为int类型。需要注意的是,如果指定名称的头字段不存在,返回值为-1;如果获取到的头字段的值不能转为int类型,将发生NumberFormatException异常

  • 5、long getDateHeader(String name)

功能:获取指定头字段的值,并将其按GMT时间格式转换成一个代表日期/时间的长整数,这个长整数是自1970年1月1日0点0分0秒算起的以毫秒为单位的时间值

  • 6、String getContentType()

功能:获取Content-Type头字段的值,结果为String类型

  • 7、int getContentLength()

功能:获取Content-Length头字段的值,结果为int类型

  • 8、String getCharacterEncoding()

功能:返回请求消息的实体部分的字符集编码,通常从Content-Type头字段中进行提取,结果为String类型

案例:

1.3 请求转发

Servlet之间可以相互跳转,利用Servlet的跳转可以很容易把一项任务按模块分开

Servlet的跳转要通过RequestDispatcher接口的实例对象实现

HttpServletRequest接口提供了getRequestDispatcher()方法用于获取RequestDispatcher对象

  • RequestDispatcher getRequestDispatcher(String path)

该方法返回封装了某条路径所指定资源的RequestDispatcher对象

参数path必须以 “/” 开头,用于表示当前Web应用的根目录

注意:WEB-INF目录中的内容对RequestDispatcher对象也是可见的,因此传递给该方法的资源可以是WEB-INF目录中的文件

获取到RequestDispatcher对象后,如果当前Web资源不想处理请求,RequestDispatcher接口提供了一个forward()方法,该方法可以将当前请求传递给其他Web资源,由其他资源对这些信息进行处理并将响应提交给客户端,这种方式被称为请求转发

  • forward(ServletRequest request,ServletRespon respon)

forward方法用于将请求从一个Servlet传递给另一个Web资源。在Servlet中,可以对请求做一个初步处理,然后通过调用forward方法将请求传递给其他资源进行响应

注意:该方法必须在将响应提交给客户端之前被调用,否则将抛出IllegalStateException异常

forward工作原理:

当浏览器访问Servlet1时,可以通过forward()方法将请求转发给其他Web资源,其他Web资源处理完请求后,直接将响应结果返回到浏览器

案例:使用RequestForwardServlet类将请求转发到一个新的Servlet页面

地址栏显示的是RequestForwardServlet的请求路径,但是浏览器却显示除了ResultServlet中要输出的内容。这是因为请求转发是发生在服务器内部的行为,从RequestForwardServlet到ResultServlet属于一次请求,在一次请求中可以使用request属性进行数据共享

1.4 获取请求参数

HttpServletRequest接口中定义了一系列获取参数的方法

  • 1、String getParameter(String name)

功能:获取某个指定名称的参数值,如果请求消息中没有包含指定名称的参数则返回null;如果指定名称的参数存在但没有设置值则返回一个空串;如果包含多个指定名称的参数则返回第一个出现的参数值

  • 2、String[] getParameterValues(String name)

功能:返回一个String类型的数组,HTTP请求消息中可以有多个相同名称的参数(通常由一个包含多个同名的字段元素的form表单生成)

  • 3、Enumeration getParameterNames()

功能:返回一个包含请求消息中所有参数名的Enumeration对象,在此基础上可以对请求消息中的所有参数进行遍历处理

  • 4、Map getParameterMap()

功能:将请求消息中的所有参数名和值装入一个Map对象中返回

案例;

 

 1.5 通过Request对象传递数据

Request对象不仅可以获取一系列数据,还可以通过属性传递数据

  • 1、void setAttribute()

功能:将一个对象和一个name关联后存储进ServletRequest对象中

注意:如果已经存在指定名称的属性,该方法会先删除原来的属性,然后再添加新属性,如果传的是null则等于removeAttribute()

  • 2、Obj getAttribute()

功能:从ServletRequest对象中返回指定名称的属性对象

  • 3、void removeAttribute()

功能:从ServletRequest对象中删除指定名称的属性

  • 4、Enumation getAttributeNames()

功能:返回一个包含所有ServletRequest对象中的属性名的Enumeration对象

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

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

相关文章

Spring入门案例--bean实例化

bean实例化 对象已经能交给Spring的IOC容器来创建了,但是容器是如何来创建对象的呢? 就需要研究下bean的实例化过程 ,在这块内容中主要解决两部分内容,分别是 bean是如何创建的实例化bean的三种方式, 构造方法,静态工厂 和 …

USB TO SPI / USB TO I2C 软件概要 1 --- 专业版调试器

所需设备: 1、USB转SPI_I2C适配器(专业版); 软件概述: SPI类: USB TO SPI 1.0-Slave SPI从机软件,适合单步调试,支持SPI工作模式0、1、2、3,自动跟随主机通讯速率,自动接收数据; USB TO SP…

21、指标监控

文章目录 1、SpringBoot Actuator1、简介2、1.x与2.x的不同3、如何使用4、可视化 2、Actuator Endpoint1、最常使用的端点2、Health Endpoint3、Metrics Endpoint4、管理Endpoints1、开启与禁用Endpoints2、暴露Endpoints 3、定制 Endpoint1、定制 Health 信息2、定制info信息1…

springboot集成nacos配置管理

官方文档:Nacos Spring Boot 快速开始 个人实践: Namespace定义环境,例如:开发环境、测试环境、生产环境。 Group定义不同的应用。 DataId用来区分配置,例如:mysql配置,redis配置&#xff0…

web集群

1. 简述静态网页和动态网页的区别 1.更新和维护: 静态网页内容一经发布到网站服务器上,无论是否有用户访问,这些网页内容都是保存在网站服务器上的。如果要修改网页的内容,就必须修改其源代码,然后重新上传到服务器上…

新一代异步IO框架 io_uring | 得物技术

1.Linux IO 模型分类 相比于kernel bypass 模式需要结合具体的硬件支撑来讲,native IO是日常工作中接触到比较多的一种,其中同步IO在较长一段时间内被广泛使用,通常我们接触到的IO操作主要分为网络IO和存储IO。在大流量高并发的今天&#xff…

【golang学习笔记】——(三)golang vscode编译第一个程序

这里有一个盲区的坑,先埋下,待会再讲。 一、工程创建 首先是在一个自己需要的文件夹下创建一个.go空文件,老传统,这里就是hellowrold.go,致敬原神Brian Kernighan(1978年出版的《The C Programming Langua…

数据库----------自增长约束、非空约束

目录 1.自增长约束(auto_increment) 1.概念 2.特点 3.指定自增字段初始值 4.delete和truncate在删除后自增列的变化 2.非空约束(not null) 1.概念 2.语法 3.添加非空约束 4.删除非空约束 1.自增长约束(auto_increment) 1.概念 在MysQL中,当主键定义为自增…

Can we learn better with hard samples

摘要 在深度学习中,小批量训练通常用于优化网络参数。然而,传统的小批处理方法可能无法学习到数据中代表性不足的样本和复杂的模式,从而导致泛化的时间更长。为了解决这一问题,提出了一种传统算法的一种变体,它训练网…

【基于 Arduino 的 RFID门锁】

【基于 Arduino 的 RFID门锁】 1. 概述2. 射频识别的工作原理3. RFID 和 Arduino4. Arduino RFID门锁门禁项目5. 源代码 在本教程中,我们将了解什么是 RFID,它是如何工作的以及如何制作基于 Arduino 的 RFID 门锁。您可以观看以下视频或阅读下面的书面教…

CTFWIKI-PWN-ret2syscall

该题目是在32位下 目录 先进行checksec ​编辑 ida 1.execve() 2.寄存器 3.流程图 4.我们需要先看看execve()函数的函数调用号 5.使用ROPgadget来查看 我们先进行查看eax|ret 查看 pop ebx,ecx,edx,ret 查找 /bin/sh的地址 查找int 0x80 查看字符偏移量 附上流程…

2023-04-13 工作记录--CSS/JS-ios 文本渐变色 和 文本超出省略号处理 共用时,出现省略号未显示问题

CSS/JS-ios 文本渐变色 和 文本超出省略号处理 共用时,出现省略号未显示问题 一、前言 ⭐️ 最近写项目,发现一个bug:ios 文本渐变色 和 文本超出省略号处理 共用时,出现省略号未显示问题,如下图:图1是非i…

三、vue_options之data、methods属性选项

一、data属性 data属性是传入一个函数,并且该函数需要返回一个对象: 在Vue2.x的时候,也可以传入一个对象(虽然官方推荐是一个函数);在Vue3.x的时候,必须传入一个函数,否则就会直接在浏览器中报错&#xf…

【Java开发】设计模式 12:解释器模式

1 解释器模式介绍 解释器模式是一种行为型设计模式,它提供了一种方法来解释语言、表达式或符号。 在该模式中,定义了一个表达式接口,并实现了对应的表达式类,这些类可以解释不同的符号组成的表达式,从而实现对语言的…

云原生之在kubernetes环境下部署wordpress

云原生之在kubernetes环境下部署wordpress 一、wordpress介绍1.wordpress简介2.wordpress特点 二、kubernetes集群介绍1.k8s简介2.k8s架构图 三、本次实践介绍1.本次实践简介2.本次环境规划 四、环境准备工作1.检查k8s环境2.检查系统pod状态 五、创建mysql的secret资源1.创建部…

OpenCV_contrib配置教程(详细版)

文章目录 一:前提准备1:OpenCV4.5.1、OpenCV_contrib4.5.1扩展库下载2:Cmake下载地址Download 二:cmake配置1:2: 三:vs2017编译OpenCV build文件四:环境配置 个人笔记: …

如何构建编译gopacket包的测试用例?(gopacket抓取数据包、类似于tcpdump、Wireshark)

本篇文章介绍一下,如何构建gopacket测试用例 1、构建过程中遇到的问题 问题1: -bash: ./gopacket-main: /lib/ld-musl-x86_64.so.1: bad ELF interpreter: No such file or directory问题2: #14 3.150 # github.com/google/gopacket/pcap …

Zimbra 远程代码执行漏洞(CVE-2019-9670)环境搭建

漏洞简介 Zimbra是著名的开源系统,提供了一套开源协同办公套件包括WebMail,日历,通信录,Web文档管理和创作。一体化地提供了邮件收发、文件共享、协同办公、即时聊天等一系列解决方案。此漏洞的主要利用手法是通过 XXE (XML 外部…

【附代码】SSVEP解码算法 - 多变量同步指数(MSI)

1 算法来源 该算法来自电子科技大学张杨松博士,针对该算法的计算在张博士的博士论文中有详细介绍,有兴趣的读者可以下载阅读,本文重点在对该方法的代码实现。Zhang, Yangsong, et al. “Multivariate synchronization index for frequency recognition of SSVEP-based brain…

JS和CSS实现的原生轮播图

文章目录 🍗 前言🍖 JSCSS实现滑动轮播图🍔 纯CSS实现滑动轮播图🍿 JSCSS实现浅入浅出轮播图🥪 JSCSS实现滑动带遮罩轮播图🧀 JSCSS实现卡片式轮播图 🍗 前言 图片来自百度图片,可以…