博客
关于我
强烈建议你试试无所不能的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/

你可能感兴趣的文章
SQL Union
查看>>
Grails 技巧 - 配置篇
查看>>
mysqldum全库数据压备通用脚本
查看>>
每个月定时清理压被日志脚本
查看>>
Web服务器、应用程序服务器、HTTP服务器区别
查看>>
Dubbo架构设计详解
查看>>
数字处理
查看>>
oracle 体系结构
查看>>
js动态加载HTML元素时出现的无效的点击事件
查看>>
使用java9的uuid生成方式,让uuid生成速度提升一个档次
查看>>
部署Yapi接口文档管理工具
查看>>
计算机简史
查看>>
毕业季,我的Linux求职之路
查看>>
NFS的使用
查看>>
深入研究memcache 特性和限制
查看>>
k8s-14-kube-dns一键部署
查看>>
Java IO类库之PrintStreamWriter
查看>>
hadoop-006-完全分布式问题总结
查看>>
Activiti6.0版本流程撤回、跳转、回退等操作
查看>>
UDP中转服务器
查看>>