摸鱼少学习多

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 @   北海之上  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
/* 粒子吸附*/
点击右上角即可分享
微信分享提示