感谢原文作者:krismile__qh
原文链接:https://blog.csdn.net/krismile__qh/article/details/89926001
一、response.getWriter().write()和
response.getWriter().print()的区别
response.getWriter()
返回的是PrintWriter
,这是一个打印输出流
response.getWriter().write()
和 response.getWriter().print()
是响应给客户端的东西,如果不用ajax
接收将数据放在合适的位置,就会在浏览器上生成一个新的页面来显示内容。
response.getWriter().print()
,不仅可以打印输出文本格式的(包括html标签),还可以将一个对象以默认的编码方式转换为二进制字节输出
writer
response.getWriter().writer()
,只能打印输出文本格式的(包括html标签),不可以打印对象
客户端演示代码:
<head>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#button1").click(function(){
$.get("AJAXServer",null,function(data){
alert(data);
$("#info").html(data);
});
});
})
</script>
</head>
<body>
<input type="button" id="button1" value="点我获取服务器响应信息" onclick="a()";/>
</body>
输出对象服务器端代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Person person = new Person();
person.setName("sjl");
response.getWrier().print(person);
}
运行结果
server.Person@5bd5ab
//如果使用response.getWriter().writer(),则代码会报错
总结:
(1)、write()
:仅支持输出字符类型数据,字符、字符数组、字符串等
(2)、print()
:可以将各种类型(包括Object)的数据通过默认编码转换成bytes字节形式,这些字节都通过write(int c)方法被输出
二、response.getWriter()获得的PrintWriter对象和out对象的区别
(1)、out
和response.getWriter
的类不一样,一个是JspWriter
,另一个是java.io.PrintWriter
。
(2)、执行原理不同:
JspWriter
相当于一个带缓存功能的printWriter
,它不是直接将数据输出到页面,而是将数据刷新到response
的缓冲区后再输出response.getWriter
直接输出数据(response.print()
),所以(out.print
)只能在其后输出。
(3)、out
为jsp的内置对象,刷新jsp页面,自动初始化获得out
对象,所以使用out
对象是需要刷新页面的
而response.getWriter()
响应信息直接输出到网页上,当响应结束时它自动被关闭,与jsp页面无关,无需刷新页面
形象的比喻:当我们调用response.getWriter()
这个对象同时获得了网页的画笔,这时你就可以通过这个画笔在网页上画任何你想要显示的东西。
(4)、out
的print()
方法和println()
方法在缓冲区溢出并且没有自动刷新时候会产生ioexception
,
而response.getWrite()
方法的print
和println
中都是抑制ioexception
异常的,不会有
javascript ioexception out.println("");
方法并不能也页面布局换行,只能领html代码换行,要实现页面布局换行可以:out.println("</br>");