(javaweb-05) HttpServletResponse

Web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,和代表响应的一个HttpServletResponse

如果要获取客户端请求过来的参数:找HttpServletRequest
如果要给客户端响应一些信息:找HttpServletResponse

一、方法简单分类

1、负责向浏览器发送数据的方法
ServletOutputStream getOutputStream() throws IOException; //写平常的流
使用:response.getOutputStream().write(data.getBytes(“UTF-8”));
PrintWriter getWriter() throws IOException; //一般写中文
使用: response.getWriter().write(data);

2、负责向浏览器发送一些响应头的方法
void setCharacterEncoding(String var1); //响应编码
void setContentLength(int var1); //响应的字符串长度
void setContentLengthLong(long var1);
void setContentType(String var1); //类型
void setDateHeader(String var1, long var2);
void addDateHeader(String var1, long var2);
void setHeader(String var1, String var2);
void addHeader(String var1, String var2);
void setIntHeader(String var1, int var2);
void addIntHeader(String var1, int var2);

3、响应状态码
int SC_OK = 200; //正常
int SC_MULTIPLE_CHOICES = 300; //重定向
int SC_NOT_FOUND = 404; //资源找不到
int SC_INTERNAL_SERVER_ERROR = 500; //服务器端错误
int SC_BAD_GATEWAY =502; //网关错误

二、常见用法

1、向浏览器输出消息

resp.getWriter().print(data);

2、下载文件

  1. 要获取下载文件的路径
  2. 下载的文件名是什么
  3. 设置想办法让浏览器能够支持下载我们需要的东西
  4. 获取下载文件的输入流
  5. 创建缓冲区
  6. 获取OutputStream对象
  7. 将FileOutputStream流写入到buffer缓冲区
  8. 使用OutputStream将缓冲区中的数据输出到客户端

servlet.java:

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、要获取下载文件的路径
        //String path = this.getServletContext().getRealPath("/1.png"); 无法获取
        //System.out.println(path);   //C:\Users\yili\Desktop\LingNan\JAVA\Environment\Tomcat\apache-tomcat-9.0.44\webapps\re\1.png
		//target下资源的路径
        String path ="C:\\Users\\yili\\Desktop\\LingNan\\JAVA\\javaweb-02-maven\\HelloServletResponse\\target\\HelloServletResponse\\WEB-INF\\classes\\1.png";
        //2、下载的文件名是什么
        String filename = path.substring(path.lastIndexOf("\\") + 1);//1.png
        //3、设置想办法让浏览器能够支持下载我们需要的东西
        resp.setHeader("Content-Disposition", "attachment;filename="+filename);
        //4、获取下载文件的输入流
        FileInputStream is = new FileInputStream(path);
        //5、创建缓冲区
        int len =0;
        byte[] buffer =new byte[1024];
        //6、获取OutputStream对象  将流响应回去
        ServletOutputStream outputStream = resp.getOutputStream();
        //7、将FileOutputStream流写入到buffer缓冲区
        while ((len=is.read(buffer))!=-1){
            // 8、使用OutputStream将缓冲区中的数据输出到客户端
            outputStream.write(buffer,0,len);
        }
        //9、关闭输入流和输出流
        is.close();
        outputStream.close();
    }

在这里插入图片描述

3、验证码

servlet.java

 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //让浏览器5秒刷新一次
        resp.setHeader("refresh","5");
        //在内存中创建一个图片
        BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB); //参数 长 宽 颜色
        //得到图片
        Graphics2D graphics = (Graphics2D) image.getGraphics(); //画笔
        //设置图片的背景颜色
        graphics.setColor(Color.pink);
        graphics.fillRect(0,0,80,20);   //从(0,0)填充到(80,20)
        //给图片写数据
        graphics.setColor(Color.blue);  //颜色
        graphics.setFont(new Font(null,Font.BOLD,20));  //字体
        graphics.drawString(roundnum(),0,20);   //画字符串
        //告诉浏览器这个请求用图片的方式打开
        resp.setContentType("image/jpeg");  //规定image/jpeg  请求将是图片
        //网站有缓存, 不让浏览器缓存
        resp.setDateHeader("expires",-1);  //让浏览器不去缓存图片
        resp.setHeader("Cache-Control","no-cache"); //缓存策略为不缓存
        resp.setHeader("Pragma","no-cache");

        //把图片写给浏览器 ImageIO专门写图片
        ImageIO.write(image,"jpg",resp.getOutputStream());
    }
   
   //生成随机数方法
 private String roundnum() {
        Random random = new Random();
        // 要点:1、9999 随机数4位   2、   + "" 变为字符串
        String num = random.nextInt(9999) + "";
        /*在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer*/
        StringBuffer sb = new StringBuffer();
        /*保证 随机数一定是4位数
            如若生成随机数是3位  循环条件4-3 进入循环 则有一位用0补上
         * */
        for (int j = 0; j < 4 - num.length(); j++) {	
            sb.append("0");		
        }
        num = sb.toString() + num;
        System.out.println(num);
        return num;
    }

每5s刷新
在这里插入图片描述

并且是以图片的形式、就是因为设置了setContentType(“image/jpeg”)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值