Java编写验证码
Java后台代码(CheckCodeServlet.java)
package web; 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.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class CheckCodeServlet extends HttpServlet {
/*
* 返回一张动态图片
*
*/
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/jpeg");
//获取字节流
OutputStream os=response.getOutputStream();
//图片映射区,理解成画板就行,画验证码
// BufferedImage image=new BufferedImage(width,height,imageType);
BufferedImage image=new BufferedImage(80,40,BufferedImage.TYPE_INT_RGB);
//画笔
Graphics g=image.getGraphics();
//添加背景颜色(随机)
Random r=new Random();
g.setColor(new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256)));//Color(red,green,blue);rgb格式的颜色设置
g.fillRect(0, 0, 80, 40);//画矩形区域
//画字符串
g.setColor(Color.black);//设置验证码的颜色
g.setFont(new Font(null,Font.BOLD,20));//设置验证码的字体 Font(字体,样式,大小)
String num=getNum(5);//调入验证码
g.drawString(num, 5, 30);//(字符串内容,X坐标,Y坐标)
//划线,干扰机器人识别验证码
for(int i=0;i<6;i++){
//画6条线
g.setColor(new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256)));//设置线的颜色
g.drawLine(r.nextInt(80),r.nextInt(80),r.nextInt(80),r.nextInt(80));//g.drawLine(起点X坐标,起点Y坐标,终点X坐标,终点Y坐标);
}
//压缩 传输(画出的图片比较大,需要压缩,画出的是24位图)
ImageIO.write(image, "jpeg", os); } //返回正确的验证码
//length:验证码的长度
public String getNum(int length){
String str="ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";//常量,为了根据长度挑出随机的验证码
Random r=new Random();
StringBuffer sf=new StringBuffer();
for(int i=0;i<length;i++){
int index=r.nextInt(str.length());//取str的下标
char c=str.charAt(index);//根据下标取字符
sf.append(c);//字符放入字符串缓冲区
}
return sf.toString();//转换成字符串返回
}
}
web.xml配置文件
<servlet>
<servlet-name>CheckCodeServlet</servlet-name>
<servlet-class>web.CheckCodeServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>CheckCodeServlet</servlet-name>
<url-pattern>/checkCode</url-pattern>
</servlet-mapping>
text.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<input >
图片:<img id="num" src="checkCode"><a href="javascript:;" onclick="document.getElementById('num').src='checkCode?'+new Date().getTime();">换一张</a>
</body>
</html>
Java编写验证码的更多相关文章
- 网页动物园2.0发布,经过几个月的努力,采用JAVA编写!
网页动物园2.0发布,经过几个月的努力,采用JAVA编写! 网页动物园2.0 正式发布!游戏发布 游戏名称: 网页动物园插件 游戏来源: 原创插件 适用版本: Discuz! X1.5 - X3.5 ...
- 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小
原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...
- java 编写hadoop程序中使用第三方libxx.so库
在使用java编写hadoop处理程序时遇到了,java使用依赖的第三方libxx.so库的情况,找到了一种可行的方法,记录一下,希望对别人也有帮助: 加入需要使用的lib库为libxxx.so 1. ...
- java识别验证码
所需资源下载链接(资源免费,重在分享) Tesseract:http://download.csdn.net/detail/chenyangqi/9190667 jai_imageio-1.1-alp ...
- 如何用Java编写一段代码引发内存泄露
本文来自StackOverflow问答网站的一个热门讨论:如何用Java编写一段会发生内存泄露的代码. Q:刚才我参加了面试,面试官问我如何写出会发生内存泄露的Java代码.这个问题我一点思路都没有, ...
- Java编写的C语言词法分析器
Java编写的C语言词法分析器 这是java编写的C语言词法分析器,我也是参考很多代码,然后核心代码整理起来,放在QQ空间和博客上,目的是互相学习借鉴,希望可以得到高手改进.这个词法分析器实现的功能有 ...
- delphi调用java编写的webservice
delphi调用java编写的webservice JAVApojo: public class GroupInfo implements Serializable{ private stati ...
- js编写验证码
这是一个简单的js编写的验证码,自己已经亲自验证,没有问题了 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN ...
- 实战WEB 服务器(JAVA编写WEB服务器)
实战WEB 服务器(JAVA编写WEB服务器) 标签: web服务服务器javawebsockethttp服务器 2010-04-21 17:09 11631人阅读 评论(24) 收藏 举报 分类: ...
随机推荐
- sencha touch 常见问题解答(1-25)
欢迎留言补充,持续更新中... 1.sencha touch 是什么? 答:Sencha touch框架是世界上第一个基于HTML 5的移动应用框架.它可以让你的Web应用看起来像网络应用.美丽的用户 ...
- CF 1073C Vasya and Robot(二分答案)
C. Vasya and Robot time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- C语言assert()函数用法总结
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h> void assert( i ...
- DXP 内电层分割
多层电路板中间层设置与内电层如何分割 多层电路板与一般的电路板不同之处在于,多层电路板除了顶层和底层之外,还有若干中间层,这些中间层可以是信号层(mid layer),也可以是内部电源/接地层(int ...
- CENTOS安装ElasticSearch
原文链接:https://my.oschina.net/topeagle/blog/591451?fromerr=mzOr2qzZ CENTOS安装ElasticSearch ElasticSearc ...
- Python 核心编程
第3章 Python 基础 1.语句和语法: 注释(#): 继续换句话说跨行(\):有两种例外情况一个语句不使用反斜线也可以跨行.在使用闭合操作符时,单一语句可以跨多行,如小括号.中括号,花括号等,另 ...
- OpenCV学习笔记之课后习题练习2-3
3.使用例2-10中的视频捕捉和存储方法,结合例2-5中的doPyrDown()创建一个程序,使其从摄像机读入视频数据并将缩放变换后的彩色图像存入磁盘. 例2-10中所用的方法虽然能正常运行,但却不能 ...
- PyQT5-QSlide滑块
""" QSlider:是一个小滑块组件,这个小滑块能够被拖着一起滑动,用于通常修改具有一定范围的数据 Author: dengyexun DateTime: 2018. ...
- 数据恢复:AMDU数据抽取恢复
今天我们通过一则真实的案例来认识oracle 自带工具AMDU,无需将磁盘组mount即可实现数据分析,轻松进行数据恢复.某日,我们收到了一则香港用户ASM破坏案例,请求数据恢复.灾难描述:这则案例是 ...
- Oracle体系结构之oracle密码文件管理
密码文件 密码文件作用: 密码文件用于dba用户的登录认证. dba用户:具备sysdba和sysoper权限的用户,即oracle的sys和system用户. 本地登录: 1)操作系统认证: [or ...