从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

    • 服务器软件

    • 环境管理和配置管理-科普篇
    • Servlet入门

      • 什么是Servlet
      • Servlet入门案例
      • Servlet生命周期
      • Servlet中的注解
      • Tomcat集成IDEA
      • Servlet体系结构
      • HTTP协议基础
      • 深入request和response对象
      • request对象基本使用
      • request其他功能
      • Servlet实现登录功能
      • HTTP协议基础-响应
      • Response对象基本使用
      • response对象之重定向
      • response输出字符到浏览器
        • 入门
        • 乱码问题
      • response输出字节数据
      • 验证码案例
      • ServletContext
      • 文件下载案例
      • Cookie笔记
      • Cookie的更多细节
      • Cookie实践:记住上次访问时间
      • JSP入门
      • JSP的内置对象和案例
      • IDEA与JavaWeb的小技巧
      • Session笔记
      • 验证码案例
      • JSP深入学习
      • MVC开发模式
      • EL表达式和JSTL标签
      • JSTL标签库
      • 案例:列表的增删改查
      • Filter学习
      • Filter案例
      • Listener学习
      • Java中的Ajax
      • Java中的JSON
      • Servlet
    • JavaWeb
  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java并发

  • Java源码

  • JVM

  • 韩顺平

  • Java
  • Java
  • JavaWeb
  • Servlet入门
2023-04-17
目录

response输出字符到浏览器

# 55.response输出字符到浏览器

本文说明下如何输出字符数据到浏览器上显示

‍

# 入门

输出字符的步骤:

  • 获取字符输出流
  • 通过流输出数据

使用这个流不用flush,因为Servlet响应后会调用flush并销毁这个流。

‍

package com.peterjxl.response;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/responseDemo4")
public class ResponseDemo4 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1.获取字符输出流
        PrintWriter writer = resp.getWriter();
    

        // 2.通过流输出数据
        writer.write("Hello Response");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

‍

重启服务器,访问http://localhost:8080/hello/responseDemo4,可以看看浏览器上显示了字符

​​

‍

也可以显示HTML字符串:

// writer.write("Hello Response");
writer.write("<h1>This is HTML</h1>");
1
2

​​

‍

‍

‍

‍

‍

# 乱码问题

如果我们输出中文,会发现浏览器上是乱码的:

writer.write("<h1>This is HTML</h1>");
writer.write("<h1>从01开始</h1>");
1
2

​​

‍

‍

为什么乱码?

  1. 客户浏览器使用的编码是自己系统本身的编码,例如在国内,经常是GBK;
  2. 而服务器使用的是国外的编码(Tomcat是国外的),PrintWriter pw = response.getWriter();​ 获取的流的默认编码是ISO-8859-1;
  3. 最后解码失败,导致乱码

‍

‍

解决方法:

  1. 获取流之前,设置response的默认编码
  2. 告诉浏览器响应体使用的编码,建议浏览器使用该编码来解析数据

‍

例如,我们设置编码为GBK:

resp.setCharacterEncoding("GBK");

// 1.获取字符输出流
PrintWriter writer = resp.getWriter();

// 2.通过流输出数据
writer.write("<h1>This is HTML</h1>");
writer.write("<h1>从01开始</h1>");
1
2
3
4
5
6
7
8

​

重启Tomcat,访问效果如下:

​

‍

并不推荐设置response对象的编码格式。目前没有乱码是因为我们在国内访问,大部分使用的都是国内的编码;而如果是国外访问,则又会乱码了。

‍

‍

推荐的方式是设置编码并告诉浏览器,服务器用的是什么编码:

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

// 1.获取字符输出流
PrintWriter writer = resp.getWriter();


// 2.通过流输出数据
writer.write("<h1>This is HTML</h1>");
writer.write("<h1>从01开始</h1>");
1
2
3
4
5
6
7
8
9

使用setHeader不仅仅告诉浏览器响应消息用的是什么类型,也顺便设置了response的类型,因此我们可以省略设置编码的代码:resp.setCharacterEncoding("GBK");​

‍

‍

也可以使用这个写法设置header:

resp.setContentType("text/html;charset=utf-8");
1
在GitHub上编辑此页 (opens new window)
上次更新: 2023/5/6 21:54:08
response对象之重定向
response输出字节数据

← response对象之重定向 response输出字节数据→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式