当前位置: 首页 > article >正文

10-19 HttpServletResponse

相应的对象  web开发模型:基于请求与相应的模型 一问一答的模型

Response对象:响应对象,封装服务器给客户端的相关的信息

顶级接口: ServletResponse
父接口:HttpServletResponse

response对象的功能分为以下四种:·(都是服务器干的事注意)

设置响应头信息;
发送状态码

设置响应正文;

重定向;

响应正文

响应数据,给客户端的数据
数据:可以是普通文本,也可以是文件

借助输出流把内容写给客户端的浏览器上

服务器怎么把文本和文件给到客户端?

借助响应输出流,把内容写给客户端 这个IO流是一个输出流 他有两个方法得到两种流

第一个是getOutputStream()  第二个是PrintWriter

  • ServletOutputStream getOutputStream()得到字节输出流,万能流(文本,文件都可以)
  • PrintWriter getWriter()得到打印字符输出流,打印流: write() print() printIn() 只能写文本

tips:外面是双引号 里面就必须是单引号

-1表示读到文件末尾,读一点写一点->读一个字节写一个字节(那么效率有点低,所以用buffer数组)

由于是一个字节一个字节大的读取所以读取比较慢,此时完成了服务器的资源展示到客户端浏览器上

设置ContentType

但是得到的是:

改正渲染类型:

设置响应头:

 设置响应状态

生成验证码:画布 -> 画笔写字 ->  通过ImageIO写出去

浏览器发现验证码的src的值一样 就会把缓存的内容重新给与src 而不会重新发送新请求

重定向(repsonse)->important

repsponse.sendRedirect

(面试高频)重定向(客户端的跳转)与请求转发(服务器的跳转)的共性与异性

共性:都是实现资源的跳转

异性:请求转发是服务器端的资源跳转客户端无感,

请求转发请求一次,重定向发起两次请求  Request域中的数据只能在转发中有效 转发时是无效的

转发客户端地址栏不会发生变化,重定向客户端地址栏会发生变化

转发可以访问服务器内部资源但是重定向既可以访问服务器内部资源又可以访问服务器外的资源

重定向的第二次请求是get请求 即服务器输入url地址回车进行一个请求到客户端

1

重定向(不是在服务器内部进行的跳转,而是在客户端,你看客户端是不是发起了两次的请求)

Request域中的数据只能在转发中有效 转发时是无效的  不然下面会报错

编码处理

1.请求编码

2.响应编码

请求编码

get

tomcat8以及之上的版本,Tomcat默认处理GET请求的编码:UTF-8

如果tomcat7以及之下,需要手动处理,万能编码处理方式:

编码处理:

1.把得到的字符串打散成字节

2.使用正确的编码 把字节数组组装成字符串

手动处理:

原因:

怎么变成三个汉字了?我传的是两个汉字->张三呀 

在UTF-8中一个汉字占三个字节  但是GBK是占两个字节为一个汉字  3个字节

因为你之前传过来的是UTF-8编码的汉字 总共占3*2个字节 现在要按照GBK  那么就是3个汉字了

乱码就是编码不一致所造成的

接口测试:使用postman  不再单独写一个html页面  在针对所谓的post请求页面时

表单中数据提交需要用到input这类标签单中的name属性,用于前端数据的一个传递

为什么我不设置  发送Post请求也没什么问题?

方法:

调用request对象void setCharacterErfcoding(String var1)的方法,这个方法只能设置请求体的编码(所以只适用于post请求编码)

响应编码  ->不分提交方式

但是报错:

IO流输出管道编码已经设置好,但是他没有告诉客户端这边的数据展示数据的编码方式

所以再次导致了乱码问题,相当于:我给你东西,编码是正常的,但是你不知道把我给你的东西不会设置编码

总结就是:客户端浏览器的编码没有设置

响应编码问题总结

在响应编码中,需要解决输出流管道的编码问题以及客户端浏览器的编码设置

tips:只要写一个:写下面这个就行了


http://www.kler.cn/a/135945.html

相关文章:

  • 代码随想录day23 | leetcode 39.组合总和 40.组合总和II 131.分割回文串
  • Element@2.15.14-tree checkStrictly 状态实现父项联动子项,实现节点自定义编辑、新增、删除功能
  • 随手记:小程序兼容后台的wangEditor富文本配置链接
  • 基于微信小程序的乡村旅游系统
  • 学生管理系统,增加教师管理,班级管理,角色功能权限管理
  • 在福昕(pdf)阅读器中导航到上次阅读页面的方法
  • ComText让机器人有了情节记忆
  • Upwork 新手使用指南——如何快速在Upwork上接单
  • 基于Vue+SpringBoot的校园电商物流云平台开源项目
  • MTK Pump Express 快速充电原理分析
  • 美国服务器:全面剖析其主要优点与潜在缺点
  • npm报错
  • QT自定义信号,信号emit,信号参数注册
  • c++处理tcp粘包问题以及substr方法
  • vue3使用element-plus
  • 拼图小游戏
  • 轻松实现公网访问本地内网搭建的WBO白板【内网穿透】
  • Labview中for循环“无法终止”问题?即使添加了条线接线端,达到终止条件后,仍在持续运行?
  • PostgreSQL 难搞的事系列 --- vacuum 的由来与PG16的命令的改进 (1)
  • 基于LLM+场景识别+词槽实体抽取实现多轮问答
  • 进程管理(三)
  • POS系统完整体系的介绍 Pos终端主密钥MK、DUKPT、PEK、DEK、MEK、TUSN的含义 ---安全行业基础篇7
  • CICD 持续集成与持续交付——git
  • 安全项目简介
  • 中间件安全:Apache 目录穿透.(CVE-2021-41773)
  • java源码-工程讲解