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;
}
}
分享到:
相关推荐
页面验证码生成器,可以定制显示的字符,字符长度,验证码图片的长度和高度,干扰纹可以更改
运行程序,在页面中将显示英文和数字混合的验证码,用户只有输入正确的验证码后,才可以完成登录。如果当前生成的验证码不容易辨认,也可以单击“看不清?换一个”超链接生成新的验证码,这时页面并不会刷新。本项目...
用于页面生成图片显示验证码,随机生成图片和图片内容
This is a digital graphic verification code written in canvas(这是一个vue的插件,使用canvas来生成图形验证码)
asp.net页面无刷新生成图片验证码!生成噪音
在jsp页面登陆时,有验证码功能会更加安全,这些资料能教你如何在jsp页面中实现验证码功能,
验证码,已经写好,直接放入工程可以使用,会直接在页面显示。验证功能自己写。
利用servlet方式随机生成验证码的图片,显示到jsp页面!输入验证码提交后显示成功还是失败!
验证码生成工具类及后台控制器,保存验证码信息至session,并将验证码显示在页面指定位置,单击验证码更换。
生成验证码图片 java类中获得验证码的方法: session.getAttribute("checkcode"); jsp页面中显示图片的方式: ${pageContext.request.contextPath}/checkcode.jsp"/> 另外在web.xml中配置验证码类的加载: ...
Servlet随即产生验证码,在页面显示。通过Servlet验证。简单实用。
(1)在登录应用中,为防止恶意登录,常常需要服务器动态生成验证码并存储在session作用范围中,最后以图像形式返回给客户端显示 (2)下边的代码实现的功能:写一个JSP页,动态生成一个验证码,存储在session作用...
直接把文件拷贝到工程下,便可直接使用,按照需要显示和输入验证码的jsp可以整理到相应的页面需要输入验证码的位置。
一、控件特点: 1、使用方便,只需要从工具栏直接拖到页面即可自动验证,零代码使用。 2、自动完成客户端以及服务器...stringcodeText:控件自动生成的验证码,该字符串显示于图片中。 ImageStyleimgStyle:图片样式。
打开页面,出现验证码,输入显示的验证码,判断是否正确
所谓验证码就是将一个随机数显示在一幅图片上,并在图片上产生干扰因素。验证码能够防止攻击者编写程序,自动注册,重复登录暴力破解密码等。 (2)验证码的实现过程 在服务器端随机生成验证码字符串,保存在...
在java后台中生成验证码的ImageIO传到前端页面显示,同时把验证码的value值传入session 中用于与用户输入的验证码进行匹配,在用户验证中使用ajax技术,在不刷新页面的同时进行验证码验证。 程序结构图: ...
在生成验证码图片的时候,同时生成了一个Session,其值就是验证码图片中的数字值。 同时,提供输入框让用户输入,提交输入值后,与已有的Session值进行比较,根据判断结果做相应判断。 如果需要修改Session...
建议新手PHP朋友在本版本的基础上进行完善,1,前台模板更改美化 2,前台文章分页进行静态化 3,后台新闻列表进行分页显示 4,后台批量更新进行分段更新 5,新加读取次数的字段,并在静态html页面进行动态调用 6,...
在登录应用中,为防止恶意登录,常常需要服务器动态生成验证码并存储在session作用范围中,最后以图像形式返回给客户端显示 下边的代码实现的功能:写一个JSP页,动态生成一个验证码,存储在session作用范围内,并以...