简述: getWriter().print()getWriter().write()的区别。

本文初发于 “曾晨de小站” zengchen233.cn,同步转载于此。

resp.getWriter()返回的是PrintWriter,这是一个打印输出流,他提供的方法是:

  • write():仅支持输出字符类型数据,字符、字符数组、字符串等
  • print():可以将各种类型(包括Object)的数据通过默认编码转换成bytes字节形式,这些字节都通过write(int c)方法被输出

resp.getWriter().print(),不仅可以打印输出文本格式的(包括html标签),还可以将一个对象以默认的编码方式转换为二进制字节输出。

resp.getWriter().writer(),只能打印输出文本格式的(包括html标签),不可以打印对象

示例代码:

package cn.zengchen233.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;


//中文数据怎么传递
public class CookieDemo03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("utf-8");
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");

        PrintWriter out = resp.getWriter();
        Cookie[] cookies = req.getCookies();//返回数组,cookie可能存在多个
        //判断cookie=是否存在
        if(cookies != null){
            //如果存在怎么办
            out.write("您上一次访问本站的时间是:");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                //回去cookie的名字
                if (cookie.getName().equals("name")) {
                    out.write(cookie.getValue());
                }
            }
        }else {
            out.write("这是你第一次访问本站");
        }
        Cookie cookie = new Cookie("name","曾晨");
        resp.addCookie(cookie);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

print()方法是将包括(Object)的数据通过默认编码转换成bytes字节形式,这些字节都通过write(int c)方法被输出,最终还是使用了write()方法。