Jsp页面中out.write()和response.getWriter().write()的差异
- JspWriter类和PrintWriter类都是是java.io.Writer类的子类。
- out是jsp内置的JspWriter单例对象,也可以直接用pageContex.getOut()得到out对象;在jsp(HttpServlet中也是一样)中以"PrintWriter pw = response.getWriter();"这样的形式获得PrintWriter对象。
- 在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
浙公网安备 33010602011771号