HttpServletRespon

news2025/5/29 2:20:52

1、HttpServletRespon对象

在Servlet API中,定义了一个HttpResponse接口,它继承于ServletResponse接口,专门用于封装HTTP响应消息

HTTP响应消息分为响应状态行响应消息头响应消息体三部分,所以HttpResponse接口中定义了向客户端发送响应状态码、响应消息头、响应消息体的方法

1.1 发送状态码相关的方法

当Servlet向客户端回送响应消息时,需要在响应消息中设置状态码,状态码代表客户端请求服务器的结果

  • 1、setStatus(int status)方法

功能:设置HTTP响应消息的状态码并生成响应状态行

解释:响应状态行中的状态描述信息直接与状态码相关,而HTTP版本由服务器确定,所以只要通过此方法设置了状态码,即可实现状态行的发送

  • 2、sendError(int sc)方法

功能:发送表示错误信息的状态码

  • 3、sendError(int code,String message)方法

功能:除了设置状态码外,还会向客户端发送一条错误信息

解释:服务器默认会创建一个HTML格式的错误服务页面作为响应结果,其中包含参数message指定的文本信息,这个HTML页面的内容类型为“text/html”,保留cookies和其他未修改的响应头信息。如果一个对应传入的错误码的错误页面已经在web.xml中声明,那么这个声明的错误页面会将优先建议的message参数服务于客户端

1.2 发送响应消息头相关的方法

当Servlet向客户端发送响应消息时,由于HTTP协议的响应消息头字段有很多种,所以Httpresponse接口定义了一系列设置HTTP响应头字段的方法

  • 1、void addHeader(String name,String value)方法和void setHeader(String name,String value)方法

参数:name为响应头字段的名称,value为响应头字段的值

相同处:这两个方法都是用于设置HTTP协议的响应头字段

不同处:addHeader()方法可以增加同名的响应头字段,而setHeader()方法会覆盖同名的头字段

  • 2、void addIntHeader(String name,int value)方法和void setIntHeader(String name,int value)方法

相同处:这两个方法都是专门用于设置包含整数值的响应头。避免调用addHeader()和setHeader()方法时,需要将int类型的设置值转换为String类型的麻烦

  • 3、void setContentLength(int len)方法

该方法用于设置响应消息的实体内容大小,单位为字节。对于HTTP协议来说,这个方法就是设置Content-Length响应头字段的值

  • 4、void setContentType(String type)方法

该方法用于设置Servlet输出内容的MIME类型,对于HTTP协议来说,就是设置Content-Type响应头字段的值。

例如,如果发送到客户端的内容是JPEG格式的图像数据,就需要将响应头字段的类型设置为“image/jpeg”。

需要注意的是,如果响应的内容为文本,该方法还可以用于设置字符编码,例如text/html;charset=UTF-8

  • 5、void setLocale(Locale loc)方法

该方法用于设置响应消息的本地化信息,对于HTTP来说,就是设置Content-Language响应头字段和Content-Type头字段中的字符集编码部分。

需要注意的是,如果HTTP消息没有设置Content-Type头字段,setLocale()方法设置的字符集编码不会出现HTTP消息的响应头中,如果调用setCharacterEncoding()方法或setContentType()方法指定了响应内容的字符集编码,setLocale()方法将不在具有指定字符集编码的功能

  • 6、void setCharacterEncoding(String charset)方法

该方法用于设置输出内容使用的字符编码,对于HTTP协议来说,就是设置Content-Type头字段中的字符集编码部分。如果没有设置Content-Type头字段,setCharacterEncoding()方法设置的字符集编码不会出现在HTTP消息的响应头中。

setCharacterEncoding()方法的优先权比setContentType()和setLocale()高,它的设置结果将覆盖后两个方法的设置结果

总结:addHeader()、setHeader()、addIntHeader()、setIntHeader()方法用于设置各种头字段,而setContentType()、setLocale()和setCharacterEncoding()方法用于设置字符集编码,这些设置字符编码的方法可以有效解决中文字符乱码问题

1.3 发送响应消息体相关的方法

在HTTP响应消息中,大量数据都是通过响应消息体传递的,所以ServletResponse遵循IO流传递大量数据的设计理念。

在发送响应消息体时,定义了两个与输出流相关的方法:

  • 1、getOutputStream()方法

