Response学习笔记

Response学习笔记

功能

  1. 设置响应行
    1. 格式:HTTP/1.1 200 ok
    2. 设置状态码:setStatus(int sc)
  2. 设置响应头:setHeader(String name,String value)
  3. 设置响应体
    • 使用步骤:
    • 获取输出流
      • 字符输出流: PrintWriter getWriter()
      • 字节输出流 ServletOutputStream getOutputStream()
    • 使用输出流,将数据输出到客户端浏览器

案例

  • 重定向

    • 重定向:资源跳转的方式

    • 设置响应头:setHeader(“location”,资源路径)/response.sendDirect(资源路径)

    • 转发的特点:forward

      1. 转发地址栏路径不变
      2. 转发只能访问当前服务器下的资源
      3. 转发是一次请求,可以通过requset对象来共享数据
    • 重定向的特点:redirect

      1. 重定向地址栏路径改变
      2. 重定向可以访问其他服务器下的资源
      3. 重定向是两次请求,不能用requset对象来共享数据
    • 路径写法

      1. 路径分类

        1. 相对路径:通过相对路径不可以确定唯一资源

          如:./index.html 不以/开头,以.开头路径

          规则:找到访问当前资源和目标资源之间的相对位置关系

          ​ *./:当前目录

          ​ *…/:后退一级目录

        2. 绝对路径:通过绝对路径可以确定唯一资源

          如:http://localhost/responseDemo1 以/开头的路径

          规则:判断定义的路径是谁用的?判断请求将来从哪发出

          • 给客户端浏览器使用的:需要加虚拟目录
            • 建议虚拟目录动态获取:requset.getContextPath()
          • 给服务器使用不需要加虚拟目录
            • 转发路径
  • 服务器输出字符数据到浏览器

    • 步骤

      • 获取字符输出流
      • 输出数据
    • 注意:

      • 乱码问题:

        • printWriter();通过流的形式获取数据 获取的默认编码是ISO-8859-1

        • 设置流的编码

        • 告诉浏览器响应体使用的编码

          response.setContentType("text/html;charset=utf-8 ")
          
  • 服务器输出字节数据到浏览器

    • 步骤
      • 获取字节输出流
      • 输出数据
  • 验证码

    • 本质:图片
    • 目的:防止恶意注册
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int width = 100;
        int height = 50;
        
        //1.创建对象,在内存中画图(验证码图片对象)
        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        
        //2.美化图片
        //2.1填充背景色
        Graphics g = image.getGraphics();
        g.setColor(Color.PINK);
        g.fillRect(0,0,width,height);
        //2.2画边框
        g.setColor(Color.BLUE);
        g.drawRect(0,0,width-1,height-1);
        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZAabcdefghijklmnopqrstuvwxyz0123456789";

        //生成随机角标
        Random ran = new Random();
        for(int i = 1 ; i <= 4 ; i++ ) {
            int index = ran.nextInt(str.length());
            //获取字符
            char c = str.charAt(index);
            //2.3写验证码
            g.drawString(c + "", width/5*i, 25);

        }
        //2.4画干扰线
        g.setColor(Color.GREEN);
        //生成随机坐标点
        for (int i = 0 ; i < 10 ; i ++) {
            int x1 = ran.nextInt(width);
            int x2 = ran.nextInt(width);
            int y1 = ran.nextInt(height);
            int y2 = ran.nextInt(height);
            g.drawLine(x1, x2, y1, y2);
        }
        //3.将图片输出到页面展示
        ImageIO.write(image,"jpg",resp.getOutputStream());
        

    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值