jsp内置对象out 和response.getwriter().write()的区别
Posted 缘在此季
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp内置对象out 和response.getwriter().write()的区别相关的知识,希望对你有一定的参考价值。
1
1<%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8" buffer="0kb" 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");这一句的时候,就是把“cccccccccccc”一段字母缓存在了response缓存区,这时候没有响应给客户端,然后在接着执行,等所有的页面都执行完,out缓冲区的数据会flush到response缓冲区,这个时候开始相应客户端,而“cccccccccc”这一段自然就会在html标签的上面先响应给浏览器。
2,下面看第二种情况,我把buffer的缓冲区大小设置为0
<%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8" buffer="0kb" 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>
输入如下:
说明我把buffer设置成0的时候页面不缓冲数据,每执行一行,就会放置到response的缓冲区,自然就在最头部,然后执行到response.getWriter().write("cccccccccccc");这一句的时候同样插入到了response缓冲区,这样就按照顺序,执行,直到最后输出信息都写入response缓冲区为止,开始相应客户端。所以看到的自然就是按照顺序的。
3种情况,我给当前page页面的缓冲区设置了1kb当页面内容满了之后,out会自动调用,flush方法,这个时候,直接把page缓冲取得内容响应给客户端,所以就会出现,“cccccccccc”穿插在了一串bbb中,这是应为
循环的时候有吧bbbb缓存到page缓冲区,就相当于第一种方法的那个过程了。大家应该理解了吧。
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>
以上是关于jsp内置对象out 和response.getwriter().write()的区别的主要内容,如果未能解决你的问题,请参考以下文章