response、request对象

Tomcat收到客户端的http请求,会针对每一次请求,分别创建一个代表请求的request对象、和代表响应的response对象

既然request对象代表http请求,那么我们获取浏览器提交过来的数据,找request对象即可。response对象代表http响应,那么我们向浏览器输出数据,找response对象即可。

什么是HttpServletResponse对象?

http响应由状态行、实体内容、消息头、一个空行组成。HttpServletResponse对象就封装了http响应的信息。

1、HttpServletResponse的应用

调用getOutputStream()方法向浏览器输出数据,getOutputStream()方法可以使用print()也可以使用write(),它们有什么区别呢?我们试验一下。代码如下

  //获取到OutputStream流ServletOutputStream servletOutputStream = response.getOutputStream();//向浏览器输出数据servletOutputStream.print("aaaa");

成功输出,好像没什么毛病。

但是输入中文时报错了

为什么会出现异常呢?在io中学过,outputStream是输出二进制数据的,print()方法接收了一个字符串,print()方法要把中文改成二进制数据,Tomcat使用ISO 8859-1编码对其进行转换,“中国”根本对ISO 8859-1编码不支持。所以出现了异常

我们再看看write()方法,先向浏览器输出英文数据

 response.getOutputStream().write("aaa".getBytes());//没有问题response.getOutputStream().write("你好呀我是中国".getBytes());//中文也同时没有问题

为什么使用write()方法能够正常向浏览器输出中文呢?“你好呀我是中国”.getBytes()这句代码在转成byte[]数组的时候默认查的是gb2312编码,而"你好呀我是中国"支持gb2312编码,所以可以正常显示出来。

但是,程序要实现通用性,应该使用的是UTF-8编码,我们在字符串转换成字节数组时指定UTF-8编码。
这时,我们需要使用消息头

 //设置头信息,告诉浏览器我回送的数据编码是utf-8的response.setHeader("Content-Type", "text/html;charset=UTF-8");response.getOutputStream().write("你好呀我是中国".getBytes("UTF-8"));

浏览器在显示数据时,自动把页面的编码格式置换成UTF-8,乱码问题也解决了。
另外,除了使用HttpServletResponse对象设置消息头的方法,我可以使用html的标签模拟一个http消息头

 //获取到servletOutputStream对象ServletOutputStream servletOutputStream = response.getOutputStream();//使用meta标签模拟http消息头,告诉浏览器回送数据的编码和格式servletOutputStream.write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'>".getBytes());servletOutputStream.write("我是中国".getBytes("UTF-8"));

乱码问题也可以解决

2、调用getWriter()方法向浏览器输出数据

对于getWriter()方法而言,是Writer的子类,那么只能向浏览器输出字符数据,不能输出二进制数据

使用getWriter()方法输出中文数据,代码如下:

    //获取到printWriter对象PrintWriter printWriter = response.getWriter();printWriter.write("看完博客点赞!");

喜闻可见的事又出现了,我又出现乱码了。

为什么出现乱码了呢?由于Tomcat是外国人的写,Tomcat默认的编码是ISO 8859-1,当我们输出中文数据的时候,Tomcat会依据ISO 8859-1码表给我们的数据编码,中文不支持这个码表呀,所以出现了乱码

既然如此,我设置一下编码不就好了吗,代码如下:

    //原本是ISO 8859-1的编码,我设置成UTF-8response.setCharacterEncoding("UTF-8");//获取到printWriter对象PrintWriter printWriter = response.getWriter();printWriter.write("看完博客点赞!");

为什么乱码问题还没有解决?因为浏览器使用GB2312显示UTF-8的数据,不乱码才怪呢

这个问题我们在上面已经是有两种方法解决了【使用标签模拟消息头、设置消息头】,Servlet还提供了一个方法给我们

    //设置浏览器用UTF-8编码显示数据response.setContentType("text/html;charset=UTF-8");

好的,我们再来访问一下

既然Servlet有那么多方法解决乱码问题,是不是有一种是最简便的呢?没错!下面这个方法是最简便的,它不仅设置浏览器用UTF-8显示数据,内部还把中文转码的码表设置成UTF-8了,也就是说,

response.setContentType(“text/html;charset=UTF-8”);

response.setCharacterEncoding(“UTF-8”)
的事情也干了!

使用getWriter()显示中文数据,只需要一个方法就搞掂了!

    //设置浏览器用UTF-8编码显示数据,response.setContentType("text/html;charset=UTF-8");//获取到printWriter对象PrintWriter printWriter = response.getWriter();printWriter.write("看完博客点赞!");

