HttpServletRespon

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类用于处理用户的登录请求

结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt模型视图结构

一.模型视图介绍 1.Model/View(模型/视图结构) 视图(View)是显示和编辑数据的界面组件, 模型(Model)是视图和原始数据之间的接口 2.视图组件有:QListView QTreeView QTableView,QColumnView,QHeaderView 模型组件有:QStringListM…

设计模式-原型模式

原型模式 文章目录 原型模式什么是原型模式为什么要用原型模式原型模式的实现方式浅拷贝深拷贝 如何实现深拷贝递归拷贝对象序列化与反序列化优化浅拷贝与深拷贝 总结 什么是原型模式 如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分…

java基于mvc的停车收费系统mysql

系统需要解决的主要问题有: (1)车位管理模块 添加车位、查看车位状态、车位信息查询等。 (2)客户信息管理模块 客户基本信息录入、客户信息查询等。 (3)卡业务办理 添加卡信息、查余额查询、卡充值。 (4)车辆信息管理模块 车牌信息录入等。 (5)收费管理 可以调整相应…

通过工具生成指定 类型 大小 文件

今天给大家介绍一个神器 首先 大家在开发过程中或许经常需要涉及到文件上传类的功能 需要测试文件过大 空文件等等清空 不同大小的文件 而这种文件大小是比较不好控制的 但大家可以下载我的资源 文件生成工具(可生成指定大小 类型文件) 下载下来里面就有一个 fileGeneration…

开发常用的 Linux 命令1(文件和目录)

开发常用的 Linux 命令汇总1(文件和目录) 作为开发者,Linux是我们必须掌握的操作系统之一。因此,在编写代码和部署应用程序时,熟练使用Linux命令非常重要。这些常用命令不得不会,掌握这些命令,…

干货分享 | 如何在业余时间学习数据分析?

从社会学背景的数分小白到独揽公司市场部的数据分析,和大家简单分享我的数据分析升级打怪之路。 简单说就是两点【培养数据分析思维】【提升数据分析技能】 思维的培养主要靠书籍和课程 以下是一些对我影响较大的书籍,按照【入门、进阶、高阶】简单做了…

Vue2-黑马(十)

目录: (1)vuex-actions (2)vuex-调用actions (3)vue2实战-项目搭建 (1)vuex-actions 有这么一个需求,绿色的组件从服务器获取数据放入store,主…

图片英文翻译成中文转换器-中文翻译英文软件

您正在准备一份重要的英文资料或文件,但是您还不是很熟练地掌握英文,需要翻译才能完成您的任务吗?哪个软件能够免费把英文文档翻译成中文?让我们带您了解如何使用我们的翻译软件来免费翻译英文文档为中文。 我们的翻译软件是一款功…

grep命令详解(如何匹配多个字符串)(grep指令)(grep -q)

文章目录 20221011 grep如何匹配多个标志?20230412 grep -q(Use grep -q instead of comparing output with [ -n .. ].警告)20230421 匹配前后空格\s 参考文章:grep命令详解 | grep -c [被搜索文本] # 统计被搜索文本出现的次数…

冯诺依曼体系结构

冯诺依曼体系结构 目录 冯诺依曼体系结构引入1、冯诺依曼体系结构1.1 内存1.2 操作系统预加载 2、操作系统2.1 理解管理2.2 系统调用接口2.3 操作系统四大基本功能 引入 冯诺依曼体系结构(von Neumann architecture)是现代计算机体系结构的基础&#xf…

JavaSE学习进阶day03_03 Object类

第三章 Object类 介绍这个类之前,先回顾一下API: 3.1 概述 java.lang.Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。 如果一个类没有特别指定父…

手势控制的机器人手臂

将向你展示如何构建机械手臂并使用手势和计算机视觉来控制它。下面有一个在开发阶段的机械手臂的演示视频。 展示开发中的手臂的演示视频:https://youtu.be/KwiwetZGv0s 如图所示,该过程首先用摄像头捕捉我的手及其标志。通过跟踪特定的界标,…

C++语法(16)---- 多态

https://blog.csdn.net/m0_63488627/article/details/130106690?spm1001.2014.3001.5501https://blog.csdn.net/m0_63488627/article/details/130106690?spm1001.2014.3001.5501 目录 1. 多态的概念 2.多态的实现 1.虚函数 2.多态条件 得到的多态条件 特殊条件 3.虚函…

数据结构入门-10-AVL

文章目录 一、AVL的性质1.2 平衡二叉树定义 二、添加需达到平衡2.1 平衡因子2.1.2 平衡因子的实现 2.2 判断该二叉树是否为平衡二叉树2.3 左旋右旋2.3.1 左旋LL右旋RR基本原理2.3.2 LR RLLRRL 三、AVL中删除 一、AVL的性质 平衡二叉树 AVL树得名于它的俄罗斯发明者G. M. Adels…

被裁员了,要求公司足额补缴全部公积金,一次补了二十多万!网友兴奋了,该怎么操作?...

被裁员后,能要求公司补缴公积金吗? 一位网友问: 被裁员了,要求公司把历史公积金全部足额缴纳,现在月薪2.3万,但公司每个月只给自己缴纳300元公积金,结果一次补了二十多万,一次性取出…

Node 【Buffer 与 Stream】

文章目录 🌟前言🌟Buffer🌟 Buffer结构🌟 什么时候用Buffer🌟 Buffer的转换🌟 Buffer使用🌟 创建Buffer🌟 字符串转Buffer🌟 Buffer转字符串🌟 拼接Buffer&am…

Java每日一练(20230417)

目录 1. N 皇后 🌟🌟🌟 2. 搜索二维矩阵 🌟🌟 3. 发奖金问题 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 …

权限控制_SpringSecurity

认证-授权 认证:系统提供的用于识别用户身份的功能,通常提供用户名和密码进行登录其实就是在进行认证,认证的目的是让系统知道你是谁。 授权:用户认证成功后,需要为用户授权,其实就是指定当前用户可以操作…

Node 内置模块 【fs模块】

文章目录 🌟前言🌟fs模块🌟 使用fs模块🌟 异步编程和同步编程🌟 异步编程🌟 同步编程 🌟常用操作🌟 文件操作🌟 readFile异步读取文件🌟 readFileSync同步读取…

YOLOv8 更换主干网络之 GhostNetV2

《GhostNetV2:Enhance Cheap Operation with Long-Range Attention》 轻量级卷积神经网络(CNN)是专门为在移动设备上具有更快推理速度的应用而设计的。卷积操作只能捕捉窗口区域内的局部信息,这防止了性能的进一步提高。将自注意力引入卷积可以很好地捕捉全局信息,但这将大…