准备一个验证码
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//禁用缓存
resp.setHeader("Pragma", "No-cache");
resp.setHeader("Cache-Control", "No-cache");
resp.setDateHeader("Expires", 0);
//根据自己的背景图片设置照片格式
resp.setContentType("image/jpg");
int height = 60;
int width = 140;
//画板
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//画笔
Graphics graphics = image.getGraphics();
//设置字体
Font font = new Font("宋体",Font.BOLD,25);
graphics.setFont(font);
//图像输入流,它是从当前已注册 ImageReader 中自动选择的,解码所提供 URL 的结果。
String imagePath = req.getServletContext().getRealPath("img/ba.jpg");
Image image1 = ImageIO.read(new File(imagePath));
//绘制指定图像中已缩放到适合指定矩形内部的图像
graphics.drawImage(image1,0,0,140,60,null);
//准备好验证码所需的字符串
String resource = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
//用于保存验证码
String info = "";
//循环四次,从字符串中随机获取四个字符
for (int i = 0; i < 4; i++) {
//从字符串中随机获取索引
int index = new Random().nextInt(resource.length() - 1);
char myCode = resource.charAt(index);
Random random = new Random();
//设置颜色
graphics.setColor(new Color(20 + random.nextInt(200),20 + random.nextInt(200),20 + random.nextInt(200)));
//显示文本,设置x,y的偏距
graphics.drawString(myCode + "",30 + i * 20,35 + new Random().nextInt(10));
//生成干扰线
graphics.drawLine(random.nextInt(100),random.nextInt(40),random.nextInt(100),random.nextInt(40));
//存入info
info += myCode;
}
//设置到session提供给前台
req.getSession().setAttribute("info",info);
//释放资源
graphics.dispose();
//图像输出流
OutputStream out = resp.getOutputStream();
ImageIO.write(image,"jpg",out);
//关流
out.flush();
out.close();
}
前台显示
因为是图像输出,所以要准备一个img,它的src就填写验证码的servlet
在准备一个click函数,鼠标单击时,刷新验证码
效果展示
到这里,JavaWeb实现登录验证码功能就结束了,希望对你有帮助!!!