【假期Java学习】第九天 Response使用(下载文件和验证码实现)

第九天

Response

获取客户端请求的参数:HttpServletRequest
给客户端响应:HttpServletResponse

  • 向浏览器发送数据
ServletOutputStream getOutputStream()
PrintWriter getWriter()
  • 常见应用方式
  1. 向浏览器输出消息
  2. 下载文件

下载文件的过程

  1. 获取下载文件的路径
  2. 下载的文件名
  3. 设置浏览器支持下载
  4. 获取下载文件的输入流
  5. 创建缓冲区
  6. 获取OutputStream对象
  7. 将FileOutputStream流写入到buffer缓冲区
  8. 使用OutputStream将缓冲区中的数据输出到客户端
package com.ztl.response;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;

public class FileServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 获取下载文件的路径
        String path = "F:\\JavaWeb\\javaweb-maven-02\\javaweb-maven\\target\\classes\\3.jpg";
        System.out.println("Path is "+path);
        //2. 下载的文件名
        String fileName = path.substring(path.lastIndexOf("\\")+1);
        //3. 设置浏览器支持下载
        resp.setHeader("Content-Disposition","attachment;filename"+fileName);
        //4. 获取下载文件的输入流

        FileInputStream in = new FileInputStream(path);

//5. 创建缓冲区

        int len = 0;
        byte[] buffer = new byte[1024];

//6. 获取OutputStream对象

        ServletOutputStream out = resp.getOutputStream();

//7. 将FileOutputStream流写入到buffer缓冲区

        while((len=in.read(buffer))>0){
            out.write(buffer,0,len);
        }
        in.close();
        out.close();

//8. 使用OutputStream将缓冲区中的数据输出到客户端
    }

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


}

下载成功
在这里插入图片描述

验证码功能实现

  • 过程
  1. 浏览器自动刷新
  2. 创建一个内存图片
  3. 得到图片
  4. 给图片上色并写入验证码
  5. 选择浏览器上图片打开方式
  6. 浏览器进行缓存
  7. 给浏览器发送图片
package com.ztl.response;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

public class ImageServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //浏览器3秒自动刷新
        resp.setHeader("refresh","3");
        //创建一个图片
        BufferedImage image = new BufferedImage(50,20,BufferedImage.TYPE_INT_RGB);
        //得到图片
        Graphics2D g = (Graphics2D) image.createGraphics();
        //设置背景色
        g.setColor(Color.WHITE);
        g.fillRect(0,0,50,20);

        //写入验证码数据
        g.setColor(Color.BLUE);
        g.setFont(new Font(null,Font.BOLD,20));
        g.drawString(getNumber(),0,20);

        //浏览器上图片打开方式
        resp.setContentType("image/jpeg");

        //浏览器进行缓存
        resp.setDateHeader("expires",-1);
        resp.setHeader("Cache-Control","no-cache");
        resp.setHeader("Pragma","no-cache");

        //将图片发给浏览器
        ImageIO.write(image,"jpg",resp.getOutputStream());

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
    protected String getNumber()
    {
        String num = new String();
        Random random = new Random();
        //若位数不够,在数字前补零
        num = String.format("%04d",random.nextInt(9999));
        return num;
    }

}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值