该方法获取的字节输出流对象为ServletOutputStream类型。由于ServletOutputStream类型是OutputStream的子类,所以它可以直接输出字节数组中的二进制数据。因此要输出二进制格式的响应正文,就需要调用getOutputStream()方法

  • 2、getWriter()方法

该方法所获取的字符输出流对象为PrintWriter类型。因为PrintWriter类型的对象可以直接输出字符文本内容,所以想要输出内容为字符文本的网页文档,就需要调用getWriter()方法

2、HttpServletResponse应用

2.1实现请求重定向

在某些情况下,针对客户端的请求,一个Servlet类可能无法完成全部工作,这时可以使用请求重定向来完成

请求重定向是指Web服务器接收到客户端的请求后,可能由于某些条件限制,不能访问当前请求的URL所指向的Web资源,而是指定了一个新的资源路径,让客户端重新发送请求

为了实现请求重定向,HttpServletResponse接口定义了一个sendRedirect()方法,该方法用于生成302响应码和Location响应头,从而通知客户端重新访问Location响应头中指定的URL

该方法完整声明:

public void sendRedirect(java.lang.String location)throws java.io.IOException

参数location可以使用相对URL,Web服务器会自动将相对URL翻译成绝对URL,再生成Location头字段

案例:用户登录

先在Web目录下写login.html和welcome.html

编写一个ServletLogin类用于处理用户的登录请求

结果:

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

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

相关文章

ARMv8如何读取cache line中MOESI 状态以及Tag信息(tag RAM dirty RAM)

本文以Cortex-A53处理器为例,通过访问 处理器中的内部存储单元(tag RAM和dirty RAM),来读取cache line 中的MOESI信息。 Cortex-A53提供了一种通过读取一些系统寄存器,来访问Cache 和 TLB使用的一些内部存储单元的机制…

Zabbix的介绍和部署

目录 一、zabbix是什么? 1.zabbix的官方网站 为什么要使用监控? 2.zabbxi是什么组成的 3.zabbix是如何进行数据采集的 4.zabbix收集数据的方式有哪些,并且说明模式的含义? 5.zabbix监控有哪些? 6.安装zabbix使…

Linux共享内存(System V)

前言:在前面章节,我们学习了2种进程间通信方式,一个是通过继承方式的匿名管道,一个是通过让有血缘关系的进程在内存中看到同一份文件进行通信。此外,还可以在内存中开辟一块物理内存,通过页表映射到进程的进…

前段时间面了15个人,发现这些测试人都有个通病......

前段时间面了15个人,怎么说呢,基本上没有符合要求的,其实一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在10-20k,面试的人很多,但平均水平很让人失望。看简历很多都是3年工作经验&…

C++——一种特殊的二叉搜索树之AVL树

目录序言1 AVL树的概念2 AVL树节点的定义3 AVL树的插入是否继续更新依据:子树的高度是否变化4 AVL树的旋转旋转的原则:1. 新节点插入较高左子树的左侧---左左:右单旋2. 新节点插入较高右子树的右侧---右右:左单旋3. 新节点插入较高…

Java基础之File

文章目录一、File的声明二、File的创建2.1 创建一个文件2.2 创建一个文件夹2.3 创建一个多级文件夹三、File的删除四、File的获取与判断4.1 获取一个文件夹孩子层所有文件和文件夹,并存入数组4.2 判断一个File对象是否为文件4.3 判断一个File对象是否为文件夹4.4 判…

Abp框架安全升级指南

本文将从GB/T 28448-2019《信息安全技术 网络安全等级保护测评要求》规定的安全计算环境中解读、摘要若干安全要求,结合Abp框架,对站点进行安全升级。 【身份鉴别】应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别…

实验手册 - 第2周Spark RDD

目录标题1 实验内容实验1实验2实验3实验4实验5实验62 实验总结2.1 Spark应用开发步骤2.2 字符串的split()方法列表解析式2.3 常用的Action操作2.4 常用的Transformation操作2.5 RDD间的Transformation操作1 实验内容 查看当前工作目录 import os os.getcwd()D:\\juniortwo\\s…

【JUC】Java内存模型之JMM

【JUC】Java内存模型之JMM 文章目录【JUC】Java内存模型之JMM1. 概念2. JMM三大特性2.1 可见性2.2 原子性2.3 有序性3. 多线程对变量的读写过程4. 先行发生原则——happens-before4.1 happens-before八条规则4.1.1 次序规则4.1.2 锁定规则4.1.3 volatile变量规则4.1.4 传递规则…

