少学习多摸鱼

day100-javaweb-response实现随机验证码

HttpServletResponse实现验证码生成

编写验证码生成的函数

 public String makenum(){
     Random random = new Random();
     String num = random.nextInt(99999) + "";
     StringBuffer stringBuffer = new StringBuffer();
     for (int i = 0; i < 5 - num.length(); i++) {
         stringBuffer.append("0");
     }
     num = stringBuffer.toString() + num;
     return num;
 }

 

编写servlet请求网页写入一个图片

 public class ImageServlet extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         //让浏览器五秒刷新一次
         resp.setHeader("refresh","3");
 ​
         //在内存中创建一个图片
         BufferedImage bufferedImage = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
 ​
         //得到一个图片
         Graphics2D graphics = (Graphics2D) bufferedImage.getGraphics();
 ​
         //设置图片
         graphics.setColor(Color.white);
         graphics.fillRect(0,0,80,20);
 ​
         //给图片写数据
         graphics.setColor(Color.BLUE);
         graphics.setFont(new Font(null,Font.BOLD,20));
         graphics.drawString(makenum(),0,20);
 ​
         //告诉浏览器请求用浏览器方式打开
         resp.setContentType("image/jpg");
 ​
         //取消浏览器缓存
         resp.setDateHeader("expires",-1);
         resp.setHeader("Cache-Control","no-cache");
         resp.setHeader("Pragma","no-cache");
 ​
         //写入浏览器
         ImageIO.write(bufferedImage,"jpg", resp.getOutputStream());
         
     }

 

改进

 
//1.定义一个方法返回一个随机验证码,n为生成几位的验证码
 public static String makenum(int n) {
     String codes="";
     Random r=new Random();
     //2.定义一个for循环,随机n次,随机生成字符
     for(int i=0;i<n;i++) {
         //3.生成随机字符,可能是数字,大写字母,小写字母
         int num=r.nextInt(3);
         switch(num) {
             case 0:
                 //数字:0-9
                 codes+=r.nextInt(10);
                 break;
             case 1:
                 //大写字母:A(65)-Z(65+25)
                 char ch1=(char)(r.nextInt(26)+65);
                 codes+=ch1;
                 break;
             case 2:
                 //小写字母:a(97)-z(97+25)
                 char ch2=(char)(r.nextInt(26)+97);
                 codes+=ch2;
                 break;
         }
     }
     return codes;
 }

 

 
posted @ 2023-03-20 16:50  北海之上  阅读(19)  评论(0)    收藏  举报
/* 粒子吸附*/