Response

Response

  • 设置响应消息:
    1. 设置响应行
      • 设置状态码:setStatus(int sc)
    2. 设置响应头
      • setHeader(Sting name, Sring value)
    3. 设置响应体:
      • 使用步骤:
        1. 获取输出流
        2. 使用输出流将数据输出到客户端浏览器

案例:

  1. 完成重定向
  • 重定向:资源跳转的方式

  • 代码:

    //设置状态码
    resp.setStatus(302);
    //设置重定向资源location路径
    resp.setHeader("location","/javaweb_tomcat_war_exploded/ResponseDemo02");
  • 简化写法:resp.sendRedirect("/javaweb_tomcat_war_exploded/ResponseDemo02");

  • 重定向的特点:

    1. 浏览器地址栏发生变化
    2. 重定向可以访问其他站点(服务器)的资源
    3. 重定向是两次请求,不能使用request对象共享数据
  • 路径写法:

    1. 路径分类:
      1. 相对路径:通过相对路径不可以确定唯一资源
        • 如:./index.html
        • 不以/开业,以.开头的路径
        • 规则:找到当前资源和目标资源之间的关系
          • ./:当前目录
          • ../:后退一级目录
      2. 绝对路径:通过相对路径可以确定唯一资源
        • 如:http://localhost/day15/responseDemo2
        • 以/开头的路径
        • 规则:判断定义的路径给谁用
          • 给客户端浏览器使用:需要加虚拟目录(项目的访问路径)
            • 建议虚拟目录动态获取:request.getContextPath()
          • 给服务使用:不需要加虚拟目录
  1. 服务器输出字符数据到浏览器

    • 步骤:
      1. 获取字符输出流
      2. 输出数据
    • 注意:乱码问题
      • 获取的流的默认编码格式是ISO-8859-1,需要设置该流的默认编码,告诉浏览器响应体使用的编码。
      • resp.setContentType("text/html;charset=utf-8");在获取流之前设置
  2. 服务器输出字节数据到浏览器

    • 步骤:
      1. 获取字节输出流
      2. 输出数据
  3. 验证码

    public class CheckCodeServlet extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int width = 100;
        int height = 50;
    
        //创建对象,在内存中和代表图片(验证码图片对象)
        BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        //美化图片
        //获取画笔对象
        Graphics graphics = bufferedImage.getGraphics();
        //设置填充的背景色
        graphics.setColor(Color.PINK);
        //设置填充开始的坐标以及宽度高度,填充一个矩形
        graphics.fillRect(0, 0, width, height);
        //设置边框的颜色
        graphics.setColor(Color.BLUE);
        //从坐标处画一个边框,因为边框的有1px的宽度,所有宽度和高度要减去1
        graphics.drawRect(0, 0, width - 1, height - 1);
        //设置验证码的颜色
        graphics.setColor(new Color(214, 24, 215));
        //随机生成4个验证码,放入图中
        String str = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm0123456789";
        Random random = new Random();
        for (int i = 1; i <= 4; i++) {
            int index = random.nextInt(str.length());
            char ch = str.charAt(index);
            graphics.drawString(ch + "", width / 5 * i, height / 2);
        }
        //设置干扰线的颜色
        graphics.setColor(Color.RED);
        //随机生成10条干扰线放入图中
        for (int i = 0; i < 10; i++) {
            int x1 = random.nextInt(width);
            int y1 = random.nextInt(height);
            int x2 = random.nextInt(width);
            int y2 = random.nextInt(height);
            graphics.drawLine(x1, y1, x2, y2);
        }
        //将图片输出到页面
        ImageIO.write(bufferedImage, "jpg", resp.getOutputStream());
    }
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信