makeCheckcode.java

  package pic;
  import java.awt.Color;
  import java.awt.Font;
  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 
makeCheckcode
 {
  //验证码图片中可以出现的字符集,可根据需要修改
  private char mapTable[]={
  'a','b','c','d','e','f',
  'g','h','i','j','k','l',
  'm','n','o','p','q','r',
  's','t','u','v','w','x',
  'y','z','0','1','2','3',
  '4','5','6','7','8','9'};
 
  public String getCertPic(int width, int height, OutputStream os) {
  if(width<=0)width=60;
  if(height<=0)height=20;  
  BufferedImage image = new BufferedImage(width, height,  
  BufferedImage.TYPE_INT_RGB);  
  // 获取图形上下文  
  Graphics g = image.getGraphics();  
  // 设定背景色  
  g.setColor(new Color(0xDCDCDC));  
  g.fillRect(0, 0, width, height);  
  //画边框  
  g.setColor(Color.black);  
  g.drawRect(0,0,width-1,height-1);  
  // 取随机产生的认证码
  String strEnsure = "";
  // 4代表4位验证码,如果要生成更多位的认证码,则加大数值
  for(int i=0; i<4; ++i) {
strEnsure+=mapTable[(int)(mapTable.length*Math.random())];
  }   
  //   将认证码显示到图像中,如果要生成更多位的认证码,增加drawString语句
  g.setColor(Color.black);  
  g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));  
  String str = strEnsure.substring(0,1);  
  g.drawString(str,8,17);  
  str = strEnsure.substring(1,2);  
  g.drawString(str,20,15);  
  str = strEnsure.substring(2,3);  
  g.drawString(str,35,18);   
  str = strEnsure.substring(3,4);  
  g.drawString(str,45,15);  
  // 随机产生10个干扰点
  Random rand = new Random();
  for (int i=0;i<10;i++) {  
  int x = rand.nextInt(width);  
  int y = rand.nextInt(height);  
  g.drawOval(x,y,1,1);  
  }  
  // 释放图形上下文
  g.dispose();   
  try {
  // 输出图像到页面  
  ImageIO.write(image, "JPEG", os);
  } catch (IOException e) {
  return "";
  }   
  return strEnsure;
  }
  }

  在getCertPic()方法中,首先创建了一个内存图像的实例对象,再得到此内存图像的图形上下文对象,接着再用这个上下文对象画背景、边框。接下来,随机生成4个在mapTable[]数组中的字符,组成字符串作为验证字符串,并输出在内存中,为了造成一定的干扰,随机画了10个干扰点,如果要加大干扰效果,可再多画一些点。
makeCertPic.jsp页面用于调用生成验证码图片的JavaBean,并在客户端显示,源代码如下:
  makeCertPic.jsp
  <%@page contentType="image/jpeg" %>
  <jsp:useBean id="image" scope="page" class="pic.makeCertPic" />
  <%
  String str=image.getCertPic(0,0,response.getOutputStream());
     // 将认证码存入SESSION
  session.setAttribute("certCode", str);

  out.clear();
   out = pageContext.pushBody();
  %>

  这里把生成的验证码作为session变量写入,因此在接收登录页面输入的数据页面中,可用用户输入的验证码和这个session变量作比较,如果相同则表示验证通过。
  LoginPic.jsp
  <%@ page contentType="text/html;charset=GB2312" %>

<script type="text/javascript">
  function reloadcode(){
  var verify=document.getElementByIdx_x('code');
  verify.setAttribute('src','makeCertPic.jsp?it='+Math.random());
  }
</script>
  <html>
   <head><title>登录页面</title></head>
   <body>
    <table align="center" border="0">
  <tralign="center"><td><fontcolor="red"><html:errors/></font></td></tr>
   <tr align="center"><td>系统登录</td></tr>
   <form. action="loginCheck.jsp" method="post" focus="username">
   <tr><td>用户名:<input type="text" name="username"/></td></tr>
   <tr><td>密&nbsp;&nbsp;码:<input type="password"name="password"/></td></tr>
   <tr><td>验证码<img src="makeCertPic.jsp" id="code" onclick="reloadcode()" style="cursor: pointer;" alt="看不清楚,换一张"> </td></tr>
<tralign="left"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
   <input type="submit" value="确定"/></td></tr>
   </form>
   </table>
   </body>
  </html>

在Servlet中判断验证码的输入是否正确:
  String certCode=request.getParameter("certCode");

