JSP内置对象out.clear(),flush(),clearBuffer()方法

out对象中的clear(),flush(),clearBuffer()都是清楚缓存用的。详细比较一下,错误及遗漏的请多指正。
缓冲区用来缓存即将输出到页面的数据。
这三种方法也同时作用于print()缓冲区,所以和html页面输出一同作为参考。验证使用request对象的isCommit()方法判断服务端是否把缓冲区数据传送到客户端。


out.clear()是直接清空缓冲区数据,不输出到客户端且刷新缓存时抛出异常

<%--
  Created by IntelliJ IDEA.
  User: Iverson3
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    problem test page
  
  
            

HELLO

<% StringBuffer str = new StringBuffer("hello"); out.print(str); out.clear(); if (response.isCommitted()){ out.print("TRUE"); } else { out.print("FALSE"); } %>

输出截图:


JSP内置对象out.clear(),flush(),clearBuffer()方法_第1张图片
TIM截图1.png

可以看到原本应该输出的HELLO没有输出,title标签中的标题也没了。
我们再将out.clear()与out.print(str)调换顺序,此时可以输出hello。
isCommit()输出false。


out.flush()先输出缓冲区数据再清空。

<%--
  Created by IntelliJ IDEA.
  User: Iverson3
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>


    我是Title


    

HELLO

<% out.print("0这行?"); out.flush(); out.print("1这行有吗????"); if (response.isCommitted()){ out.print("TRUE"); } else { out.print("FALSE"); } %>

输出截图:


JSP内置对象out.clear(),flush(),clearBuffer()方法_第2张图片
图2.png

可以看到输出都有,isCommit返回true.

out.clearBuffer() 清空缓冲区,不输出到客户端

<%--
  Created by IntelliJ IDEA.
  User: Iverson3
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    我是Title


    

HELLO

<% out.print("0这行?"); out.clearBuffer(); out.print("1这行有吗????"); if (response.isCommitted()){ out.print("TRUE"); } else { out.print("FALSE"); } %>

输出截图:


JSP内置对象out.clear(),flush(),clearBuffer()方法_第3张图片
截图3.png

可以看到clearBuffer之前的都没输出,isCommit()输出false.
再clearBuffer之前加上flush()则会显示内容。


TIP: 如果在clear()之前,加入flush(),则会抛出IOException,clearBuffer之前加上flush()则会显示内容。

1.response.flushBuffer()out.flush()方法可以将缓冲区数据写到客户端;

  1. 缓冲区已满输出到客户端

你可能感兴趣的:(JSP内置对象out.clear(),flush(),clearBuffer()方法)