美文网首页
JSP内置对象out.clear(),flush(),clear

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

作者: 汽水味丶嗝 | 来源:发表于2018-06-13 21:45 被阅读0次

    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" %>
    <html>
      <head>
        <title>problem test page</title>
      </head>
      <body>
                <p> HELLO</p>
        <%
            StringBuffer str = new StringBuffer("hello");
            out.print(str);
            out.clear();
             if (response.isCommitted()){
                out.print("TRUE");
            }
            else {
                out.print("FALSE");
            }
        %>
      </body>
    </html>
    

    输出截图:


    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"%>
    <html>
    <head>
        <title>我是Title</title>
    </head>
    <body>
        <p>HELLO</p>
        <%
            out.print("0这行?");
            out.flush();
            out.print("1这行有吗????");
             if (response.isCommitted()){
                out.print("TRUE");
            }
            else {
                out.print("FALSE");
            }
        %>
    
    </body>
    </html>
    

    输出截图:


    图2.png

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

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

    <%--
      Created by IntelliJ IDEA.
      User: Iverson3
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>我是Title</title>
    </head>
    <body>
        <p>HELLO</p>
        <%
            out.print("0这行?");
            out.clearBuffer();
            out.print("1这行有吗????");
            if (response.isCommitted()){
                out.print("TRUE");
            }
            else {
                out.print("FALSE");
            }
        %>
    </body>
    </html>
    

    输出截图:


    截图3.png

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


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

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

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

    相关文章

      网友评论

          本文标题:JSP内置对象out.clear(),flush(),clear

          本文链接:https://www.haomeiwen.com/subject/znpseftx.html