以前弄验证码都是现找现用,下面是自己跟着敲代码弄好的,记录一下,分享给大家。

我这里用的是Servlet ,Servlet代码如下

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ImageServlet extends HttpServlet {
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        BufferedImage bi=new BufferedImage(68,22, BufferedImage.TYPE_INT_RGB);
        Graphics g=bi.getGraphics();
        Color c=new Color(200,150,255);
        g.setColor(c);
        g.fillRect(0, 0, 68, 22);//宽高
        
        //设定验证码的字符
        char[] ch="QWERTYUIOPASDFGHJKLZXCVBNM0123456789".toCharArray();
        Random r=new Random();
        int len=ch.length,index;
        StringBuffer sb=new StringBuffer();
        
        for(int i=0;i<4;i++){
            index=r.nextInt(len);
            //设置每个字体的颜色都不一样
            g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
            g.drawString(ch[index]+"", (i*15)+3,18);//画图
            sb.append(ch[index]);//记录验证码
        }
        req.getSession().setAttribute("piccode", sb.toString());//保存到session作用域当中
        ImageIO.write(bi, "JPG", resp.getOutputStream()); //写入到对应的页面
        super.doGet(req, resp);
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doGet(req, resp);
    }
}

//上面servlet 中把每次生成的验证码都保存在session中

// req.getSession().setAttribute("piccode", sb.toString());

//当用户提交的我们就可以通过

//String code=req.getSession().getAttribute("piccode");

//来取得生成的验证码和用户填写的验证码来对比

//web.xml中的配置

<servlet>
      <servlet-name>ImageServlet</servlet-name>
      <servlet-class>com.test.servlet.ImageServlet</servlet-class>
  </servlet>
  <servlet-mapping>
     <servlet-name>ImageServlet</servlet-name>
     <url-pattern>/image.do</url-pattern>
  </servlet-mapping>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

//index.jsp页面代码

<form action="<%=request.getContextPath()%>/login.do" method="get" >
  <center>
  <div>
   验证码:<input type="text" name="code1" />
  <img alt="验证码" src="<%=request.getContextPath()%>/image.do" id="code1" onclick="relodCode(this,'image.do')"/>
  </div>
  <input type="submit" value="提交"/>
  </center>
  </form>
<script type="text/javascript">
    function relodCode(obj,url){
        var time=new Date();
        obj.src="<%=request.getContextPath()%>/"+url+"?time="+time;
    }
</script>

效果图(点击验证码刷新)

上面介绍的是自己来写,但是我们一般用要用的验证码的时候一般都会用一些插件,下一篇来介绍一下 kaptcha验证码的使用

Java实现验证码制作之一自己动手的更多相关文章

  1. Java实现验证码制作之一Kaptcha验证码

    Kaptcha验证码 是google提供的验证码插件,使用起来相对简单,设置的干扰线以及字体扭曲不易让其他人读取破解. 这里我们需要 导入一个 kaptcha-2.3.jar  下载地址:http:/ ...

  2. webform 图片验证码制作

    界面:1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.as ...

  3. java识别验证码

    所需资源下载链接(资源免费,重在分享) Tesseract:http://download.csdn.net/detail/chenyangqi/9190667 jai_imageio-1.1-alp ...

  4. Webcast / 技术小视频制作方法——自己动手录制video轻松搞定

    Webcast / 技术小视频制作方法——自己动手录制video轻松搞定 http://blog.sina.com.cn/s/blog_67d387490100wdnh.html 最近申请加入MSP的 ...

  5. Java第四次上课博文动手动脑

    Java第四次上课博文动手动脑 1.    查看String.equals()方法 public class StringEquals { /** * @param args the command ...

  6. 【开发技术】Java生成验证码

    Java生成验证码 为了防止用户恶意,或者使用软件外挂提交一些内容,就得用验证码来阻止,虽然这个会影响用户体验,但为了避免一些问题很多网站都使用了验证码;今天下午参考文档弄了一个验证码,这里分享一下; ...

  7. 使用Java设计验证码生成程序

    我们来设计一个简单的验证码生成程序:验证码一个由4位的数字.字母随机组合而成图像,为了避免被光学字元识别(OCR,Optical Character Recognition)之类的程序识别出图片中的数 ...

  8. java图形验证码

    用java实现验证码的生成,以下代码是一个controller,可以直接使用 package org.jxnd.tongxuelu.controller; import java.awt.Color; ...

  9. java实现验证码功能

    java实现验证码功能 通过java代码实现验证码功能的一般思路: 一.通过java代码生成一张验证码的图片,将验证码的图片保存到项目中的指定文件中去,代码如下: package com.util; ...

随机推荐

  1. C和指针 第三章 链接属性 extern、internal、none

    三种链接属性 组成一个程序有多个源文件,如果相同的标识符出现在多个源文件中,那么标识符的链接属性决定如何处理在不同文件中出现的标识符. 链接属性有三种: external:外部 多个源文件中的相同标识 ...

  2. r-cnn学习(六):RPN及AnchorTargetLayer学习

    RPN网络是faster与fast的主要区别,输入特征图,输出region proposals以及相应的分数. # ------------------------------------------ ...

  3. PHP学习-链接数据库

    链接数据库文件:conn.php <?php $conn = mysql_connect("localhost:3306","root","us ...

  4. command shell 的知识整理

    cmd 也是shell  windowns的外壳一种. 查看文件和文件夹 dir mkdir *** 创建文件夹 rd *** 删除文件夹(应该有参数的,递归之类的)CTR+C 终止命令 cd> ...

  5. oracle查询以当前年份为准的近些年数据

    今天在工作中遇到了一个查询近几年数据的问题,oracle学的比较渣渣,学习了一下. 举个例子: 比如说员工入职,我想看这个公司的员工入职情况,然后做一个趋势统计表. 以当前年份为准,查看近5年的情况趋 ...

  6. jquery-常用的运行函数

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 虚拟机ping不通主机,但是主机可以ping通虚拟机

    http://chris2013.blog.51cto.com/6931081/1209278

  8. jstl 小总结 以及 jstl fn

    1.1.1 JSTL的使用 JSTL是JSP标准标签库.结合EL替换传统页面的<%%> * JSTL如果不会用.也是可以使用<%%>.但是一般在大公司使用JSTL.进入小公司. ...

  9. Word 2010 发布博文测试

    新建"博客文章" 点击"文件-> 新建 -> 博客文章 -> 创建": 新窗口的编辑区和不同模式的word有所不同,如果你还没有设置博客账号( ...

  10. Spring映射器、适配器、解析器

    1 springmvc的映射器和适配器 1.1springmvc的映射器 根据客户端请求的url,找到处理本次请求的handler(处理器),将url和controller关联起来 1.2spring ...