`
234390216
  • 浏览: 10195316 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:460912
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1771975
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1395597
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:393946
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:678297
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:529358
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1178860
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:462249
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:150212
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:66921
社区版块
存档分类
最新评论

生成验证码并在页面进行显示

    博客分类:
  • jsp
阅读更多

 

 

 

code.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>code.html</title>
	
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
    	$(function() {
    		
    		init();
    	
    		$("[type='button']").click(function() {
    			$.post("servlet/CheckCode",{},function(data) {
    				//注意这里src的写法,data是经过base64编码后的内容
    				$("img").attr("src","data:image/jpeg;base64,"+data);
    			});
    		});
    		
    	});
    	function init() {
    		$.post("servlet/CheckCode",{},function(data) {
    			//其实在第一次运行的时候是可以直接将图片的二进制作为Image的src进行显示的,但是因为后台统一返回的是
    			//经过base64编码过后的内容,所以这里初始显示的时候也是利用base64的方法
   				$("img").attr("src","data:image/jpeg;base64,"+data);
   			});
    	}
    </script>

  </head>
  
  <body>
    <img alt="" width=100 >
    <input type="button" value="换一张"/>
  </body>
</html>

 

Servlet:

mport java.io.IOException;
import java.util.Random;

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

import sun.misc.BASE64Encoder;

import com.tiantian.ext.util.Util;

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 {
		//直接返回字节流给img标签的src是可以的,如<img src="servlet/CheckCode">,但在之后进行切换的时候
		//使用ajax请求,如果仅仅返回图片的二进制然后把它传给img的src是不能的,目前的方法是把图片的二进制进行base64编码,
		//然后在页面上以下列方式进行显示,<img src="data:image/jpeg;base64,result">,其中的result是经过
		//base64编码后的内容,这样就可以使用后台直接利用图片的二进制进行图片的显示了
		response.setContentType("image/jpeg;charset=utf-8");
		response.addHeader("pragma", "no-cache");  
		response.addHeader("Cache-Control", "no-cache");
		StringBuffer buffer = new StringBuffer();
		for (int i=0;i<4;i++)
			buffer.append(new Random().nextInt(9));
		String code = buffer.toString();
		byte[] bytes = Util.geneCheckCode(code).toByteArray();
		BASE64Encoder encoder = new BASE64Encoder();
		//使用base64进行转码,否则在页面不能直接显示,至少目前我还没有发现方法,可以直接将图片的字节流使用ajax的方法在页面
		//上进行显示
		String result = encoder.encode(bytes);
		response.getWriter().write(result);
	}

}

 

Util类:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.Random;

import javax.imageio.ImageIO;

import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;

public class Util {

	private static DefaultKaptcha kaptcha = new DefaultKaptcha();
	//初始化Kaptcha
	static {
		kaptcha.setConfig(new Config(new Properties()));
	}
	
	/**
	 * 利用kaptcha的实现
	 * @param code
	 * @return
	 * @throws IOException
	 */
	public static ByteArrayOutputStream geneCheckCode(String code) throws IOException {
		BufferedImage bufferedImage = kaptcha.createImage(code);
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		ImageIO.write(bufferedImage, "jpg", out);
		return out;
	}
	
	/**
	 * 自己的实现
	 * @param text
	 * @return
	 * @throws IOException
	 */
	public static ByteArrayOutputStream gene(String text) throws IOException {
		char chars[] = text.toCharArray();
		BufferedImage image = new BufferedImage(200, 50, BufferedImage.TYPE_INT_BGR);
		Graphics graphics = image.getGraphics();
		graphics.setColor(Color.red);
		
		for (int i=0;i<chars.length;i++) {
			graphics.setFont(new Font("宋体", Font.BOLD, 35+new Random().nextInt(10)));
			graphics.drawChars(new char[] {chars[i]}, 0, 1, 45*i+10, 40);
		}
		graphics.setColor(new Color(255, 200, 200));
		for (int i=0;i<17;i++) {
			graphics.drawLine(i*12, 0, i*12, 50);
			graphics.drawLine(0, i*3, 200, i*3);
		}
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		ImageIO.write(image, "jpg", out);
		return out;
	}
	
}

 

分享到:
评论

相关推荐

    页面验证码生成器

    页面验证码生成器,可以定制显示的字符,字符长度,验证码图片的长度和高度,干扰纹可以更改

    验证码生成.zip

    运行程序,在页面中将显示英文和数字混合的验证码,用户只有输入正确的验证码后,才可以完成登录。如果当前生成的验证码不容易辨认,也可以单击“看不清?换一个”超链接生成新的验证码,这时页面并不会刷新。本项目...

    页面验证码生成

    用于页面生成图片显示验证码,随机生成图片和图片内容

    vue插件——使用canvas生成图形验证码

    This is a digital graphic verification code written in canvas(这是一个vue的插件,使用canvas来生成图形验证码)

    asp页面无刷新生成图片验证码

    asp.net页面无刷新生成图片验证码!生成噪音

    jsp页面中产生验证码

    在jsp页面登陆时,有验证码功能会更加安全,这些资料能教你如何在jsp页面中实现验证码功能,

    随机生成验证码

    验证码,已经写好,直接放入工程可以使用,会直接在页面显示。验证功能自己写。

    java 生成验证码

    利用servlet方式随机生成验证码的图片,显示到jsp页面!输入验证码提交后显示成功还是失败!

    Java后端生成图片验证码

    验证码生成工具类及后台控制器,保存验证码信息至session,并将验证码显示在页面指定位置,单击验证码更换。

    java web 登录验证码生成类

    生成验证码图片 java类中获得验证码的方法: session.getAttribute("checkcode"); jsp页面中显示图片的方式: ${pageContext.request.contextPath}/checkcode.jsp"/&gt; 另外在web.xml中配置验证码类的加载: ...

    Servlet生成验证码

    Servlet随即产生验证码,在页面显示。通过Servlet验证。简单实用。

    JSP动态生成验证码存储在session作用范围内

    (1)在登录应用中,为防止恶意登录,常常需要服务器动态生成验证码并存储在session作用范围中,最后以图像形式返回给客户端显示 (2)下边的代码实现的功能:写一个JSP页,动态生成一个验证码,存储在session作用...

    验证码自动生成

    直接把文件拷贝到工程下,便可直接使用,按照需要显示和输入验证码的jsp可以整理到相应的页面需要输入验证码的位置。

    生成验证码控件

    一、控件特点: 1、使用方便,只需要从工具栏直接拖到页面即可自动验证,零代码使用。 2、自动完成客户端以及服务器...stringcodeText:控件自动生成的验证码,该字符串显示于图片中。 ImageStyleimgStyle:图片样式。

    验证码生成以及判断输入的验证码是否正确

    打开页面,出现验证码,输入显示的验证码,判断是否正确

    用户登录、管理及验证码生成ASP代码.rar

     所谓验证码就是将一个随机数显示在一幅图片上,并在图片上产生干扰因素。验证码能够防止攻击者编写程序,自动注册,重复登录暴力破解密码等。  (2)验证码的实现过程  在服务器端随机生成验证码字符串,保存在...

    jsp页面验证码demo

    在java后台中生成验证码的ImageIO传到前端页面显示,同时把验证码的value值传入session 中用于与用户输入的验证码进行匹配,在用户验证中使用ajax技术,在不刷新页面的同时进行验证码验证。 程序结构图: ...

    ASP留言本加验证码源文件

     在生成验证码图片的时候,同时生成了一个Session,其值就是验证码图片中的数字值。  同时,提供输入框让用户输入,提交输入值后,与已有的Session值进行比较,根据判断结果做相应判断。  如果需要修改Session...

    PHP生成静态页面小程序 v1.1.zip

    建议新手PHP朋友在本版本的基础上进行完善,1,前台模板更改美化 2,前台文章分页进行静态化 3,后台新闻列表进行分页显示 4,后台批量更新进行分段更新 5,新加读取次数的字段,并在静态html页面进行动态调用 6,...

    JSP验证码动态生成方法

    在登录应用中,为防止恶意登录,常常需要服务器动态生成验证码并存储在session作用范围中,最后以图像形式返回给客户端显示 下边的代码实现的功能:写一个JSP页,动态生成一个验证码,存储在session作用范围内,并以...

Global site tag (gtag.js) - Google Analytics