一:Reponse对象的概念

当客户端发送http请求时,服务器端会对每一次请求,创建request对象和response对象。

response对象包括三个部分:响应头、响应状态码以及响应体

二:response对象案例分析

1:向客户端输出中文数据

 1 package com.hlcui.servlet;
 2
 3 import java.io.IOException;
 4 import java.io.OutputStream;
 5 import java.io.PrintWriter;
 6
 7 import javax.servlet.ServletException;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11
12 public class ServletDemo6 extends HttpServlet {
13
14     public void doGet(HttpServletRequest request, HttpServletResponse response)
15             throws ServletException, IOException {
16
17         String data = "好好学习!";
18         //获取向客户端写数据的输出流
19         OutputStream out = response.getOutputStream();
20         out.write(data.getBytes());
21     }
22
23     public void doPost(HttpServletRequest request, HttpServletResponse response)
24             throws ServletException, IOException {
25         doGet(request,response);
26     }
27
28 }

浏览器打印:

结果正确!

这里面要注意,因为我在服务器端对数据进行编码时,没有指定使用哪种字符集,所以默认是使用gb2312,

而浏览器端解析时也是gb2312,所以正确显示,如果我指定编码字符为UTF-8,结果如下:

使用UTF-8对数据进行编码:

1 out.write(data.getBytes("UTF-8"));

打印结果为乱码:

因为我服务器端指定编码为UTF-8,而浏览器还是使用默认的解码方式进行解码,导致乱码。

解决方式:

可以通过设置浏览器的查看方式(使用UTF-8解析服务器发送过来的数据),但是不是根本办法,最好的办法是在

服务器端告诉浏览器以何种方式进行解码。修改如下:

1 response.setHeader("content-type", "text/html;charset=utf-8");

结果是正确的!

可以使用html标签中meta进行模拟服务器response响应头:

1 public void doGet(HttpServletRequest request, HttpServletResponse response)
2             throws ServletException, IOException {
3         String data = "好好学习!";
4         //获取向客户端写数据的输出流
5         OutputStream out = response.getOutputStream();
6         out.write("<meta http-equiv='content-type' content='text/html;charset=utf-8'>".getBytes());
7         out.write(data.getBytes("UTF-8"));
8     }

结果依然是正确的!

这里我们要了解服务端使用字符集编码以及浏览器解码的机制:

1:服务器端对数据进行编码,编码时使用字符集(gb2312或者UTF-8),没有指定默认为gb2312

2:浏览器解析response数据时,默认gb2312,它会拿着编码数据导字符集中取查询

如果我们想在浏览器输出99,那么服务端首先端99进行编码,在浏览器端,会拿着99的编码到

字符集中查询编码对应的内容。

1 out.write("99".getBytes("UTF-8"));

对99这个字符串进行UTF-8的编码。

printWriter对象与OutputStream对象

如果想浏览器写图片、视频以及音频文件等二进制文件时,必须使用字节流outputStream。

如果向浏览器写字符串时,可以使用printwriter对象,下面使用printWriter向浏览器写中文:

1 public void doGet(HttpServletRequest request, HttpServletResponse response)
2             throws ServletException, IOException {
3         String data = "好好学习!";
4         //获取向客户端写数据的输出流
5         PrintWriter out = response.getWriter();
6         out.write(data);
7     }

输出结果:

出现乱码,因为response向对数据进行编码时使用的ISO8859-1,而浏览器解析使用的gb2312,所以查询不到,报????

