HTTP---HttpServletResponse接口(重点)

7.HttpServletResponse接口(重点)
7.1.是ServletResponse的子接口,表示HTTP协议的响应对象(该接口中包含了处理响应的方法)
7.2.这些方法的主要功能是设置HTTP状态码和管理Cookie
7.3.代表服务器的响应,封装了向客户端发送数据、发送响应头,发送响应状态码的方法

   HttpServletResponse常用方法示例:
     1.负责向客户端(浏览器)发送数据的相关方法
       (1)以字节流输出,getOutputStream()示例:
              public void outputChineseByOutputStream(HttpServletResponse response) throws IOException{
              String data = "中国";
              //获取OutputStream输出流
              OutputStream outputStream = response.getOutputStream();
              //通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码
              response.setHeader("content-type", "text/html;charset=UTF-8");
              //将字符转换成字节数组,指定以UTF-8编码进行转换
              byte[] dataByteArr = data.getBytes("UTF-8");
              //使用OutputStream流向客户端输出字节数组
              outputStream.write(dataByteArr);//输出“中国”}
       (2)以字符流输出,getWriter()示例:
              public void outputChineseByPrintWriter(HttpServletResponse response) throws IOException{
              String data = "中国";
              //设置将字符以"UTF-8"编码输出到客户端浏览器
              response.setCharacterEncoding("UTF-8");
              //获取PrintWriter输出流
              PrintWriter out = response.getWriter();
              //使用PrintWriter流向客户端输出字符
              out.write(data);
     注:getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法
            response.setContentType("text/html;charset=UTF-8");字符流,字节流均可用
    2.负责向客户端(浏览器)发送响应头的相关方法
       (1)addHeader(String name, String value):用给出的name和value,增加一个响应报头到响应中
       (2)containsHeader(String name):判断以name为名字的响应报头是否已经设置
       (3)setHeader(String paramString1, String paramString2):用给出的name和value,设置一个响应报头。如果这个报头已经被设置,新的值将覆盖先前的值
    3.负责向客户端(浏览器)发送响应状态码的相关方法
         setStatus(int paramInt):为响应设置状态代码
   4.其余可能用到的方法
       (1)addCookie(Cookie paramCookie):增加一个Cookie到响应中。这个方法可以被多次调用,用于设置多个Cookie
       (2)encodeURL(String paramString):使用Session ID对指定的url进行编码。如果该url不需要编码,则返回未改变的url
       (3)encodeRedirectURL(String paramString):使用Session ID对用于重定向的url进行编码,以便用于sendRedirect()方法中。如果该url不需要编码,则返回未改变的url
       (4)sendRedirect(String paramString):发送一个临时的重定向响应到客户端,让客户端访问新的URL

7.4.主要作用就是输出数据到页面上

 HttpServletResponse常用应用示例:
 在总结ServletResponse时,已经对常用场景进行过简单介绍,这里再次进行总结!!!
 1. 输出数据(2种方式)
    (1)getOutputStream():以字节流输出
    (2)getWriter():以字符流输出
    上面已经做过示例!!
 2.文件下载示例
    文件下载功能是web开发中经常使用到的功能,使用HttpServletResponse对象就可以实现文件的下载!
    private void downloadFileByOutputStream(HttpServletResponse response)
        throws FileNotFoundException, IOException {
     //1.获取要下载的文件的绝对路径
     String realPath = this.getServletContext().getRealPath("/download/1.JPG");
     //2.获取要下载的文件名
     String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);
     //3.设置content-disposition响应头控制浏览器以下载的形式打开文件
     response.setHeader("content-disposition", "attachment;filename="+fileName);
     //4.获取要下载的文件输入流
     InputStream in = new FileInputStream(realPath);
     int len = 0;
     //5.创建数据缓冲区
     byte[] buffer = new byte[1024];
     //6.通过response对象获取OutputStream流
     OutputStream out = response.getOutputStream();
     //7.将FileInputStream流写入到buffer缓冲区
     while ((len = in.read(buffer)) > 0) {
     //8.使用OutputStream将缓冲区的数据输出到客户端浏览器
         out.write(buffer,0,len);
     }
     in.close();
 }
 }
 注:使用PrintWriter流处理字节数据,会导致数据丢失,因此在编写下载文件功能时,要使用OutputStream流,避免使用PrintWriter流!!
 3.生成验证码
    (1)生成随机图片用作验证码主要用到了一个BufferedImage类
    public void doGet(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
         //设置refresh响应头控制浏览器每隔5秒钟刷新一次
         response.setHeader("refresh", "5");
         //1.在内存中创建一张图片
        BufferedImage image = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);
        //2.得到图片
        Graphics2D g = (Graphics2D)image.getGraphics();
        g.setColor(Color.WHITE);//设置图片的背景色
        g.fillRect(0, 0, 80, 20);//填充背景色
       //3.向图片上写数据
       g.setColor(Color.BLUE);//设置图片上字体的颜色
       g.setFont(new Font(null, Font.BOLD, 20));
       g.drawString(makeNum(), 0, 20);
       //4.设置响应头控制浏览器浏览器以图片的方式打开
       response.setContentType("image/jpeg");//等同于response.setHeader("Content-Type", "image/jpeg");
       //5.设置响应头控制浏览器不缓存图片数据
       response.setDateHeader("expries", -1);
       response.setHeader("Cache-Control", "no-cache");
       response.setHeader("Pragma", "no-cache");
       //6.将图片写给浏览器
       ImageIO.write(image, "jpg", response.getOutputStream());
       }

猜你喜欢

转载自blog.csdn.net/qq591009234/article/details/89451342
今日推荐