使用JAVA的awt包可以提供创建和修改图像的各种类。使用流框架来处理图像,该框架涉及图像生产者、可选的图像过滤器和图像使用者。
有了强大的awt包就可以做一个简单的登录验证码了,先看一下效果图:
废话不多说
其实登录验证码他不是一个固定的图片,他只是一个java代码向jsp页面输出的图片流而已。
首先需要在登录页面使用<img>标签,在src中链接到编程好的jsp页面。
其中这个jsp页面是最重要的,以下是代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page language="java" import="java.awt.image.*"%>
<%@ page language="java" import="java.awt.*"%>
<%@ page language="java" import="javax.imageio.*"%>
<%
//创建一个图像缓冲区对象 相当于一张纸 参数分别为 宽、高、图像类型
BufferedImage bi = new BufferedImage(60, 20,BufferedImage.TYPE_USHORT_555_RGB);
//得到制图对象 相当于你得到了一支笔
Graphics g = bi.getGraphics();
//设置 上下文颜色 相当于背景颜色
g.setColor(Color.GREEN);
//进行填充 x、y、width、height
g.fillRect(0, 0, 60, 20);
Random rd = new Random();
//干扰纹
g.setColor(Color.GRAY);
//15条干扰纹
for (int i = 0; i < 15; i++) {
g.drawLine(rd.nextInt(61), rd.nextInt(21), rd.nextInt(61), rd.nextInt(21));
}
//设置验证码
String code = "";
String str = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789";
for (int i = 0; i < 4; i++) {
code += str.charAt(rd.nextInt(str.length()));
}
request.getSession().setAttribute("code",code);
//设置字的颜色
g.setColor(Color.BLUE);
//设置字体
g.setFont(new Font("黑体", Font.BOLD, 18));
//在图像上下文开始画由String的文本
g.drawString(code, 10, 15);
//使用图片输出流 输出(纸,格式,输出方式)
ImageIO.write(bi, "jpeg", response.getOutputStream());
out.clear();
out = pageContext.pushBody();
%>
当上面的代码都已经搞定之后,回到你需要加入验证码的页面
<img id="img" src="刚才完成的验证码页面链接" alt="点击更换" width="60" height="20" οnclick="refreshImg();"/>
最后我加入了一个点击事件用于再次刷新验证码,差不多一个简单的验证码就完成了!