Java实现可点击切换验证码

引言 

        大家九月好啊!这篇文章距离最后一篇文章已经相差了一个月了,虽然没有写文章,但是这一个月却并没有多么的轻松。在我发表Java基础的完结篇的时候,其实我已经学习完了Java基础,只是没有创作热情来推动着我将Java基础划上圆满的句号,不过最终还是把这篇文章给写出来了,但是通过阅读量能够看出来好像并没有很高的质量哈哈哈!在那期间我开始着手于学习Javaweb这部分,截止到现在我的进度已经有了一半,要问为什么一篇文章都没有发呢?我的回答是一方面是不知道该如何讲这一块知识,另一方面是这部分的知识有些碎,不知道大家哪些是理解的,哪些是不理解的,所以说很难下笔来写。再之后就是大三开学,需要将上学期的考试考了,因此就只能投身于复习考试了。而如今呢,伴随着考试和四六级的结束,我也彻底的释放了,可以重新转身投入到Java的知识海洋中了。

        不过现在文章的更新只能跟着我现在的学习进度,毕竟时间还是很紧张的,如果后面我再次复习Javaweb的时候尽量把前面的知识给大家补齐,另外也可以直接私信我提问题的,我会尽我所能为大家解决问题的,感谢大家这么长时间喜欢我的文章,关注我!

        下面来到今天的重点,为大家讲解一个简单的知识点,那就是题目所说的“Java实现可点击切换验证码”。 

 

验证码雏形 

         首先呢,我们应该知道的是该验证码是在图片中进行的操作,因此我们需要调用image中的子类BufferedImage,而该子类的作用是将图片加载到内存中,其生成的图片在内存中有一个图像缓冲区,可以让我们对图片进行操作。

int width = 100;
int height = 50;
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

        在生成图像之后,就可以开始对其进行一系列的操作,使其更像是一个验证码。而这里要用到的则是Java类中的Graphics类,在此处我们就不对其概念过多的赘述了,能够看懂怎么用就好了,而想了解的同学可以进一步的了解其相关知识。

Graphics g = image.getGraphics();
//获取image中的Graphics
g.setColor(Color.pink);
//设置画笔的颜色
g.fillRect(0,0,width,height);
//颜色填充整个图像
//以该图像的原点为起始位置,填充宽为width、长为height大小
g.setColor(Color.black);
//重新设置画笔的颜色
g.drawRect(0,0,width-1,height-1);
//为图像画上相框,在此减一是因为刚好重合了

        图像美化之后,就需要在其中添加验证码了而这个过程还是要用到Graphics中的方法

        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZqwertyuiopasdfghjklzxcvbnm1234567890";
        Random r = new Random();
        for (int i = 1; i < 5; i++) {
            int index = r.nextInt(str.length());
            char ch = str.charAt(index);
            g.drawString(ch+"",width/5*i,height/2);
        }
        //实现验证码的随机生成
        g.setColor(Color.yellow);
        //重新设置画笔颜色
        for (int i = 0; i < 10; i++) {
            int x1 = r.nextInt(width);
            int x2 = r.nextInt(width);
            int y1 = r.nextInt(height);
            int y2 = r.nextInt(height);
            g.drawLine(x1,y1,x2,y2);
        }
        //实现随机线条的生成
        ImageIO.write(image,"jpg",response.getOutputStream());
        //通过ImageIO实现图像的输出

然而这还是在Servlet中实现,具体操作时我们应该让它能够和前端相结合。

 

验证码1.0 

前面我们的验证码还只是在Servlet中实现,接下来呢,我们可以尝试着使其于前端相结合起来。

<body>
<img id = "checkcode" src="/Test/checkCodeServlet">
<a id="change" href="">看不清换一张?</a>
</body>

 定义img标签和a标签,并分别定义id属性,方便后续用来在JavaScript中获取它。

<script>
        window.onload=function (){
            var img = document.getElementById("checkcode");
            img.onclick=function (){
                var date = new Date().getTime();
                img.src = "/Test/checkCodeServlet?"+date;
            }
        }
</script>

为img标签设置点击事件,每次点击之后都会再次获取Servlet中的图像,从而实现,验证码的更新,然而由于浏览器中有缓存的缘故,在重新获取的时候,浏览器并不会再次获取,而是将原来的数据重新返回,因此需要对src的值需要不重复才可以,而时间戳刚好符合不重复,因为每次获取的时候都会重新获取时间。

 

实现效果 

 

 

创作不易,给个三连 

 

 

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论
Java中,要实现点击图片切换验证码,可以按照以下步骤进行操作: 1. 创建一个包含多个验证码图片的集合。可以使用ArrayList或者数组来存储这些图片。 2. 在用户点击图片时,通过事件监听器获取用户点击的图片索引。 3. 根据用户点击的图片索引,获取对应的验证码图片。 4. 将获取到的验证码图片显示在需要切换验证码的位置上。 以下是一个简单的示例代码: ```java import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class CaptchaImageSwitcher { private ArrayList<ImageIcon> captchaImages; private int currentImageIndex; private JLabel captchaLabel; public CaptchaImageSwitcher() { captchaImages = new ArrayList<>(); // 加载验证码图片到captchaImages集合中 captchaImages.add(new ImageIcon("captcha1.jpg")); captchaImages.add(new ImageIcon("captcha2.jpg")); captchaImages.add(new ImageIcon("captcha3.jpg")); currentImageIndex = 0; JFrame frame = new JFrame("Captcha Image Switcher"); JPanel panel = new JPanel(); captchaLabel = new JLabel(captchaImages.get(currentImageIndex)); captchaLabel.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // 切换到下一张验证码图片 currentImageIndex = (currentImageIndex + 1) % captchaImages.size(); captchaLabel.setIcon(captchaImages.get(currentImageIndex)); } }); panel.add(captchaLabel); frame.add(panel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { new CaptchaImageSwitcher(); } } ``` 注意,这只是一个简单的示例,你需要根据你的具体需求进行修改和适配。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

石原里美的微笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值