1. 问题
- Response.getWriter().write() 与 JSP 中 out.print() 有什么区别?
2. 解答
1. write() 和 print() 方法的区别
write()
:仅支持输出字符类型数据,如:字符、字符数组、字符串等。
print()/println()
:可以将各种类型(包括 Object)的数据通过默认编码转换成 bytes 字节形式,这些字节都通过 write(int c)
方法被输出。
2. Response.getWriter() 和 JSP 中 out 的区别
Response.getWriter
和 JSP 中 out
的类不一样:
Response.getWriter
是 java.io.PrintWriter,PrintWriter 是一个继承了 Writer 的普通类;
out
是 JspWriter,JspWriter 是一个抽象类。
- 执行原理不同:JspWriter 相当于一个带缓存功能的 PrintWriter,它不是直接将数据输出到页面,而是将数据刷新到 Response 的缓冲区后再输出。也就是说,out 对象实际上是对 PrintWriter 有依赖的,他需要先将要输出的内容存到 Response 的缓冲区里面, 然后等待 JSP 页面中的 out 满足一定条件之后,才会调用输出的方法把内容直接输出到页面上。换句话说,getWriter() 方法的执行结果,总是优先于 out 对象。
Response.getWriter.print
直接输出数据
out.print
只能在其后输出
out
为 JSP 的内置对象,刷新 JSP 页面,自动初始化获得 out 对象,所以使用 out 对象是需要刷新页面的;而 Response.getWriter()
响应信息通过 out 对象输出到网页上,当响应结束时它自动被关闭,与 JSP 页面无关,无需刷新页面。
out
的 print() 方法和 println() 方法在缓冲区溢出并且没有自动刷新时候会产生 IOException;而 Response.getWrite()
方法的 print 和 println 中都是抑制 IOException 异常的,因此不会有 IOException。
3. Response.getWriter().write() 与 JSP 中 out.print() 的其他区别
out.println();
方法也不能直接页面布局换行,只能用 HTML 代码换行,例如:out.println("</br>");
。
原文链接:https://qwert.blog.csdn.net/article/details/105608123