• Response对象-响应字符数据


    Response响应数据

    1. response将字符数据返回到浏览器

    需要两步:

    1. 通过response对象获取字符输出流PrintWriter writer = resp.getWriter();
    2. 通过字符输出流写数据:writer.writer(“aaa”);
      案例
      浏览器中打印出字符
    /**
     * 响应字符数据:设置字符数据的响应体
     */
    @WebServlet("/resp3")
    public class ResponseDemo3 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            //1. 获取字符输出流
            PrintWriter writer = response.getWriter();
    		 writer.write("aaa");
        }
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doGet(request, response);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    还可以返回html字符串,并且浏览器能解析出来,如下:

    PrintWriter writer = response.getWriter();
    //content-type,告诉浏览器返回的数据类型是HTML类型数据,这样浏览器才会解析HTML标签
    response.setHeader("content-type","text/html");
    writer.write("

    aaa

    "
    );
    • 1
    • 2
    • 3
    • 4

    注意: 一次请求响应结束后,response对象就会被销毁,所以不要手动关闭流

    提醒 如果要返回一个中文字符串你好,需要设置响应数据编码为utf-8

    //设置响应的数据格式及数据的编码
    response.setContentType("text/html;charset=utf-8");
    writer.write("你好");
    
    • 1
    • 2
    • 3

    2. response响应字节数据

    需要将字节数据写回到浏览器,我们需要两个步骤:

    • 通过response对象获取字节输出流:servletOutputStream outputStream = resp.getOutputStream();
    • 通过字节输出流写数据:outputStream。write(字节数据);
      1.返回一个图片文件到浏览器,如下:
    /**
     * 响应字节数据:设置字节数据的响应体
     */
    @WebServlet("/resp4")
    public class ResponseDemo4 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1. 读取文件
            FileInputStream fis = new FileInputStream("d://a.jpg");
            //2. 获取response字节输出流
            ServletOutputStream os = response.getOutputStream();
            //3. 完成流的copy
            byte[] buff = new byte[1024];
            int len = 0;
            while ((len = fis.read(buff))!= -1){
                os.write(buff,0,len);
            }
            fis.close();
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doGet(request, response);
        }
    }
    
    • 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

    上述代码中,对于流的copy的代码还是比较复杂的,所以我们可以使用别人提供好的方法来简化代码的开发,具体的步骤如下:

    1. pom.xml添加依赖
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 调用工具类方法
    //fis:输入流
    //os:输出流
    IOUtils.copy(fis,os);
    
    • 1
    • 2
    • 3

    优化代码之后:

    /**
     * 响应字节数据:设置字节数据的响应体
     */
    @WebServlet("/resp4")
    public class ResponseDemo4 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1. 读取文件
            FileInputStream fis = new FileInputStream("d://a.jpg");
            //2. 获取response字节输出流
            ServletOutputStream os = response.getOutputStream();
            //3. 完成流的copy
          	IOUtils.copy(fis,os);
            fis.close();
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doGet(request, response);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

  • 相关阅读:
    【校招VIP】互联网校招项目&实习对项目的要求不重要?大错特错!你忽略掉的项目考察重点都在这里!
    java94-cpu随机调用线程测试
    也谈编译期操作
    LVS+Keepalived
    一:Spring源码解析之prepareRefresh()
    聚观早报 |OPPO Reno11系列官宣;荣耀100系列渲染图
    ASO优化如何做?3个核心要点必须掌握
    【【萌新的SOC学习之AXI DMA环路测试介绍】】
    【多线程&并发篇】(01)
    Git远程分支操作
  • 原文地址:https://blog.csdn.net/qq_53037676/article/details/125994707