【Unity入门】13.脚本外置参数

【Unity入门】脚本外置参数 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一)外置脚本参数 (1)外置自转脚本的速度参数 我们在RotateLogic的时候,为了实现自…

ubuntu虚拟机下搭建zookeeper集群,安装jdk压缩包,搭建Hadoop集群与spark集群的搭建【下篇】

系列文章目录 Hadoop与主机连接以及20版本的Hadoop配置网络的问题_hadoop连不上网 Hadoop升级update命令被锁定的解决方法_hadoop重新初始化被锁住怎么办虚拟机vmware下安装Ubuntu16.04修改屏幕尺寸与更新源,以及对应的安装vim和vim常见的操作命令 文章目录 前言…

ELK部署-实现Nginx日志收集

一、部署ES 1、创建网络下载镜像 docker network create elastic docker pull elasticsearch:7.17.62、目录准备 mkdir /opt/ELK/elastic/{data,config} -p chmod 777 /opt/ELK/elastic/datacat >> /opt/ELK/elastic/config/elasticsearch.yml <<EOF cluster.na…

DFS与BFS寻找图中的所有路径(C++)

文章目录图的存储理论知识数组模拟链表数组模拟邻接表DFS 寻找所有路径代码输入数据对应图输出BFS 寻找所有路径代码输入数据对应图输出备注写在后面图的存储 理论知识 图的存储主要有 2 种方式 邻接表邻接矩阵 邻接矩阵不适合存储稀疏图&#xff0c;本文使用邻接表来存储图 …

运用Navicat 实现 DML(对表的数据进行增删改)

如何使用Navicat呢&#xff1f; 当Navicat配置好后&#xff0c;链接上数据库后。 点击查询后tables中的任意一个新建查询&#xff0c;这时就会跳出一个查询编辑器。 我在初始sql是就创建了stu表。这里就不创建了。 先选择需要的表&#xff0c; select * from 表名; 添加&…

【JAVA】经典面试题:HashMap,Hashtable和ConcurrentHashMap三者之间的区别!!!

本篇的内容是围绕哈希表来展开的&#xff0c;主要是通对HashMap&#xff0c;Hashtable&#xff0c;ConcurrentHashMap三者的特点去了解这它们之间的区别以及运用场景 目录 1. HashMap 2. Hashtable 锁太粗问题&#xff1a; 3. 扩容机制问题 3. ConcurrentHashMap Concurr…

N5183B信号发生器

N5183B N5183B,是德keysight N5183B 主要特性与技术指标信号特征9 kHz &#xff5e; 3 或 6 GHz在 3 GHz 时提供 24 dBm 功率&#xff0c;带有电子衰减器1 GHz 和 20 kHz 偏置时&#xff0c;相位噪声为 -146 dBc≤-73 dBc ACP W-CDMA 64 DPCH 和 <0.4% EVM 160 MHz 802.11…

万字长文解读Stable Diffusion的核心插件—ControlNet

目录 一、介绍 二、使用方法 三、ControlNet结构 1.整体结构 2.ControlLDM 3.Timestep Embedding 4.HintBlock 5.ResBlock 6.SpatialTransformer 7.SD Encoder Block 8.SD Decoder Block 9.ControlNet Encoder Block 10.Stable Diffusion 四、训练 1.准备数据集…

stable-diffusion-webui浅叙

GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI 使用Git下载&#xff1a; git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git 运行 webui-user.bat : git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.g…

【NestJs】使用MySQL创建多个实体

如果小伙伴还不会使用nestjs连接数据库的话 可以看我的上一篇文章 NestJs使用连接mysql企业级开发规范 关系 关系是指两个或多个表之间的联系。关系基于每个表中的常规字段&#xff0c;通常包含主键和外键。关系有三种&#xff1a; 名称说明一对一主表中的每一行在外部表中有…

从零到一发布 NPM 包

如果你负责前端的基础能力建设&#xff0c;发布各种功能/插件包犹如家常便饭&#xff0c;所以熟悉对 npm 包的发布与管理是非常有必要的&#xff0c;故此有了本篇总结文章。本篇文章一方面总结&#xff0c;一方面向社区贡献开箱即用的 npm 开发、编译、发布、调试模板&#xff…