当前位置: 首页 > news >正文

java生成验证码并可刷新

手心创建一个简单的页面来显示所创建的验证码

<body>
  		<form action="loginName.mvc" method="post">
	  		用户名:<input type="text" name="name" id="name"/><br/>
	  		密码:<input type="password" name="password"  id="password"/><br/>
	  		验证码1:<a href="javascript:changePicture1();" title='看不清楚,换个图片'><img id="checkcode1"  src=""><a href="javascript:changePicture1();" class="login-text03" title='看不清楚,换个图片'>看不清楚,换个图片</a><br/>
	  		验证码2:<a href="javascript:changePicture2();" title='看不清楚,换个图片'><img id="checkcode2"  src=""><a href="javascript:changePicture2();" class="login-text03" title='看不清楚,换个图片'>看不清楚,换个图片</a><br/>
	  		验证码3:<a href="javascript:changePicture3();" title='看不清楚,换个图片'><img id="checkcode3"  src=""><a href="javascript:changePicture3();" class="login-text03" title='看不清楚,换个图片'>看不清楚,换个图片</a>
	  		<span id="spantext"></span><br/>
	  		<!--  <input type="button" value="登录" οnclick="loginPerson()"/>-->
	  		<input type="submit" value="登录"/>
  		</form>
  </body>
  <script language="javascript">
  	window.οnlοad=function(){
  		changePicture1();
  		changePicture2();
  		changePicture3();
  	};
  	
  	function changePicture1(){
  		$("#checkcode1").attr("src","servlet/CheckCode?code="+Math.random());
  	}
  	function changePicture2(){
  		/* var arry=["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"];
  		var len=arry.length;
  		var code="";
  		for(i=0;i<=4;i++){
  			var index=Math.floor(Math.random()*len);
  			code+=arry[index];
  		} */
  		//alert(code);
  		$("#checkcode2").attr("src","servlet/ImageServlet?code="+Math.random());
  	}
  	function changePicture3(){
  		$("#checkcode3").attr("src","servlet/graphicsImage?code="+Math.random());
  	}
  	function loginPerson(){
  		var name=document.getElementById("name").value;
  		var password=document.getElementById("password").value;
  		if(name==""||password==""){
  		    alert("账户名或密码不能为空");
  			$("#spantext").html("账户名或密码不能为空");
  		}else{
  			$.ajax({
  				type : "post",
  				url : "./loginName.mvc?name="+name+"&password="+password,
  				success : function(data){
  					alert(data);
  					var obj=eval("("+data+")");
  					var message=obj.code;
  					//var name=obj.name;
  					//var password=obj.password;
  					alert(message);
  					//alert(name);
  					//alert(password);
  				},
  				error : function(data){
  					$("#spantext").html("网络错误");
  				}
  			});
  		}
  	}
  </script>

  在这里写有三个生成验证码的类,其实他们的本质是一样的  ,都是类似的

创建的第一个验证码
package com.chinasoft.ssm.servlet;

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.io.PrintWriter;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class CheckCode extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request,response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            
            response.setContentType("image/jpeg");
            // 图片的内存映像
            BufferedImage image = new BufferedImage(60, 20,BufferedImage.TYPE_INT_BGR);
            // 获取画笔对象
            Graphics g = image.getGraphics();
            //随机变换图片的颜色
            Random r = new Random();
            g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
            //开始绘制图片
            g.fillRect(0, 0, 60, 20);
            //将画笔颜色清零
            g.setColor(new Color(0,0,0));
            Font font = new Font("Verdana", Font.ITALIC|Font.BOLD, 16);
            g.setFont(font);
            String number = String.valueOf(r.nextInt(99999));
            HttpSession session = request.getSession();
            session.setAttribute("number", number);
            g.drawString(number, 5, 15);
            g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
            //压缩jpeg格式转换为输出流的形式
            OutputStream os = response.getOutputStream();
           //把输出流对象中的图像信息编码
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);  
            //向创建对象时指定的输出流输出
            encoder.encode(image);
            os.flush();
            os.close();
    }

    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occurs
     */
    public void init() throws ServletException {
        // Put your code here
    }

}

