输出的不同之处
首先,我们来看一下我们通过切换out.write和response.getWriter在浏览器上输出的区别:
out.write输出语句放在最后:
response.getWriter输出语句放在最后:
这里就不跟大家罗嗦了,这两种不同顺序代码输出结果一模一样,输出如下:
到这里,想必你也想看看不一样的长啥样的吧!!
所以此处我们添加了下图中的第二行代码,详情请关注下下张输出图片吧.
添加代码后的输出结果为:
不一样的是出来了,那么这是为什么呢?
详细解释
两者主要区别:
- out.write()
javax.servlet.jsp public abstract class JspWriter extends java.io.Writer
内置对象out的类型是JspWriter - response.getWriter()
javax.servlet.ServletResponse public abstract java.io.PrintWriter getWriter() throws java.io.IOException
response.getWrite()返回的类型是java.io.PrintWriter
使用方式不同
- JspWriter是JSP的内置对象,直接使用即可,对象名out是保留字,也只能通过out来调用其相关方法。
- PrintWriter则是在用的时候需要通过内置对象response.getWriter()获得,并且JspWriter相当于一个带缓冲功能的printWriter,它不是直接将数据输出到页面
- 在JSP页面代码执行完成后,会执行两个操作:
执行out.flush()操作,会把out缓冲区中的数据追加到response缓冲区中去;
再执行response刷新操作,把全部数据写给客户端
过程分析
接下来,分析一下下面结果执行过程
out.write(“out输出1”); 执行后向out缓冲区写入数据
out.flush(); 执行后将out缓冲区中的数据追加到response缓冲区中
response.getWriter(“response输出1”)
response.getWriter(“response输出2”) 将数据写入response缓冲区中
out.write(“out输出2”) 执行后向out缓冲区写入数据
之后,JSP代码执行完成后,再次执行out.flush()将out缓冲区中的数据追加到response缓冲区中
最终,输出到浏览器.