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://www.mzph.cn/web/46567.shtml

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

相关文章

MAVSDK-Java开源库的SDK库macOS平台编译

1.先安装好JDK17 2.克隆MAVSDK-Java源码 3.检测工程./gradlew check 发现未安装protoc-gen-mavsdk 安装后要添加到环境变量 4.安装protoc-gen-mavsdk pip3 install protoc-gen-mavsdk安装路径为: /opt/anaconda3/lib/python3.11/site-packages/protoc_gen_mavsdk

“社群+”生态下的开源AI智能名片源码:驱动商业与社会连接的新引擎

摘要&#xff1a;在“社群”生态日益成为主流趋势的今天&#xff0c;开源AI智能名片源码作为技术创新与社群运营的深度融合体&#xff0c;正逐步展现出其重塑商业格局、深化社会连接的巨大潜力。本文旨在深入探讨开源AI智能名片源码的技术特性、在“社群”生态中的具体应用、对…

Postman导出excel文件

0 写在前面 在我们后端写接口的时候&#xff0c;前端页面还没有出来&#xff0c;我们就得先接口测试&#xff0c;在此记录下如何使用postman测试导出excel接口。 如果不会使用接口传参可以看我这篇博客如何使用Postman 1 方法一 2 方法二 3 写在末尾 虽然在代码中写入文件名…

电流测量分流电阻

电流测量分流电阻 测量电流的设备称为安培计。大多数现代安培计测量已知电阻的精密电阻上的电压降。电流的计算使用欧姆定律&#xff1a;我五R 大多数电流表都内置电阻器来测量电流。但是&#xff0c;当电流对于电流表来说太高时&#xff0c;需要不同的设置。解决方案是将电流…

Chromium CI/CD 之Jenkins实用指南2024- Windows节点开启SSH服务(七)

1.引言 在现代软件开发和持续集成的过程中&#xff0c;自动化部署和远程管理是不可或缺的关键环节。SSH&#xff08;Secure Shell&#xff09;协议以其强大的安全性和灵活性&#xff0c;成为连接和管理远程服务器的首选工具。对于使用Windows虚拟机作为Jenkins从节点的开发者而…

Visual Studio Code 实现远程开发

Background 远程开发是指开发人员在本地计算机上进行编码、调试和测试&#xff0c;但实际的开发环境、代码库或应用程序运行在远程服务器上。远程开发的实现方式多种多样&#xff0c;包括通过SSH连接到远程服务器、使用远程桌面软件、或者利用云开发环境等。这里我们是使用VSCo…

【操作系统】文件管理——文件共享与保护,文件系统的结构(个人笔记)

学习日期&#xff1a;2024.7.18 内容摘要&#xff1a;文件共享&#xff0c;文件保护&#xff0c;文件系统的层级结构和全局结构&#xff0c;虚拟文件系统 文件共享 操作系统提供的文件共享功能&#xff0c;可以让多个用户共享使用同一个文件。文件共享和文件复制是不一样的&a…

python ATM实现

代码要求&#xff1a; 详细代码&#xff1a; money 50000000 name input("输入您的姓名 &#xff1a;")#查询功能 def search(show_header):if show_header:print("--------查询余额--------")print(f"{name}&#xff0c;您好&#xff0c;您的余额…

gitlab新建仓库

总贴 每个git网站都有不同的创建项目的方式&#xff0c;现在举例gitlab&#xff0c;其他例如gitee&#xff0c;gitcode&#xff0c;都是差不多的&#xff0c;自行百度 1![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dae875d9048940c0aeb292c07d6a4a62.png)1和2是项…

简约的悬浮动态特效404单页源HTML码

源码介绍 简约的悬浮动态特效404单页源HTML码,页面简约美观,可以做网站错误页或者丢失页面,将下面的代码放到空白的HTML里面,然后上传到服务器里面,设置好重定向即可 效果预览 完整源码 <!DOCTYPE html> <html><head><meta charset="utf-8&q…

matlab 异常值检测与处理——Robust Z-score法

目录 一、算法原理1、概述2、主要函数3、参考文献二、代码实现三、结果展示四、相关链接本文由CSDN点云侠翻译,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、概述 Robust Z-score法也被称为中位数绝对偏差法。它类似于Z-sc…

WebRTC音视频-前言介绍

目录 效果预期 1&#xff1a;WebRTC相关简介 1.1&#xff1a;WebRTC和RTC 1.2&#xff1a;WebRTC前景和应用 2&#xff1a;WebRTC通话原理 2.1&#xff1a;媒体协商 2.2&#xff1a;网络协商 2.3&#xff1a;信令服务器 效果预期 1&#xff1a;WebRTC相关简介 1.1&…

排序算法(4)之快速排序(2)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 排序算法(4)之快速排序(2) 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…

剧本杀小程序搭建,为商家带来新的收益方向

近几年&#xff0c;剧本杀游戏成为了游戏市场的一匹黑马&#xff0c;受到了不少年轻玩家的欢迎。随着信息技术的快速发展&#xff0c;传统的剧本杀门店已经无法满足游戏玩家日益增长的需求&#xff0c;因此&#xff0c;剧本杀市场开始向线上模式发展&#xff0c;实现行业数字化…

linux中list的基本用法

内核链表 1 list_head 结构 为了使用链表机制&#xff0c;驱动程序需要包含<linux/types.h>头文件&#xff0c;该文件定义了如下结构体实现双向链&#xff1a; struct list_head {struct list_head *next, *prev; };2 链表的初始化 2.1 链表宏定义和初始化 可使用以…

汽车免拆诊断案例 | 卡罗拉急加速抖动故障排除

车型信息 2017年改款卡罗拉&#xff0c;排量1.2T&#xff0c;行驶里程48800公里。 故障现象 车辆不管在什么状态下&#xff0c;只要是平缓加速&#xff0c;都不会有抖动。车辆静止时&#xff0c;急加速时&#xff0c;也不会有抖动。但是车速达40公里/小时以上&#xff0c;急加…

【python基础】基本数据类型

文章目录 一. Python基本数据类型1. 整数1.1. python的四种进制1.2. 数中的下划线 2. 浮点数3. 复数4. 布尔型5. 运算符5.1. 算术运算符5.2. 比较运算符5.3. 逻辑运算符5.4 运算符优先级 6. 常量 二. 注释三. Python之禅 一. Python基本数据类型 1. 整数 无长度限制&#xff1…

PWM再理解(1)

前言 昨天过于劳累&#xff0c;十点睡觉&#xff0c;本来想梳理一下PWM&#xff0c;今天补上。 PWM内涵 PWM全称&#xff1a;Pulse Width Modulation&#xff0c;也就是脉宽调制的意思&#xff0c;字面意思理解就是对脉冲的宽度进行改变。准确就是通过数字输出对模拟电路进行…

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

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

Python | Leetcode Python题解之第257题二叉树的所有路径

题目&#xff1a; 题解&#xff1a; class Solution:def binaryTreePaths(self, root: TreeNode) -> List[str]:paths list()if not root:return pathsnode_queue collections.deque([root])path_queue collections.deque([str(root.val)])while node_queue:node node_…