Response

*功能:设置响应消息

  1.设置响应行:

    1.格式:HTTP/1.1 200 ok

    2.设置状态码:setStatus(int sc)

  2.设置响应头:setHeader(String name ,String value)

  3.设置响应体:

    *使用步骤:

        1.获取输出流

            *字符输出流:PrintWriter getWriter()

            *字节输出流:ServletOutputStream getOutputStream()

        2.使用输出流,将数据输出到客户端浏览器

*重定向:

  方法:response.sendRedirect()

  特点:

    1.地址栏发生变化

    2.可以访问别的站点

    3.重定向是两次请求,不能用request域共享对象

  路径写法:

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

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

          ./:当前目录

          ../:后退一级目录

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

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

        *给客户端浏览器使用:需要加虚拟目录

          *建议虚拟目录动态获取:request.getContextPath()

        *给服务器用:不需要加虚拟目录

          *转发路径

*服务器输出字符数据到浏览器:

    *步骤:

      1.获取字符输出流

      2.输出数据

PrintWriter pw = resp.getWriter();
pw.write("你好");

    *注意:乱码问题

  原因:浏览器的解码和编译器的编码不一致

resp.setContentType("text/html;charset=utf-8");

*服务器输出字节数据到浏览器:

  

ServletOutputStream outputStream = resp.getOutputStream();
outputStream.write("你好666".getBytes("utf-8"));

*验证码:

  1.本质:图片

  2.目的:防止恶意表单注册

  代码:

package com.example.demo1;

import jakarta.servlet.*;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

@WebServlet("/abc")
public class Servlet extends HttpServlet {
    @Override
    protected void service(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.BLUE);//设置画笔颜色
        g.fillRect(0,0,width,height);
        //2.2画边框
        g.setColor(Color.cyan);
        g.drawRect(0,0,width-1,height-1);
        //2.3写验证码
        String str ="QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890";
        Random r = new Random();
        for (int i = 1; i <= 4; i++) {
            int index = r.nextInt(str.length());
            char ch = str.charAt(index);
            g.drawString(ch+"",width/5*i,height/2);
        }
        //2.4画干扰线
        g.setColor(Color.BLACK);
        //随机生成坐标点
        for (int i = 0; i < 3; i++) {
            int x1 = r.nextInt(width);
            int x2 = r.nextInt(width);
            int y1 = r.nextInt(height);
            int y2 = r.nextInt(height);




            g.drawLine(x1,x2,y1,y2);
        }





        //3.将图片展示到页面
        ImageIO.write(image,"jpg",resp.getOutputStream());
    }
}
posted @ 2023-01-08 00:34  会秃头的小白  阅读(56)  评论(0)    收藏  举报