out对象
在JSP页面中,经常需要向客户端发送文本内容,这时,可以使用out对象来实现。out对象是javax.servlet.jsp.JspWriter类的实例对象,它的作用与ServletResponse.getWriter()方法返回的PrintWriter对象非常相似,都是用来向客户端发送文本形式的实体内容。不同的是,out对象的类型为JspWriter,它相当于一种带缓存功能的PrintWriter。接下来,通过一张图来描述JSP页面的out对象与Servlet引擎提供的缓冲区之间的工作关系,具体如图1所示。
图1 out对象与Servlet引擎的关系
从图1可以看出,在JSP页面中,通过out隐式对象写入数据相当于将数据插入到JspWriter对象的缓冲区中,只有调用了ServletResponse.getWriter()方法,缓冲区中的数据才能真正写入到Servlet引擎所提供的缓冲区中。
为了验证上述说法是否正确,接下来,通过一个具体的案例来演示,如例1所示。
例1 out.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8"%>
2 <html>
3 <head>
4 <title>Insert title here</title>
5 </head>
6 <body>
7 <%
8 out.println("first line<br>");
9 response.getWriter().println("second line<br>");
10 %>
11 </body>
12 </html>
启动tomcat服务器,在浏览器中访问http://localhost:8080/chapter07/out.jsp
,浏览器的显示界面如图2所示。
图2 运行结果
从图2中可以看出,尽管out.println语句位于response.getWriter().println语句之前,但它的输出内容却在后面。由此可以说明,out对象通过print语句写入数据后,直到整个JSP页面结束,out对象中输入缓冲区的数据(即:first line)才真正写入到Serlvet引擎提供的缓冲区中,而response.getWriter().println语句则是直接把内容(即:second line)写入Servlet引擎提供的缓冲区中,Servlet引擎按照缓冲区中的数据存放顺序输出内容。