[jsp]out.print()和response.getWriter().print()的区别
来源:互联网 发布:统赢慢走丝编程软件 编辑:程序博客网 时间:2024/06/07 16:53
首先,两者的主要区别:
1. 这两个对象的类型是完全不同的:内置对象out的类型是JspWriter;response.getWrite()返回的类型是PrintWriter
2. 获取方式不同:JspWriter是JSP的内置对象,直接使用即可,对象名out是保留字,也只能通过out来调用其相关方法。此外还可以通过内置对象pageContext.getOut();获得;PrintWriter则是在用的时候需要通过内置对象response.getWriter();获得
3. JspWriter的print()方法会抛出IOException;而PrintWriter则不会
4. JspWriter和PrintWriter都继承自Java.io.Writer,但JspWriter是抽象类,而PrintWriter不是
然而最最主要的区别是:如果在同一jsp或Servlet文件中同时使用了JspWriter对象和PrintWriter对象,在调用print或者println方法后的执行情况不同!
有如下的jsp文件:
运行结果如图:
网页源代码如图:
通过两张图可以看出:
PrintWriter对象的输出已经脱离了代码,而JspWriter对 象的输出仍然是在内输出
造成上述表象的原因,比较难用语言形容,我尽量解释清楚:
JspWriter相当于一个带缓冲功能的PrintWriter,它对PrintWriter有依赖。初始化一个JspWriter对象的时候要关联ServletResponse对象的一个PrintWriter对象,最终JspWriter对象的输出任务还是通过与之关联的PrintWriter对象完成的。
白话一点:火车票的两种售票途径,JspWriter对象和PrintWriter对象都可以输出response缓冲区的数据,只是JspWriter对象是个代售点,最终还是得依赖PrintWriter对象。
JspWriter对象不是直接将数据输出到页面,而是将数据先刷新到response的缓冲区,然后等待out内置对象满足一定的条件后才会调用PrintWriter对象的print系列方法把out内置对象的缓冲区中的内容输出到浏览器。
out内置对象调用PrintWriter对象的print系列方法输出缓冲区中内容的条件:
1. 设置page指令的buffer属性关闭了out对象的缓存功能。
2. 写入到out对象中的内容充满了out对象的缓冲区。
3. 整个JSP页面结束。
如果想让PrintWriter对象的输出回到内,只需让内置对象out刷新缓冲区即可,即修改jsp代码为:
运行结果如图:
网页源代码如图:
原文地址:http://blog.csdn.net/j080624/article/details/56009165
- [jsp]out.print()和response.getWriter().print()的区别
- [jsp]out.print()和response.getWriter().print()的区别
- [jsp]out.print()和response.getWriter().print()的区别
- response.getWriter().write()产生乱码及response.getWriter().write和out.print的区别
- response.getWriter().write()与JspWriter的out.print()的区别
- response.getWriter().write()与out.print()的区别
- response.getWriter().write()与out.print()的区别
- response.getWriter().write()与out.print()的区别
- response.getWriter().write()与out.print()的区别
- response.getWriter().write()与out.print()的区别
- response.getWriter().write()与out.print()的区别
- response.getWriter().write()与out.print()的区别
- response.getWriter().write()与out.print()的区别
- response.getWriter().write()与out.print()的区别
- response.getWriter().write()与out.print()的区别
- response.getWriter().write()与out.print()的区别
- 关于response.getWriter().write()与out.print()的区别
- response.getWriter().write()与out.print()的区别
- 用1×2骨牌覆盖n×m棋盘,有多少种方法
- AutoFitTextView-根据文本内容自动调整字体大小的TextView
- 分布式系统的架构思路
- Webstorm2017的激活及汉化
- redis基本命令
- [jsp]out.print()和response.getWriter().print()的区别
- 总结关于在ScrollView里面嵌套listView的一些坑
- POJ2443:Set Operation(bitset)
- RN-性能优化 (一)
- MySQL基础知识点八
- swustoj格雷码(0605)
- 西瓜书学习笔记(二)
- 2017.4.20课
- windows上安装MXNet