• Servlet学习(五)——通过response设置响应体及中文乱码问题


    1、响应体设置文本

    PrintWriter writer=response.getWriter();

    获得字符流,通过字符流的write(String s)方法可以将字符串设置到response 缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览器端。

    关于设置中文乱码问题:

    response缓冲区的默认编码是iso8859-1,此码表中没有中文,可以通过response的setCharacterEncoding(String charset)设置response的编码;

    但我们发现客户端还是不能正常显示文字

    原因:我们将response缓冲区的编码设置成UTF-8,但浏览器的默认编码是本地系统的编码,因为我们都是中文系统,所以客户端浏览器的默认编码是GBK,

    1)我们可以手动修改浏览器的编码是UTF-8

    2)我们还可以在代码中指定浏览器解析页面的编码方式,通过response的setContentType(String type)方法指定页面解析时的编码是UTF-8,response.setContentType("text/html;charset=UTF-8");

    图解原因:

    具体代码:

    在实际开发中,通常使用封装后的response.setContentType("text/html;charset=UTF-8");

    以上就可以解决页面输出中文乱码问题。

    2、响应体设置字节

    ServletOutputStream out=response.getOutputStream();

    获得字节流,通过该字节流的write(byte[] bytes)可以向response缓冲区中写入字节,再由Tomcat服务器将字节内容组成Http响应返回给浏览器。

    案例:页面输出图片a.jpg

     1 package com.itheima.context;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.IOException;
     5 import java.io.InputStream;
     6 
     7 import javax.servlet.ServletException;
     8 import javax.servlet.ServletOutputStream;
     9 import javax.servlet.http.HttpServlet;
    10 import javax.servlet.http.HttpServletRequest;
    11 import javax.servlet.http.HttpServletResponse;
    12 
    13 public class ByteServlet extends HttpServlet {
    14 
    15     public void doGet(HttpServletRequest request, HttpServletResponse response)
    16             throws ServletException, IOException {
    17         //使用response获得字节输出流
    18         ServletOutputStream out=response.getOutputStream();
    19         //获得服务器上的图片
    20         String realPath=this.getServletContext().getRealPath("a.jpg");
    21         InputStream in=new FileInputStream(realPath);
    22         
    23         int len=0;
    24         byte[] buffer=new byte[1024];
    25         while((len=in.read(buffer))>0){
    26             out.write(buffer,0,len); 
    27         }
    28         
    29         in.close();
    30         out.close();
    31     }
    32 
    33     public void doPost(HttpServletRequest request, HttpServletResponse response)
    34             throws ServletException, IOException {
    35         doGet(request, response);
    36     }
    37 }

    运行程序,客户端页面显示图片a

  • 相关阅读:
    NOIP2009 靶形数独
    NOIP2014 寻找道路
    NOIP2005 篝火晚会
    NOIP2014 联合权值
    NOIP2011 选择客栈
    luogu2659 美丽的序列
    NOIP2008 传纸条
    vijos1642 班长的任务
    codevs1427 RQNOJ204 特种部队
    AC自动机
  • 原文地址:https://www.cnblogs.com/cxq1126/p/7629945.html
Copyright © 2020-2023  润新知