解决方法:

 1 public void doGet(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {
 3         //设置response对数据的编码方式
 4         response.setCharacterEncoding("UTF-8");
 5         //告诉浏览器解码方式
 6         response.setHeader("content-type", "text/html;charset=utf-8");
 7         String data = "好好学习!";
 8         //获取向客户端写数据的输出流
 9         PrintWriter out = response.getWriter();
10         out.write(data);
11     }

输出正确结果:

其实还可以使用response.setContentType("text/html;charset=utf-8");

这是servlet封装好的API,相当于下面两句的内容

//设置response对数据的编码方式
response.setCharacterEncoding("UTF-8");
//告诉浏览器解码方式
response.setHeader("content-type", "text/html;charset=utf-8");

javaweb学习总结二十五(response对象的用法一)相关推荐

  1. javaweb学习总结(二十五)——jsp简单标签开发(一)

    一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编 ...

  2. javaweb学习总结(二十五):jsp简单标签开发(一)

    一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编 ...

  3. javaweb学习总结(二十五)——Apache的DBUtils框架学习

    一.commons-dbutils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化 ...

  4. 【转载】 javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册 - 孤傲苍狼 - 博 http://www.cnblogs.com/xdp-gacl/

    javaweb学习总结(二十二)--基于Servlet+JSP+JavaBean开发模式的用户登录注册 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+Ja ...

  5. JavaScript学习(二十五)—实现无缝滚动

    JavaScript学习(二十五)-实现无缝滚动 效果如下: 代码如下: <!DOCTYPE html> <html lang="en"><head& ...

  6. JVM 学习笔记二十五、JVM监控及诊断工具-命令行篇

    二十五.JVM监控及诊断工具-命令行篇 1.概述 性能诊断是软件工程师在日常工作中经常面对和解决的问题,在用户体验至上的今天,解决好应用软件的性能问题能带来非常大的收益. Java作为最流行的编程语言 ...

  7. Vue学习(三十五)——fetch的用法

    文章目录 一.fetch API 中的 HTTP 请求 二.fetchAPI 中 响应格式 Fetch API是新的ajax解决方案 Fetch会返回Promise fetch不是ajax的进一步封装 ...

  8. javaweb学习总结(四十五)——监听器(Listener)学习二

    一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...

  9. javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

最新文章

  1. mac webpack 版本_晓前端周刊 第48期:EMP面向未来微前端方案正式开源了!玩转 webpack,使你的打包速度提升 90%;...
  2. cannot import name 'ImageRecordInt8Iter'
  3. 将dataGridView数据转成DataTable
  4. CentOS6.7安装elasticsearch5.4 以及kibana
  5. 《JavaScript高级程序设计》阅读笔记(五):ECMAScript中的运算符(一)
  6. php 访问第三方接口吗,PHP-----------HTTP请求的第三方接口
  7. 情怀无价!诺基亚225 4G正式开售:320元
  8. matlab视频旋转振动,基于MATLAB的振动合成及左旋与右旋的动态模拟演示
  9. 网站服务器日志分析,如何进行网站日志分析(理论篇)
  10. django 基础框架学习 (一)
  11. 社会关系分析_肯德基加盟费分析!肯德基加盟流程!肯德基加盟条件2021
  12. 中国“两高”发布司法解释 依法严惩涉地下钱庄犯罪
  13. CentOS下ELK 7.2生产安全部署
  14. 计算机键盘prtscr,键盘上的SCR是什么意思(电脑截图的快捷方式都有哪些)
  15. PCB设计常见的有那些问题
  16. 安装python3-dev_ubuntu16.04安装python3.7
  17. java sdk 1.8环境变量_java sdk环境变量怎么配置
  18. R语言ggplot2可视化哑铃图、强调从一个点到另一个点的变化、数量的变化、客户满意度的变化等(Dumbbell Plot)、为可视化图像添加标题、题注信息
  19. python自动化(六)持续集成:2.Jenkins技术讲解
  20. 新加坡环球影城:新加坡亲子游一日游好去处

热门文章

  1. 170页PPT入门深度强化学习! 汪荣贵 图灵人工智能 昨天
  2. “CRISPR婴儿”计划疯狂重启 顶级科学家们表示无力阻止
  3. 人工智能影响未来娱乐的31种方式
  4. 2019计算与系统神经科学大会Cosyne 前沿研究汇总
  5. 性价比高出英特尔45%,亚马逊的云服务器芯片如何做到?| 解读
  6. 2017,AI偏见为何如此受关注?
  7. 赔腾讯70万,QQ“自动抢红包”软件被判不正当竞争
  8. 涌进体制的技术人:Nature 发文硕士回乡当公务员
  9. 库克:苹果收取 30% 佣金很合理!
  10. 2020 年 11 月程序员工资统计,Java 市场占有率仍第一