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

一: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");
时间: 2024-10-08 12:56:38

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

javaweb学习总结二十六(response对象的用法二 下载文件)

一:浏览器打开服务器上的文件 1:读取服务器上面的资源,如果在web层,可以直接使用servletContext,如果在非web层 可以使用类加载器读取文件 2:向浏览器写数据,实际上是把数据封装到response对象上,然后服务器发现response中响应 体中有数据绑定,然后写给浏览器 3:设置响应头,控制浏览器的读取或者解析方式 如下:打开服务器上的图片 1 /**在页面上查看图片*/ 2 private void viewImage(HttpServletResponse respons

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

一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编写和调用的SimpleTag接口来实现标签的功能. 实现SimpleTag接口的标签通常称为简单标签.简单标签共定义了5个方法: setJspContext方法 setParent和getParent方法 setJspBody方法 doTag方法(非常重要),简单标签使用这个方法就可以完成所有的业务

javaweb学习总结(二十八)——JSTL标签库之核心标签【转】

原文地址:javaweb学习总结(二十八)——JSTL标签库之核心标签 一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心标签(用得最多) 国际化标签(I18N格式化标签) 数据库标签(SQL标签,很少使用) XML标签(几乎不用) JSTL函数(EL函数) 三.核心标签库使用说明 JSTL的核心标签库标签共13个,使用这些标签能够完成JSP页面的

angular学习笔记(二十五)-$http(3)-转换请求和响应格式

本篇主要讲解$http(config)的config中的tranformRequest项和transformResponse项 1. transformRequest: $http({ transformRequest: function(data){ //对前台发送的data进行处理 return data } }) 这个在测试的时候遇到了很大的问题.只要经过transformRequest函数处理,哪怕是不做任何处理,node后台都会报错,需要尝试使用php 2. transformResp

马哥学习笔记二十五——ISCSI协议,架构及其安装配置

ISCSI监听在tcp/3260端口 iSCSI Target:iscsi-target-utils 客户端认正方式: 1.基于IP 2.基于用户,CHAP tgtadm:命令行工具,模式化命令 --mode 常用模式:target,logicalunit,account target --op new.delete.show.update.bind.unbind logicalunit --op new.delete account --op new.delete.bind.unbind --

Android学习笔记二十五之ListView多布局实现

Android学习笔记二十五之ListView多布局实现 这一节是介绍ListView这个控件的最后一节,实现一个Item的多布局.像我们经常在用的各种即时通讯工具,QQ.微信等,假设他们的会话界面是ListView实现的,那么ListView就有多种Item布局,这一节,我们就来实现一个ListView的多种Item. 要实现ListView里面有多种Item,就要重写适配器的两个方法getViewTypeCount()和getItemViewType(int position),第一个方法是

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

一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器. 这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换

javaweb学习总结二十四(servlet经常用到的对象)

一:ServletConfig对象 1:用来封装数据初始化参数,在服务器web.xml配置文件中可以使用<init-param>标签配置初始化参数. 2:实例演示 web.xml文件中配置初始化参数: 1 <servlet> 2 <servlet-name>ServletDemo</servlet-name> 3 <servlet-class>com.hlcui.servlet.ServletDemo</servlet-class>

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

一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模式,通过这个用户登录注册程序综合案例,把之前的学过的XML.Xpat