[Response对象] 笔记
response
用来设置响应数据
响应数据结构
-
响应行
HTTP/1.1 200 OK
-
响应头
Content-Type: text/html
-
响应体
<h1>Hello World!</h1>
重定向(Redirect)
一种资源跳转方式
// 重定向
// 1. 设置响应状态码
response.setStatus(302);
// 2. 设置响应头
response.setHeader("Location", "/HelloServlet/resp2");
// 简化方式重定向 可替换1.2.两步
response.sendRedirect("/HelloServlet/resp2");
特点对比
重定向 | 转发 |
---|---|
浏览器地址栏路径发生变化 | 浏览器地址栏路径不发生变化 |
可以重定向到任意位置的资源(服务器内部、外部均可) | 只能转发到当前服务器的内部资源 |
两次请求,不能在多个资源使用request共享数据 | 一次请求,可以在转发的资源间使用request共享数据 |
路径问题
浏览器操作 | 服务端操作 |
---|---|
浏览器和服务器之间如:重定向 | 服务器内部发生如:转发 |
需要添加虚拟目录 | 不需要加虚拟目录 |
<a href="www.baidu.com"\/> |
request.getRequestDispatcher("/sendtarget"); |
但是问题出现了,写死的路径会导致程序耦合性增加
所以要动态获取虚拟目录
String contextPath = request.getContextPath();
response.sendRedirect(contextPath + "/resp2");
响应字符数据
// 1. 获取字符输出流
PrintWriter writer = response.getWriter();
writer.write("Use writer!");
// 2. 设置头部信息 这里 content-type 是响应数据的类型
response.setHeader("content-type", "text/html");
writer.write("<a href=\"http:\\\\www.baidu.com\">百度</a>");
// 注:响应输出流不需要手动关闭
中文乱码
默认解码为 ISO-8859-1
在使用流之前设置编码为 utf-8 即可
response.setContentType("text/html;charset=utf-8");
响应字节数据
使用工具类
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
// 响应字节流
// 1. 读取文件
FileInputStream inputStream = new FileInputStream("C:\\pic1.png");
// 2. 获取response字节输出流
ServletOutputStream outputStream = response.getOutputStream();
// 3. 进行流 copy
// byte[] buffer = new byte[1024];
// int len = 0;
// while ((len = inputStream.read(buffer)) != -1) {
// outputStream.write(buffer, 0, len);
// }
// 3. 使用 commons-io 对流进行 copy
IOUtils.copy(inputStream, outputStream);
inputStream.close();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本