//certCode为用户输入的验证码
  if(certCode.equals((String)session.getAttribute("certCode")))
  out.print("验证码输入正确");
  else
  out.print("验证码输入错误");

验证码 java实现的程序的更多相关文章

  1. 简单java在线测评程序

    简单java程序在线测评程序 一.前言 大家过年好!今年的第一篇博客啊!家里没有网,到处蹭无线!日子过得真纠结!因为毕设的需求,简单写了一个java程序在线测评程序,当然也可以在本地测试. 二.思路 ...

  2. java编译错误 程序包javax.servlet不存在javax.servlet.*

    java编译错误 程序包javax.servlet不存在javax.servlet.* 编译:javac Servlet.java 出现 软件包 javax.servlet 不存在 软件包javax. ...

  3. 使用IzPack打包JAVA Web应用程序

    使用IzPack打包JAVA Web应用程序步骤如下: 这里使用IzPack-4.3.5 + launch4j-3.1.0-beta1-win32.zip(绿色版)对Web应用程序打包,打包后即可对我 ...

  4. 《疯狂Java:突破程序员基本功的16课》读书笔记-第二章 对象与内存控制

    Java内存管理分为两个方面:内存分配和内存回收.这里的内存分配特指创建Java对象时JVM为该对象在堆内存中所分配的内存空间.内存回收指的是当该Java对象失去引用,变成垃圾时,JVM的垃圾回收机制 ...

  5. 【转】Tomcat中部署java web应用程序

    http://www.blogjava.net/jiafang83/archive/2009/06/02/279644.html 转载:今天给大家介绍怎样在Tomcat5.5.9中部署Java Web ...

  6. 在Tomcat中部署Java Web应用程序

    在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署      静态部署指的是我们在服务器启动之前部 ...

  7. Java中获得程序当前路径的4中方法

    Java中获得程序当前路径的4中方法: 在Application中: import java.util.*; public class TestUserDir { public static void ...

  8. 简单java web应用程序搭建与部署

    1. 准备工作 工具:tomcat.editplus.jdk.windows操作系统 操作:在windows操作系统上安装jdk.tomcat.editplus,配置JAVA_HOME,Path,CL ...

  9. 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行

    [TOC] 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行 程序源码 import java.io.IOException; import java.util. ...

随机推荐

  1. ThreadLocal 例子

    /** * 一个ThreadLocal代表一个变量,故其中里只能放一个数据,有两个变量都要线程内共享,则要定义两个ThreadLocal. */ public class ThreadLocalTes ...

  2. C++工程文件夹中的bin和obj文件夹有何用处?(补充多文件结构)

    博主在使用Code::Blocks创建一个工程之后,正准备新建一个头文件,细心的博主发现,在工程文件夹中有两个子文件夹,分别是bin和obj.好奇心驱使下,想知道这两个文件夹用来干嘛的,网上搜了下,整 ...

  3. Android 滑动效果汇总

    Android 滑动效果入门篇(一)—— ViewFlipper Android 滑动效果入门篇(二)—— Gallery Android 滑动效果基础篇(三)—— Gallery仿图像集浏览 And ...

  4. HDU 1175 连连看(超级经典的bfs之一)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1175 连连看 Time Limit: 20000/10000 MS (Java/Others)     ...

  5. mix-blend-mode 混合模式 background-blend-mode 背景混合模式 isolation:isolate 隔离

    css3 mix-blend-mode 混合模式 该属性不仅可以作用于HTML,还可以作用于SVG 兼容性: IE 8~11 Edge 12~14 Firefox 41~47 chrome 45~51 ...

  6. chrome浏览器中 F12 功能的简单介绍

    chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...

  7. Linux centos7 安装python3 及 GCC

    1.用wget下载python源码 PYTHON下载 找适合自己的版本,我下载的是3.7.2 2.用tar命令解压下载的文件 tar -zxvf Python-3.7.2.tgz 3.进入目录解压后的 ...

  8. dom4j支持Xpath的具体操作

    ***默认情况下,dom4j不支持xpath. 如果想要使用xpath,需要引入jaxen-1.1-beta-6.jar包. 在dom4j中提供了两个方法来支持xpath. ***selectNode ...

  9. jQuery(二)事件

    鼠标事件: click dblclick mouseenter:鼠标进入 mouseleave:鼠标离开 hover:鼠标悬停 <!DOCTYPE html> <html> & ...

  10. Flask初见

    Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSIG工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 .Flask使用 BSD 授权. Flask也被称为 “m ...