Response响应字符数据(解决乱码问题),字符数据(文件输出)

  • Request:使用request对象来获取请求数据
  • Response:使用response对象来设置响应数据

Reponse的继承体系和Request的继承体系也非常相似:

1、Response设置响应数据功能介绍

HTTP响应数据总共分为三部分内容,分别是响应行、响应头、响应体,对于这三部分内容的数据,respone对象都提供了哪些方法来进行设置?

1、响应行

对于响应头,比较常用的就是设置响应状态码:

void setStatus(int sc);

2、响应头

设置响应头键值对:

void setHeader(String name,String value);

3、响应体

对于响应体,是通过字符、字节输出流的方式往浏览器写

获取字符输出流:

PrintWriter getWriter();

获取字节输出流

ServletOutputStream getOutputStream();

2、 Respones请求重定向

Response重定向(redirect):一种资源跳转方式。

示例代码一

package com.zcl.webs.response; /*** TODO:** @author zcl* @date 2022/3/25 20:29*/import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;/****/
@WebServlet("/resp1")
public class responseDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("resp1....");// 重定向// 设置响应状态302response.setStatus(302);// 设置响应头:location 不区分大小写response.setHeader("location","/request-demo/resp2");// 简化方式重定向// response.sendRedirect("/request-demo/resp2");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

重定向代码

package com.zcl.webs.response; /*** TODO:** @author zcl* @date 2022/3/25 20:29*/import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/****/
@WebServlet("/resp2")
public class responseDemo2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("resp2....");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

请求resp1输出的结果如下:

resp1....
resp2....
简化重定向代码

这一句代码就替换了设置响应状态和响应头,功能是一样的

// 简化方式重定向
response.sendRedirect("资源B的路径");
重定向特点
  1. 浏览器地址栏发生变化
  2. 可以重定向到任意位置的资源(服务器内部和外部)
  3. 两次请求,不能在多个资源使用request共享数据

资源路径问题

明确路径谁使用

  • 浏览器使用:需要加虚拟目录(项目访问路径)
  • 服务端使用:不需要加虚拟目录

可以通过动态获取虚拟目录拼接重定向URL

// 简化方式重定向
// 获取虚拟路径拼接重定向路径
String contextPath = request.getContextPath();
response.sendRedirect(contextPath+"/resp2");

3、response响应字符数据

使用步骤:

1、设置响应头和编码(解决中文编码最重要的一步)

// 设置响应头和编码(解决中文乱码问题)
response.setContentType("text/html;charset=utf-8");

2、通过Response对象获取字符输出流

// 获取字符输出流
PrintWriter writer = response.getWriter();
writer.write("你好啊");

写出HTML标签必须设置响应头的格式为text/html,不然会被当做文本输出字符

注意:流不需要关闭,Response响应结束会自动销毁

代码演示

/***response响应字符数据*/
@WebServlet("/resp3")
public class responseDemo3 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 设置响应头和编码(解决中文乱码问题)response.setContentType("text/html;charset=utf-8");// 获取字符输出流PrintWriter writer = response.getWriter();writer.write("你好啊");// 设置html响应头才可以解析html文本// response.setHeader("content-type","text/html");// 写html信息输出writer.write("<h1>aaaa</h1>");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

启动服务器请求/resp3,输出的结果

F12查看请求

4、response响应字符数据(文件输出)

具体使用步骤:

1、读取本地的文件【根据需求是否输出文件使用】

// 1、读取本地的指定文件
FileInputStream fileInputStream = new FileInputStream("资源路径");

2、通过Response对象获取字符输出流

// 2、获取到字节输出流
ServletOutputStream outputStream = response.getOutputStream();

3、通过commons-io包完成快速复制输出浏览器

导入依赖坐标

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version>
</dependency>

使用方法

IOUtils.copy(文件输入流,文件输出流);

代码实现

// 3、循环读取数据,完成copy
/*int len = 0;
byte[] bytes = new byte[1024];
while ((len = fileInputStream.read(bytes)) != -1){// 输出文件outputStream.write(bytes,0,len);
}*/// 使用工具类代替上面的代码
IOUtils.copy(fileInputStream,outputStream);
// 4、关闭读取输入流
fileInputStream.close();

