美文网首页
JSP九大内置对象之out对象

JSP九大内置对象之out对象

作者: 转身一世琉璃白_4a57 | 来源:发表于2018-08-31 22:07 被阅读0次

    为何会有JSP内置对象

    JSP引擎在调用jspServlet时,会传递或创建9个与web开发相关的对象供jspServlet使用。JSP技术的设计者为便于开发人员编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用

    九个内置对象:

    • page
    • config
    • application
    • request
    • response
    • session
    • out
    • exception
    • pageContext

    out对象

    out对象用于向浏览器输出数据,预制对应的是Servlet的PrintWriter对象,但是这个out对象的类型不是PrintWriter类型,而是JspWriter。
    jsp输出底层使用的是response.getWriter(),这里需要讲解一下JSP缓存和Servlet缓存,输出过程是这样:


    874710-20170222202031054-1615917490.png

     JSP页面转换为Servlet后,使用的out对象是JspWriter类型的,所以是会先将要发送的数据存入JSP输出缓存中,然后,等JSP输出缓存满了在自动刷新到servlet输出缓存,等serlvet输出缓存满了,或者程序结束了,就会将其输出到浏览器上。除非手动out.flush()。


    图片.png
    图片.png

    分析:如果按没有jsp缓存和servlet缓存的话,输出的结果应该是abc,但是输出的却是bac,为什么呢?按照我们上面所说的原理进行分析,out对象是先将其输出到JSP缓存中,所以a加入了jsp缓存,response.getWriter().print("b")是直接将b输出到servlet缓存中,然后又使用out对象将c输出到jsp缓存,到程序结束,servlet缓存中有b,然后jsp会将缓存中的内容就刷新到servlet缓存中,serlvet就是bac了,然后到浏览器也就得到我们的输出结果了。如果将out.flush()注释去掉,答案就是abc。原因是我们手动的将jsp缓存里面的数据刷新到servlet缓存里面了。

    out对象的API

    • int getBufferSize()【得到缓存大小】
    • int getRemaining()【得到未使用缓存的大小】
    • boolean isAutoFlush()
    • void println()
    • void flush()
    • void close()
    • void clearBuffer()
    • void clear()

    相关文章

      网友评论

          本文标题:JSP九大内置对象之out对象

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