JspWriter与PrintWriter的关系:

来源:互联网 发布:react java服务端渲染 编辑:程序博客网 时间:2024/05/03 20:30

1.都是继承自java.io.Writer类.

JspWriter可以在JSP页面中直接用out对象输出.可以用pageContext.getOut();得到JspWriter对象.
PrintWrietr在JSP页面中必须用response.getWriter();方法得到其对象.二者作用域不同.

2.在JSP页面中同时调用两种方法向页面输出数据,PrintWriter中的数据会输出在JspWriter前面.

如:

        JspWriter out1 = pageContext.getOut(); //在JSP页面中可以直接使用out对象,而不用像这
样用pageContext.getOut();来得到JspWriter对象.这样做得到的out1和JSP页面中封装的out对象是同
一个对象.(可以用out == out1 来判断两个对象是否相等.)

out1.print("222");
PrintWriter pw = response.getWriter();
       
pw.print("111");

      *这样做的结果,在浏览器端还是先显示 "111",然后再显示"222".说明不管JspWriter与PrintWriter在程序中的顺序怎么样,始终先会输出PringWriter中的数据然后再输出JspWriter中的数据.这是因为out对象相当于插入到了PrintWriter前面的缓冲区中.out对象满足一定条件时,才会调用PrintWriter对象的print()方法,把out缓冲区中的内容输出到浏览器端.如果想让上面的代码的按代码的先后顺序输出可以写成:

spWriter out1 = pageContext.getOut();

out1.print("222");

out1.flush(); //刷新缓冲区

PrintWriter pw = response.getWriter();
       
pw.print("111");

       *out对象调用PrintWriter对象的print( )方法输出缓冲区中的内容的条件:

^设置page指令的buffer属性关闭了out对象的缓存功能
^写入到out对象中的内容充满了out对象的缓冲区
^整个JSP页面结束

 

 

原创粉丝点击