Jsp页面中out.write()和response.getWriter().write()的差异

  1. JspWriter类和PrintWriter类都是是java.io.Writer类的子类。
  2. out是jsp内置的JspWriter单例对象,也可以直接用pageContex.getOut()得到out对象;在jsp(HttpServlet中也是一样)中以"PrintWriter pw = response.getWriter();"这样的形式获得PrintWriter对象。
  3. 在Jsp页面上,用这两对象同时使用wirte()方法(或print()方法或println()方法)输出数据,PrintWriter中的数据会先输出,除非输出后调用flush()。原因:JspWriter相当于一个带缓存功能的printWriter(),它不是直接将数据输出到页面,而是将数据输出到response的缓冲区,然后再由response.getWriter()调用输出;response.getWriter则是直接输出数据。

JspWriter和PrintWriter虽然都是java.io.Writer类的子类的子类,但它们的关系不仅于此:JspWriter是抽象类,而PrintWriter不是,JspWriter对PrintWriter有依赖。初始化一个JspWriter对象的时候要关联ServletResponse对象的一个PrintWriter类型对象,最终JspWriter对象的输出任务还是通过这个PrintWriter类型对象做的。

 

 1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 2 <%@ page import="java.io.PrintWriter" %>
 3 <%@ page import="javax.servlet.jsp.JspWriter" %>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <head>
 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 8 <title>Insert title here</title>
 9 </head>
10 <body>
11     <%
12         out.println("out");
13         JspWriter out1 = pageContext.getOut();
14         if (out == out1) {
15             out.println("out==out1");
16             /* out.flush(); */
17             
18         } else {
19             out.println("out!=out1");
20             /* out.flush(); */
21             
22         }
23         out.write("hello");
24         /* out.flush(); */
25 
26         PrintWriter pw = response.getWriter();
27         pw.write("pw writer");
28         /* pw.flush(); */
29         /* pw.close(); */
30     %>
31 </body>
32     This my JSP page.
33 </html>

接着说说print方法和write方法

  以PrintWriter类为例子,write():仅支持输出字符类型数据,int、字符、字符数组、字符串;print():可以将各种类型(包括Object)的数据输出,通过默认编码转换成bytes字节形式,这些字节都通过write(int c)方法被输出。println()同print(),只是代码结尾多换行。

 

  

 参考:

http://www.cnblogs.com/Fskjb/archive/2009/08/03/1537338.html

http://blog.csdn.net/javaloveiphone/article/details/8133772

posted on 2016-09-10 23:40  拉桑  阅读(551)  评论(0)    收藏  举报