两者的主要区别:
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不是
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8" buffer="1kb" autoFlush="true" %> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 11 aaaaaaaaaaaaa 12 <% 13 for(int i=0;i<9;i++){ 14 out.print("b"); 15 16 } 17 %> 18 <br/> 19 <% 20 response.getWriter().write("cccccccccccc"); 21 response.flushBuffer(); 22 %> 23 24 ddddddddddddddddd 25 </body> 26 </html>
先看上面这段代码的输入
源代码
也就说明了一间事,当只执行 response.getWriter().write("cccccccccccc");的时候直接想客户端传输了一段文字
而,out.write.相当于把数据缓冲在了,out缓冲区中,等页面结束的时候,调用了writer类的write方法,想客户端输送了自己缓存的文字
好再看一个例子
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8" buffer="1kb" autoFlush="true" %> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 11 aaaaaaaaaaaaa 12 <% 13 for(int i=0;i<900;i++){ 14 out.print("b"); 15 16 } 17 %> 18 <br/> 19 <% 20 response.getWriter().write("cccccccccccc"); 21 response.flushBuffer(); 22 %> 23 24 ddddddddddddddddd 25 </body> 26 </html>
我把循环改成了900,也就是说,我的out缓冲区满了,这时候out.writezi自动调用了父类的write方法,把内容输出到了客户端
原文地址:https://www.cnblogs.com/albertzhangyu/p/8932998.html
时间: 2024-10-16 21:18:22