Response响应字符数据(解决乱码问题),字符数据(文件输出)
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的路径");
重定向特点
- 浏览器地址栏发生变化
- 可以重定向到任意位置的资源(服务器内部和外部)
- 两次请求,不能在多个资源使用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响应字符数据(解决乱码问题),字符数据(文件输出)相关推荐
- Node响应中文时解决乱码问题
场景 在使用node响应英文时可以在app.js中这样写 //代码块: node-http-server//表示引入http模块 var http = require('http'); /*reque ...
- mysql字符乱码_MySQL字符乱码解决方案
1.字符集对应查看mysql> show character set; +----------+-----------------------------+----------------- ...
- LInux下centos6.7 设置字符集,解决乱码问题
设置字符集,解决乱码问题 即修改文件 /etc/sysconfig/i18n echo 'LANG="zh_CN.UTF-8"' > /etc/sysconfig/i18n ...
- Response响应字符流和字节流数据
文章目录 一.Response响应字符数据(这个流不需要关闭) 1.1 通过对象获取字符输出流 1.2 通过字符输出流输出数据 1.3 问题:输出中文乱码 1.3.1 setHeader 1.3.2 ...
- Response设置响应数据、Response完成重定向(对比 forword)、路径问题、Response响应字符数据、Response响应字节数据
文章目录 Response Response 设置响应数据功能介绍 Response 完成重定向 与请求转发(forword)对比 路径问题 Response 响应字符数据 Response 响应字节 ...
- myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法)
myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法) 参考文章: (1)myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法) (2)https://www. ...
- php中文字符乱码,如何解决php中文字符乱码问题
php中文字符乱码的解决办法:1.改mysql配置文件"my.ini"或"my.cnf":2.在需要做数据库操作的php程序前加入语句"mysql_q ...
- Java 技术篇 - 启动web服务接收浏览器请求并响应实例演示,解决socket响应浏览器显示中文乱码问题,web服务response响应设置浏览器显示字体方法
先看下效果图: 我通过 127.0.0.1:10010 访问我启用服务的效果图. 后台接收到的前台请求如下: GET / HTTP/1.1 Host: 127.0.0.1:10010 Connecti ...
- php 使用css乱码,分享CSS字符编码引起乱码快速解决的方法
下面小编就为大家带来一篇分享CSS字符编码引起乱码快速解决的方法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 乱码引起的CSS失效原理: 由于一个中文是两个字符组成, ...
最新文章
- zabbix NFS挂载 监控模板
- 一文带你认识keepalived,再带你通关LVS+Keepalived!
- 二级指针做输入_第2种内存模型
- 2018年工业机器人销量排位_报告显示中国工业机器人销量排名世界前三
- Error:scalac: missing or invalid dependency detected while loading class file ‘RDDOperationScope.cla
- 项目管理沙龙第二次聚会纪要
- win10 联想键盘快捷键关闭_如何关闭联想台式机电脑USB键盘的FN功能
- 练手python_在图像上增加数字
- UbuntuHadoop集群搭建过程
- Hive之同比环比的计算
- 连续分配管理方式(单一连续分配 固定分区分配 动态分区分配)
- 怎么样可以在阿里云搭建个人网站及域名绑定介绍
- ACCV 2020 最受关注的 Top10 代码开源论文!
- element-plus更换主题色(有手就行)
- 华为交换机查看端口对应的oid索引值
- Linux进程管理工具_Supervisor的安装与配置
- Bootstarp4 徽章
- Umeng—新浪登录问题
- Scikit-learn_分类算法_支持向量机分类
- 胆汁酸-肠道菌群在肠道炎症和肿瘤生成中的互作