博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单的图形验证码
阅读量:6310 次
发布时间:2019-06-22

本文共 4825 字,大约阅读时间需要 16 分钟。

我用例子解释吧:

先来一个在Servlet中编写验证码的例子:

package com.servlet.checkImage;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.PrintWriter;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;public class checkImageDemo extends HttpServlet {    public static final char[] CHARS={'2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z'};    public static Random random=new Random();        public static String getRandomString(){        StringBuffer buffer=new StringBuffer();        for(int i=0;i<6;i++){            buffer.append(CHARS[random.nextInt(CHARS.length)]);        }        return buffer.toString();    }    public static Color getRandomColor(){        return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));    }        public static Color getReverseColor(Color c){
//返回某颜色的反色 return new Color(255-c.getRed(),255-c.getGreen(),255-c.getBlue()); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("image/jpeg");//设置输出类型,必须的 String randomString=getRandomString(); request.getSession(true).setAttribute("randomString", randomString); int width=100; int height=30; Color color=getRandomColor();//用于背景颜色 Color reverse=getReverseColor(color);//用于前景颜色 BufferedImage bi=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//创建一个彩色图片 Graphics2D g=bi.createGraphics();//获取绘图对象 g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));//设置字体 g.setColor(color); g.fillRect(0, 0, width, height);//绘制背景 g.setColor(reverse); g.drawString(randomString, 18, 20); for(int i=0,n=random.nextInt(100);i
View Code

再来一个在类中编写验证码的例子:

package com.servlet.checkImage;import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.OutputStream;import java.util.Random;import javax.imageio.ImageIO;public class Image1 {    public Random random=new Random();        public String[] getRandomString(){        String validateCode[]=new String[4];        for(int i=0;i<4;i++){            validateCode[i]=random.nextInt(10)+"";        }                return validateCode;    }        public Color getRandomColor(){        Color color=new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));        return color;    }        public Color getResverseColor(Color color){        Color reverse=new Color(255-color.getRed(),255-color.getGreen(),255-color.getBlue());//获取该颜色的反色,如果需要噪点或者切割线可以使用这个        return reverse;    }        public String getImage(OutputStream os){        int width=80;        int height=25;                BufferedImage bi=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);        Graphics g=bi.getGraphics();//获得一个画笔        //g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));//设置字体                //边框        g.setColor(Color.black);        g.drawRect(0, 0, width-1, height-1);                Color back=getRandomColor();        g.setColor(back);        g.fillRect(0, 0, width, height);//填充背景                            String[] code=getRandomString();        for(int i=0;i
View Code

在类中编写的验证码调用需要一个jsp作为中间介质:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><%@page contentType="image/jpeg" %>              My JSP 'tempImage.jsp' starting page        
<% String str=image.getImage(response.getOutputStream()); session.setAttribute("checkCode",str); out.clear(); out=pageContext.pushBody(); %>
View Code

在Servlet中的验证码可以直接调用:

两个的调用示例在这个例子里面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>              My JSP 'checkImg.jsp' starting page        
View Code

至于一些配置的就不啰嗦了。认真看看代码就基本验证码该会制作了。

转载地址:http://caxxa.baihongyu.com/

你可能感兴趣的文章
Ubuntu Linux经验汇总
查看>>
使用nexus搭建maven仓库(本地私服)
查看>>
Ecshop容易犯错的几点
查看>>
JS基础 - 对象
查看>>
一个简易的C#信息展示板
查看>>
iOS中多线程原理与runloop介绍
查看>>
CentOS下的su 设置
查看>>
CentOS7安装Docker,运行Nginx镜像、Centos镜像
查看>>
基于MicroPython的TPYBoard超声波倒车雷达系统
查看>>
需要什么食物,其实取决于肠道微生物?
查看>>
一些通用的控制
查看>>
solr死锁问题升级版脚本
查看>>
UILabel的学习
查看>>
JAVA程序员面试技巧
查看>>
L2TP ××× 服务器搭建和使用
查看>>
电脑监控专家 管理原来如此轻松
查看>>
关于布局xml文件中view的id重复的问题
查看>>
[转载] 全本张广泰——第六回 大爷起歹心 白犬换广泰
查看>>
Java heap space 问题查找
查看>>
iperf使用
查看>>