JavaWeb ------ HttpServletResponse类

HttpServletResponse

简单说明

      HttpServletResponse 类和 HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会创建一个 Response 对象传 递给 Servlet 程序去使用。
      HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息, 我们如果需要设置返回给客户端的信息,都可以通过 HttpServletResponse 对象来进行设置

两个输出流的简要说明

类型 用法 解释
字节流 getOutputStream(); 常用于下载(传递二进制数据)
字符流 getWriter(); 常用于回传字符串(常用)

重要说明:

  • 两个流同时只能使用一个,否则就会报错;

给客户端回传字符串数据

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter writer = response.getWriter();
        //下面两种都可以
        writer.print("response1");
        writer.write("response2");
    }

中文乱码

问题描述

writer.print("我是中文");
在这里插入图片描述

解决方法

解决方法一

JavaWeb默认字符集为ISO-8859-1,不支持中文,所以我们需要自己设置
response.setCharacterEncoding("UTF-8");此时暴露了新问题乱码
在这里插入图片描述
为什么呢?因为我们刚刚设置的是服务器的字符集为UTF-8,但此时客户端的字符集与服务端不同,造成编码格式不匹配,简单来说就是客户端浏览器编码格式不匹配服务端,因此可以通过设置响应头解决,再加上response.setHeader("Content-Type", "text/html; charset=UTF-8");即可,这样浏览器便知道了你的编码格式
完整代码如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setHeader("Content-Type", "text/html; charset=UTF-8");
        response.setCharacterEncoding("UTF-8");
        PrintWriter writer = response.getWriter();
        writer.print("我是中文");
    }

解决方法二(推荐)

推荐第二种,它会同时设置服务器和客户端都使用 UTF-8 字符集,还设置了响应头

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter writer = response.getWriter();
        writer.print("我是中文");
    }

猜你喜欢

转载自blog.csdn.net/solitudi/article/details/107239630