package com.chinasoft.ssm.servlet;

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;
import javax.servlet.ServletException;
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 ImageServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
           
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doPost(request,response);
    }
 
   
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String ch1= (String) request.getParameter("code");
        System.out.println(ch1);
         response.setContentType("image/jpeg");
        // 图片的内存映像
        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="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray(); 
        Random r=new Random();
        int len=ch.length;
        int index;
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<4;i++)
        {
            //获取一个随机数
            index=r.nextInt(len);
            //给字体设置颜色
            Font font = new Font("Verdana", Font.ITALIC|Font.BOLD, 16);
            g.setFont(font);
            g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
            //将所有选择的字体绘画出来
            g.drawString(ch[index]+"",(i*15)+3, 18);
            //将随机生成的验证码添加到可变字符sb中去
            sb.append(ch[index]);
        }
        //将生成的验证码对象保存到piccode对应的value中去
        //request.getSession().setAttribute("piccode", sb.toString());
        //使用给定的支持格式将图像BufferedImage的bi对象写入到响应输出流当中
        //ImageIO.write(bi, "JPG", response.getOutputStream());
        
        OutputStream os = response.getOutputStream();
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
        //向创建对象时指定的输出流输出
        encoder.encode(bi);
        os.flush();
        os.close();
    }
 
}
创建的第二个验证码
package com.chinasoft.ssm.servlet;

import java.awt.AlphaComposite;
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.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class graphicsImage extends HttpServlet {

    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        doPost(request,response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        char[] strs = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
        BufferedImage bi = new BufferedImage(150,40,BufferedImage.TYPE_INT_RGB);
        Graphics2D g = (Graphics2D)bi.getGraphics();      
        Random num=new Random();
        Color color ;
        int len = strs.length;
        g.setColor(Color.WHITE);
        g.fillRect(0,0,150,40);
        // 随机画干扰的蛋蛋
        for(int i=0;i<15;i++){
            color =new  Color(150,100, 250);
            g.setColor(color);
            // 画蛋蛋,有蛋的生活才精彩
            g.drawOval(num.nextInt(150), num.nextInt(40), 5+num.nextInt(10), 5+num.nextInt(10));
            color = null;
        }
        Font font = new Font("Verdana", Font.ITALIC|Font.BOLD, 28);
        g.setFont(font);
        /* 画字符串 */
        for(int i=0;i<6;i++)
        {
            int index=num.nextInt(len);
            // 指定透明度
            AlphaComposite ac3 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f);
            g.setComposite(ac3);
            // 对每个字符都用随机颜色
            color = new Color(20 + num.nextInt(110), 20 + num.nextInt(110), 20 + num.nextInt(110));
            g.setColor(color);
            g.drawString(strs[index]+"",(i*15)+40, 40-4);
            color = null;
            ac3 = null;
        }
        ImageIO.write(bi, "png", response.getOutputStream());
    }
    public void init() throws ServletException {
        // Put your code here
    }

}
创建的第三个验证码

 

转载于:https://www.cnblogs.com/feitianshaoxai/p/6600068.html

相关文章:

  • JS三大经典变量命名法
  • 数字基础(Digital Fundamentals)中的truth table转化成表达式
  • 为你解惑之WPF经典9问详解
  • 输入一个整数,将这个整数以字符串的形式逆序输出 程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001...
  • MSER
  • 你知道第一个 C 语言编译器是如何编写的吗?
  • Haproxy的三种保持客户端会话保持方式
  • 每天一个linux命令(5):rm命令
  • linux调优-TIME_WAIT
  • TypeScript迭代器
  • thinkphp如何省略index.php
  • 安卓开源项目周报0329
  • 2018(2017)美图java服务端笔试(回忆录)
  • 2016蓝桥杯 煤球数目 (代码)
  • React-Native PanResponder手势识别器
  • 《Java编程思想》读书笔记-对象导论
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • exif信息对照
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • js继承的实现方法
  • JS学习笔记——闭包
  • Mocha测试初探
  • Phpstorm怎样批量删除空行?
  • python_bomb----数据类型总结
  • Swoft 源码剖析 - 代码自动更新机制
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 番外篇1:在Windows环境下安装JDK
  • 悄悄地说一个bug
  • 三分钟教你同步 Visual Studio Code 设置
  • 事件委托的小应用
  • 跳前端坑前,先看看这个!!
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 1.Ext JS 建立web开发工程
  • 通过调用文摘列表API获取文摘
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • #Spring-boot高级
  • ()、[]、{}、(())、[[]]命令替换
  • (02)vite环境变量配置
  • (04)odoo视图操作
  • (3)llvm ir转换过程
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (k8s中)docker netty OOM问题记录
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (黑马C++)L06 重载与继承
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (四)Controller接口控制器详解(三)
  • (一)插入排序
  • ***详解账号泄露:全球约1亿用户已泄露
  • *上位机的定义
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .net framework4与其client profile版本的区别
  • .NET Micro Framework 4.2 beta 源码探析