JSP/Servlet临汾天泰学习笔记(一)相关推荐

  1. JSP/Servlet临汾天泰学习笔记(二)JSP数据交互

    20190923上课记录 JSP内置对象 (内置对象,jsp中默认创建的对象,我们可直接使用) 常用的内置对象有五个:out.request.response.session.application ...

  2. struts2 jsp跳转action 404_Struts2 学习笔记(三)

    1. Struts2的拦截器 1.1 拦截器概述 1.1.1 什么是拦截器 Interceptor:拦截器,起到拦截Action的作用: Filter:过滤器,过滤从客户端向服务器发送的请求: Int ...

  3. JSP、Servlet、JDBC学习笔记

    WEB的学习 * 服务器 * 网络的架构(面试题) * C/S client/server 客户端/服务器端 例子:QQ 快播 暴风影音 * 优点:交互性好,服务器压力小. * 缺点:客户端更新了,下 ...

  4. JSP自定义标签学习笔记

    http://blog.csdn.net/liangbinny/article/details/6309893 本文是本人学习<JavaWeb学习>书籍所记下的学习笔记 一.概述 JSP ...

  5. 基于weblogic 的EJB 学习笔记-JSP教程,资料/其它

    http://www.west263.com/www/info/14655-1.htm ejb 学习笔记 1.ejb 基础知识 (1) 无状态会话bean     不保存客户机的会话状态     优点 ...

  6. [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)...

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. 【学习笔记】JSP学习笔记(上)

    我是灼灼,一只初学Java的大一金渐层. 向往余秀华和狄兰·托马斯的疯狂,时常沉溺于将情感以诗相寄:追逐过王尔德.王小波的文字,后陷于毛姆和斯蒂芬·金不可自拔:热爱文学的浪潮,白日梦到底却总在现实里清 ...

  8. Javaweb学习笔记(JSP标准标签库)

    Javaweb学习笔记(JSP标准标签库) JSTL入门 安装和测试JSTL JSTL中的Core标签库 < c:out>标签 标签 标签 < c:catch>标签 标签 标签 ...

  9. Jsp学习笔记——第二天

    Jsp学习打卡 Jsp学习笔记---第二天 Jsp笔记 第二天 一. 复习 二. 动作元素(包含,转发) 1. 包含动作 [重点] 2. 转发动作 [了解] 三. 隐含对象(内置对象) 1. 概念 2 ...

最新文章

  1. Linux 之父归来!
  2. 各种远程通信协议比较RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等
  3. Java数据结构和算法:线性表
  4. SQL SERVER-日期按时区转换
  5. nfs服务器与客户端配置
  6. 深度学习:向人工智能迈进
  7. 怎么把路由的#号去掉_VLAN应用篇系列:交换机VLAN间路由与传统单臂路由(子接口)方式...
  8. JavaScript-概述
  9. ajax请求成功后返回值如何赋值给js变量
  10. 精通MVC3摘译(9)-过滤器
  11. 公钥 私钥_比特币私钥、公钥、钱包地址之间的关系
  12. Linux下Vivado安装流程
  13. 算数,关系,逻辑运算
  14. 马小云:利用信息差赚钱的暴利创业项目 ,批量开店月入3万
  15. Last-Modified和Etag
  16. FCN网络(Fully Convolutional Networks for Semantic Segmentation)
  17. 【数据库】对不起navicat我投入了DataGrip的怀抱
  18. Vue.js + axios 实现excel下载
  19. 深入浅出TCP/UDP 原理-UDP篇(2)及完整MATLAB实现UDP通信
  20. QT自定义精美换肤界面

热门文章

  1. 一张表中存商品分类,商品下面还有分类的建表方法
  2. 《天引》读书笔记——由新月形面积引发的人类长达2000年的探索。
  3. uniapp一键翻卡牌 小程序appH5都支持
  4. 行星怎么画简单又漂亮,有手就会系列,超级简单!
  5. 一文搞懂产品中的搜索设计
  6. 强化学习之策略迭代求解冰冻湖
  7. 爬虫实例:每日一文和豆瓣电影
  8. 负数的二进制,原,反,补
  9. 晒图赢大奖 | 这个十一,烤仔陪你看世界!
  10. 社招进京东真的很难吗?小伙毕业2年有幸获得京东内推,3面技术官直接拿下offer!