javaweb学习总结二十五(response对象的用法一)
一:Reponse对象的概念
当客户端发送http请求时,服务器端会对每一次请求,创建request对象和response对象。

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

二:response对象案例分析

1:向客户端输出中文数据
package com.hlcui.servlet; import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class ServletDemo6 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { String data = "好好学习!";
//获取向客户端写数据的输出流
OutputStream out = response.getOutputStream();
out.write(data.getBytes());
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
} }
浏览器打印:

结果正确!
这里面要注意,因为我在服务器端对数据进行编码时,没有指定使用哪种字符集,所以默认是使用gb2312,
而浏览器端解析时也是gb2312,所以正确显示,如果我指定编码字符为UTF-8,结果如下:
使用UTF-8对数据进行编码:
out.write(data.getBytes("UTF-8"));
打印结果为乱码:

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

可以通过设置浏览器的查看方式(使用UTF-8解析服务器发送过来的数据),但是不是根本办法,最好的办法是在
服务器端告诉浏览器以何种方式进行解码。修改如下:
response.setHeader("content-type", "text/html;charset=utf-8");

结果是正确的!
可以使用html标签中meta进行模拟服务器response响应头:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String data = "好好学习!";
//获取向客户端写数据的输出流
OutputStream out = response.getOutputStream();
out.write("<meta http-equiv='content-type' content='text/html;charset=utf-8'>".getBytes());
out.write(data.getBytes("UTF-8"));
}

结果依然是正确的!
这里我们要了解服务端使用字符集编码以及浏览器解码的机制:
1:服务器端对数据进行编码,编码时使用字符集(gb2312或者UTF-8),没有指定默认为gb2312
2:浏览器解析response数据时,默认gb2312,它会拿着编码数据导字符集中取查询
如果我们想在浏览器输出99,那么服务端首先端99进行编码,在浏览器端,会拿着99的编码到
字符集中查询编码对应的内容。
out.write("99".getBytes("UTF-8"));
对99这个字符串进行UTF-8的编码。
printWriter对象与OutputStream对象
如果想浏览器写图片、视频以及音频文件等二进制文件时,必须使用字节流outputStream。
如果向浏览器写字符串时,可以使用printwriter对象,下面使用printWriter向浏览器写中文:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String data = "好好学习!";
//获取向客户端写数据的输出流
PrintWriter out = response.getWriter();
out.write(data);
}
输出结果:

出现乱码,因为response向对数据进行编码时使用的ISO8859-1,而浏览器解析使用的gb2312,所以查询不到,报????
解决方法:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置response对数据的编码方式
response.setCharacterEncoding("UTF-8");
//告诉浏览器解码方式
response.setHeader("content-type", "text/html;charset=utf-8");
String data = "好好学习!";
//获取向客户端写数据的输出流
PrintWriter out = response.getWriter();
out.write(data);
}
输出正确结果:

其实还可以使用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对象的用法一)的更多相关文章
- javaweb学习总结二十六(response对象的用法二 下载文件)
一:浏览器打开服务器上的文件 1:读取服务器上面的资源,如果在web层,可以直接使用servletContext,如果在非web层 可以使用类加载器读取文件 2:向浏览器写数据,实际上是把数据封装到r ...
- Javaweb学习笔记——(十)——————response对象,response字符流缓冲器,响应头,状态码,重定向,requset对象,路径和乱码
请求响应对象: request和response *当服务器接收都请求后,服务器会创建request和response对象,把请求数据封装到request对象中: *然后调用Servlet的sevic ...
- javaweb学习总结(二十五)——jsp简单标签开发(一)
一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编 ...
- python3.4学习笔记(二十五) Python 调用mysql redis实例代码
python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...
- 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧
目录 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧 25.1 Shell中的色彩处理 25.2 awk基本应用 25.2.1 概念 25.2.2实例演示 25.3 awk ...
- java web学习总结(二十五) -------------------JSP中的九个内置对象
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- javaweb学习总结二十四(servlet经常用到的对象)
一:ServletConfig对象 1:用来封装数据初始化参数,在服务器web.xml配置文件中可以使用<init-param>标签配置初始化参数. 2:实例演示 web.xml文件中配置 ...
- javaweb学习总结(四十五)——监听器(Listener)学习二
一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...
- javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
随机推荐
- ActiveMQ简介与安装
开源消息总线 支持JMS1.1和J2EE 1.4规范的 JMS Provider实现(持久化,XA消息,事务) 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去 支持 ...
- Android与.Net交互模拟用户屏幕操作添加APN和网络4G/3G切换
前几天接到一个需求,我们的客户需要对手机网络接入点进行可用性测试,简单点说就是需要实现Android上的APN配置的添加,APN切换网络模式4G/3G/2G切换,我要调研下写个demo. 因为是要实现 ...
- Android Fragment详解
一.什么是Fragment Android在3.0中引入了fragments的概念,主要目的是用在大屏幕设备上--例如平板电脑上,支持更加动态和灵活的UI设计.平板电脑的屏幕要比手机的大得多,有更多的 ...
- Slony-I的限制
限制如下: http://slony.info/documentation/limitations.html Slony-I does not automatically replicate •Cha ...
- 数据结构之hash表
哈希表是种数据结构,它可以提供快速的插入操作和查找操作.hash定义了一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法.由于通过更短的哈希值比用原始值 ...
- android用NDK编译出so最简单的方法
其实只要是有个jni的文件夹,再放个Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hell ...
- Jquery Mobile 百度地图 Demo
首先非常感谢franck分享的Demo! Demo截图: 下面是franck对此Demo的说明: 原理:1.通过百度拾取坐标系统获得点位的坐标. http://api.map.baidu.com/lb ...
- poj 1845 Sumdiv 约数和定理
Sumdiv 题目连接: http://poj.org/problem?id=1845 Description Consider two natural numbers A and B. Let S ...
- 移动端折腾国外分享(facebook、twitter、linkedin)
一.前言 国内做HTML5页面,关注最多就是微信分享了,之前也写过关于微信分享的文章,可以点击查看:分享相关文章 再者,就是国内的其它分享,比如常用的新浪微博.腾讯微博.QQ空间等等,最方便的就是直接 ...
- Effective C++ Item 37 绝不又一次定义继承而来的缺省參数值
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:绝对不要又一次而来的缺省參数值.由于缺省參数值都是静态绑定,而 virtual 函数 ...