out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。
JSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。
下面来演示下out对象的使用
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>out演示</title>
</head>
<body>
<%
out.write("哈哈哈哈哈");
response.getWriter().write("喔喔喔喔喔");
%>
</body>
</html>
在浏览器中访问http://localhost:8080/day08/out.jsp,得到下面的结果:
为什么“喔喔喔喔喔”在“哈哈哈哈哈”前面呢?下面来看下out的工作原理图:
只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
1)设置page指令的buffer属性关闭了out对象的缓存功能
2)out对象的缓冲区已满
3)整个JSP页面结束
所以在JS开发的时候,最好使用了out,就不要再使用response.getWrite()。