博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javaweb学习总结二十五(response对象的用法一)
阅读量:6568 次
发布时间:2019-06-24

本文共 3136 字,大约阅读时间需要 10 分钟。

一: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("
".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");

转载地址:http://wepjo.baihongyu.com/

你可能感兴趣的文章
【LeetCode-面试算法经典-Java实现】【015-3 Sum(三个数的和)】
查看>>
编程之美初赛第一场
查看>>
安卓APK瘦身
查看>>
java操作impala
查看>>
将jsp页面转pdf
查看>>
python 字典的系列操作
查看>>
如何计算两个文档的相似度(一)
查看>>
第一课:数据结构的基本概念和术语
查看>>
php缓存技术
查看>>
.NET开发必备网址
查看>>
jQuery 闭包
查看>>
Early Z Culling
查看>>
QTableView中使用Delegate方式来实现对特定列的文本进行换行
查看>>
JS打字效果的动态菜单代码分享
查看>>
20175317 《Java程序设计》第一周学习总结
查看>>
轮询 长轮询 websocket
查看>>
屏幕取色工具
查看>>
spring包自动扫描声明
查看>>
Xen之初体验:HA(额外附加)
查看>>
Python学习笔记(八)—使用正则获取网页中所需要的信息。
查看>>