JavaWeb笔记_Response对象

一.Response对象

1.1 Response对象概述

a.专门负责给浏览器响应信息(响应行,响应头,响应体)的对象

b.我们主要使用的是跟HTTP协议相关的Response对象:HTTPServletResponse,继承了ServletResponse,扩展了ServletResponse接口,提供了更多的方法,例如可以操作响应头,cookie等

1.2 Response对象设置响应行

   /*** HttpServletResponse中的方法:* void setStatus(int sc)* 设置响应状态码*  注意:我们一般不会去改变响应状态码,响应状态码一般由Tomcat设置*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setStatus(404);response.setStatus(500);
}

1.3.Response对象设置响应头

 /** HttpServletResponse中的方法:* public void addHeader(String name, String value):可以添加响应头,一个响应头的key可以对应多 个value* public void setHeader(String name, String value):*  用给定名称和值设置响应头。如果已经设置 了头,则新值将重写以前的值。void setDateHeader(String name, long date):设置一个日期的响应头*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//添加响应头//add可以重复叠加response.addHeader("name","zs");  //Name:zsresponse.addHeader("name","ls");  //Name:ls//set或直接覆盖key相同的所有valueresponse.setHeader("name","ww");  //Name:ww 将zs和ls全部覆盖}

1.4 Response对象设置响应体

1.4.1 Response对象操作字符流:写文本类型数据
/*** HttpServletResponse中的方法:*   getWriter():可以获取一个字符输出流*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {PrintWriter writer = response.getWriter();writer.write("<font color='red'>ResponseDemo03</font>");writer.write("<br/>");writer.write("<font color='blue'>ResponseDemo03</font>");}

 

1.4.2 字符类乱码解决方案
/*** HttpServletResponse中的方法:*   getCharacterEncoding():获取Response中字符流缓冲区使用的默认码表*    1.Response底层使用的默认码表是ISO-8859-1(latin1)*    2.通过Response的setCharacterEncoding修改默认码表为UTF-8*         当我们write("你好")的时候,会把"你好"进行"UTF-8"编码(假设:CA E3 F5 D3 E5 E7)*         而我们的浏览器默认使用的是系统码表:GBK(一个中文对应两个字节),因此在解析"你好"*         会将你好的字节进行每两个字节解码 (CA E3 F5 D3 E5 E7=> 浣犲ソ)*    3.通过设置内容类型(设置响应头)来告知浏览器使用指定的码表解析响应体内容*    4.最终解决方案*      response.setContentType("text/html;charset=UTF-8");*      1.会自动设置Response中字符流缓冲区使用的码表*      2.告知浏览器使用何种码表解析响应体中的内容*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//解决字符类乱码问题//获取response中字符缓冲区使用的默认码表System.out.println(response.getCharacterEncoding()); //ISO-8859-1//通过setContentType()方法进行解决response.setContentType("text/html;charset=UTF-8");//response.setHeader("Content-Type","text/html;charset=UTF-8");System.out.println(response.getCharacterEncoding()); //UTF-8response.getWriter().write("设置后:你好");}

1.4.3 Response对象操作字节流:写多媒体类型数据
/*** HttpServletResponse中的方法*   getOutputStream():获取一个字节输出流* ServletContext中的方法*   getMimeType(String fileName):根据指定的名称返回对应的MIME类型*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取字节输出流ServletOutputStream os = response.getOutputStream();BufferedOutputStream bos = new BufferedOutputStream(os);//获取响应内容的MIME类型String mimeType = getServletContext().getMimeType("1.jpg"); // image/jpeg//告知浏览器响应内容的MIME类型,让浏览器知道怎么处理response.setContentType(mimeType);//利用字节输入流获取本地文件InputStream ras = getServletContext().getResourceAsStream("/img/1.jpg"); //虚拟路径BufferedInputStream bis = new BufferedInputStream(ras);int x;//写入文件while((x=bis.read())!=-1){os.write(x);}}

1.5 利用Response重定向

/*** 需求:当浏览器请求ResponseDemo06的时候,让浏览器重定向到ResponseDemo07*   void sendRedirect(String location):指定一个路径* 底层会设置状态码为302,并且设置响应头Location:/day10_Response/demo07*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//重定向:浏览器发出两次请求//需要加Application Contextresponse.sendRedirect("/day10_Response/response04");}

 

二.MIME类型(大类型/小类型)

 1.媒体类型一种标准,用来表示文档,文件或字节流的性质和格式
  2.浏览器中通常使用MIME类型(而不是文件扩展名),硬盘上的文件的扩展名都对应的有MIME类型
    可以用来确定如何处理服务端响应给浏览器的资源

三.下载文件案例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>下载</title>
</head>
<body><a href="/day10_Response/response06?filename=1.jpg">1.jpg</a><br><a href="/day10_Response/response06?filename=2.txt">2.txt</a><br><a href="/day10_Response/response06?filename=3.pdf">3.pdf</a><br><a href="/day10_Response/response06?filename=美女.jpg">美女.jpg</a><br>
</body>
</html>
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取filename参数以及MIME类型String filename = request.getParameter("filename");String mimeType = getServletContext().getMimeType(filename);//判断浏览器类型来解决不同的中文乱码问题String userAgent = request.getHeader("User-Agent");String newFileName = null;if (userAgent.contains("MSIE") || userAgent.contains("Edge") || userAgent.contains("Trident")) {//说明是Microsoft浏览器我们需要采用UTF-8编码newFileName = URLEncoder.encode(filename, "UTF-8");} else {//说明是其它浏览器(chrome,FireFox...)我们需要先获取文件名的UTF-8字节,然后在对这些字节进行ISO-8859-1解码newFileName = new String(filename.getBytes("UTF-8"), "ISO-8859-1");}//设置响应头response.setContentType(filename);response.setHeader("Content-Disposition","attachment;filename="+newFileName);// 将要保存的文件名//获取字节输出流ServletOutputStream os = response.getOutputStream();BufferedOutputStream bos = new BufferedOutputStream(os);//通过字节输入流读取文件InputStream ras = getServletContext().getResourceAsStream("/download/" + filename);BufferedInputStream bis = new BufferedInputStream(ras);int x;//写入文件while ((x= bis.read())!=-1){bos.write(x);}}

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

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

相关文章

均值滤波算法及实现

均值滤波器的使用场景&#xff1a; 均值滤波器使用于处理一些如上述蓝色线的高斯噪声场景 红色曲线是经过均值滤波处理后的数据。主要因为均值滤波设置数据缓冲区&#xff08;也即延时周期&#xff09;&#xff0c;使得测量值经过缓冲不会出现特别大的变化。 黄色曲线为高斯噪声…

趣谈linux操作系统 9 网络系统-读书笔记

文章目录 网络协议栈基础知识回顾网络分层网络分层的目的各层作用简介延伸-ip地址,有类,无类,cidr socket实现分析tcp/udp回顾socket编程回顾TCP编程回顾UDP编程回顾差异 socket相关接口实现浅析sokcet实现解析创建socket的三个参数socket函数定义及其参数创建socket结构体关联…

Redis高级篇—分布式缓存

目录 Redis持久化 RDB持久化 AOF持久化 RDB与AOF对比 Redis主从 全量同步 增量同步 Redis哨兵 RedisTemplate集成哨兵实现 Redis分片集群 散列插槽 集群伸缩 故障转移 自动故障转移 手动故障转移 RedisTemplate访问分片集群 Redis持久化 RDB持久化 RDB全称Re…

《基于 CDC、Spark Streaming、Kafka 实现患者指标采集》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

第三篇 Vue项目目录结构介绍

1、最外层目录结构 passagerFrontPage ├── .vscode //vscode配置&#xff0c;不用理会 ├── node_modules //项目依赖&#xff0c;npm install命令执行后自动生成 ├── public //公共资源存放 ├── src //源码 ├── tests //选装&#xff1a;测试模块 ├── .git…

负载均衡 lvs

1. 4层转发(L4) 与 7层转发(L7) 区别 4层转发(L4) 与 7层转发(L7) 区别 转发基于的信息 状态 常用的服务 L4 基于网络层和传输层信息&#xff1a; L4转发主要依赖于网络层IP头部(源地址&#xff0c;目标地址&#xff0c;源端口&#xff0c;目标端口)和传输层头部&#xff…

【python】OpenCV—Scanner

文章目录 1、需求描述2、代码实现3、涉及到的库函数cv2.arcLengthcv2.approxPolyDPskimage.filters.threshold_localimutils.grab_contours 4、完整代码5、参考 1、需求描述 输入图片 扫描得到如下的结果 用OpenCV构建文档扫描仪只需三个简单步骤: 1.边缘检测 2.使用图像中…

UniVue@v1.5.0版本发布:里程碑版本

前言 以后使用UniVue都推荐使用1.5.0以后的版本&#xff0c;这个版本之后&#xff0c;更新的速度将会放缓。 希望这个框架能够切实的帮助大家更好的开发游戏&#xff0c;做出一款好游戏&#xff01;本开源项目采用的开源协议为MIT协议&#xff0c;完全开源化&#xff0c;以后也…

IDEA的工程与模块管理

《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试&#xff08;Debug&#xff09; 第七章 …

web安全之SQL手工注入漏洞测试

一、目的 1.掌握SQL注入原理&#xff1b; Sql注入详解(原理篇)_sql注入攻击的原理-CSDN博客 2.了解手工注入的方法&#xff1b; 3.了解MySQL的数据结构&#xff1b; 4.了解字符串的MD5加解密 二、过程 1.进去后出现以下界面 找注入点 发现有注入点&#xff0c;即id被代入执…

怎样优化 PostgreSQL 中对复杂的日期时间格式转换和时区处理?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 怎样优化 PostgreSQL 中对复杂的日期时间格式转换和时区处理&#xff1f; 怎样优化 PostgreSQL 中对复…

Linux-开机自动挂载(文件系统、交换空间)

准备磁盘 添加三块磁盘&#xff08;两块SATA&#xff0c;一块NVMe&#xff09; 查看设备&#xff1a; [rootlocalhost jian]# ll /dev/sd* [rootlocalhost jian]# ll /dev/nvme0n2 扩&#xff1a;查看当前主机上的所有块设备&#xff0c;通过如下指令实现&#xff1a; [root…

【Linux】Linux环境设置环境变量操作步骤

Linux环境设置环境变量操作步骤 在一些开发过程中本地调试经常需要依赖环境变量的参数&#xff0c;但是怎么设置对小白来说有点困难&#xff0c;今天就介绍下具体的操作步骤&#xff0c;跟着实战去学习&#xff0c;更好的检验自己的技术水平&#xff0c;做技术还是那句话&…

Elasticsearch:评估搜索相关性 - 第 1 部分

作者&#xff1a;来自 Elastic Thanos Papaoikonomou, Thomas Veasey 这是一系列博客文章中的第一篇&#xff0c;讨论如何在更好地理解 BEIR 基准的背景下考虑评估你自己的搜索系统。我们将介绍具体的技巧和技术&#xff0c;以便在更好地理解 BEIR 的背景下改进你的搜索评估流程…

vue项目build以后整合到springboot项目里面---------gxl

很多时候我们需要用到vue的组件&#xff0c;但是全栈的背景下懒得去搞前后端分离&#xff0c;很多权限校验后台都写好了&#xff0c;没必要再去做接口或者前端写一遍了&#xff0c;因此我们需要把打包后的项目整合到项目里面。 整合也很简单&#xff0c;照常vue项目开发&#…

Git分支合并以及分支部分合并 提交记录合并

Git分支合并,以及分支部分合并,提交记录合并 最近工作中用到git分支合并的场景,记录一下. 分支整体合并,合并所有记录 仅合并分支部分代码

0718,TCP协议,三次握手,四次挥手

爬东西只能明天了喵 上课喵&#xff1a; TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;的状态迁移图 这图别看&#xff0c;会瞎 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;的状态迁移图描述…

插画插件:成都亚恒丰创教育科技有限公司

【插画插件&#xff1a;数字创意时代的艺术加速器】 在数字化浪潮汹涌的今天&#xff0c;视觉艺术以其独特的魅力穿梭于互联网的每一个角落&#xff0c;成为连接人心、传递情感与信息的桥梁。而在这股创意洪流中&#xff0c;插画插件以其高效、便捷、个性化的特点&#xff0c;…

【两两交换链表中的节点】python刷题记录

书接上回【旋转链表】 思路&#xff1a; 1.创建dummy结点 2. 灵神牛啊 代码&#xff1a; # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def swa…

AU软件包(2017-2027)下载

下载链接&#xff1a; 迅雷网盘https://pan.xunlei.com/s/VO1kO3N_VUX46LHpigZ04Tj8A1?pwd5s8y# 夸克网盘https://pan.quark.cn/s/6c68be17ba5c 百度网盘https://pan.baidu.com/s/1m4nV0kWTQpY_cGQejl-_Kg?pwdetcp