浏览器输出结果

Response响应字符数据(解决乱码问题),字符数据(文件输出)相关推荐

  1. Node响应中文时解决乱码问题

    场景 在使用node响应英文时可以在app.js中这样写 //代码块: node-http-server//表示引入http模块 var http = require('http'); /*reque ...

  2. mysql字符乱码_MySQL字符乱码解决方案

    1.字符集对应查看mysql> show  character  set; +----------+-----------------------------+----------------- ...

  3. LInux下centos6.7 设置字符集,解决乱码问题

    设置字符集,解决乱码问题 即修改文件 /etc/sysconfig/i18n echo 'LANG="zh_CN.UTF-8"' > /etc/sysconfig/i18n ...

  4. Response响应字符流和字节流数据

    文章目录 一.Response响应字符数据(这个流不需要关闭) 1.1 通过对象获取字符输出流 1.2 通过字符输出流输出数据 1.3 问题:输出中文乱码 1.3.1 setHeader 1.3.2 ...

  5. Response设置响应数据、Response完成重定向(对比 forword)、路径问题、Response响应字符数据、Response响应字节数据

    文章目录 Response Response 设置响应数据功能介绍 Response 完成重定向 与请求转发(forword)对比 路径问题 Response 响应字符数据 Response 响应字节 ...

  6. myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法)

    myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法) 参考文章: (1)myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法) (2)https://www. ...

  7. php中文字符乱码,如何解决php中文字符乱码问题

    php中文字符乱码的解决办法:1.改mysql配置文件"my.ini"或"my.cnf":2.在需要做数据库操作的php程序前加入语句"mysql_q ...

  8. Java 技术篇 - 启动web服务接收浏览器请求并响应实例演示,解决socket响应浏览器显示中文乱码问题,web服务response响应设置浏览器显示字体方法

    先看下效果图: 我通过 127.0.0.1:10010 访问我启用服务的效果图. 后台接收到的前台请求如下: GET / HTTP/1.1 Host: 127.0.0.1:10010 Connecti ...

  9. php 使用css乱码,分享CSS字符编码引起乱码快速解决的方法

    下面小编就为大家带来一篇分享CSS字符编码引起乱码快速解决的方法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 乱码引起的CSS失效原理: 由于一个中文是两个字符组成, ...

最新文章

  1. zabbix NFS挂载 监控模板
  2. 一文带你认识keepalived,再带你通关LVS+Keepalived!
  3. 二级指针做输入_第2种内存模型
  4. 2018年工业机器人销量排位_报告显示中国工业机器人销量排名世界前三
  5. Error:scalac: missing or invalid dependency detected while loading class file ‘RDDOperationScope.cla
  6. 项目管理沙龙第二次聚会纪要
  7. win10 联想键盘快捷键关闭_如何关闭联想台式机电脑USB键盘的FN功能
  8. 练手python_在图像上增加数字
  9. UbuntuHadoop集群搭建过程
  10. Hive之同比环比的计算
  11. 连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)
  12. 怎么样可以在阿里云搭建个人网站及域名绑定介绍
  13. ACCV 2020 最受关注的 Top10 代码开源论文!
  14. element-plus更换主题色(有手就行)
  15. 华为交换机查看端口对应的oid索引值
  16. Linux进程管理工具_Supervisor的安装与配置
  17. Bootstarp4 徽章
  18. Umeng—新浪登录问题
  19. Scikit-learn_分类算法_支持向量机分类
  20. 胆汁酸-肠道菌群在肠道炎症和肿瘤生成中的互作

热门文章

  1. 黑马程序员——java要点笔记——正则表达式
  2. 天涯论坛的经典回帖!!!
  3. 飞桨领航团AI达人创造营4-在Jetson Nano上基于python部署Paddle Inference(硬件部署)
  4. 《机器学习实战》决策树的应用
  5. 有了danmu,二十行代码轻松愉快对弹幕进行二次开发
  6. 冰河世纪:AIOps的落地实践之路
  7. win10 uwp 通知Toast
  8. pyinstaller打包exe(32位和64位)和运行太慢等问题解决
  9. 关于汉字转拼音,看这一篇就够了。
  10. 搞清FT , DFT , DTFT , DFS之间的关系