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) 收藏 举报 分类: ...
随机推荐
- python tkinter教程-事件绑定
一个Tkinter主要跑在mainloop进程里.Events可能来自多个地方,比如按键,鼠标,或是系统事件. Tkinter提供了丰富的方法来处理这些事件.对于每一个控件Widget,你都可以为其绑 ...
- Bat脚本实现监控进程功能
脚本不间断监控notepad.exe进程是否执行,若停止,则自动重启该进程,程序如下: @echo off set _task = notepad.exe set _svr = c:\windows\ ...
- VMware ESXI5.5 Memories limits resolved soluation.
在使用VMware ESXI5.5 的时候提示内存限制了,在网上找的了解决方案: 如下文: 1. Boot from VMware ESXi 5.5; 2. wait "Welcome to ...
- nginx中实现把所有http的请求都重定向到https
在网站启用https之后,我们可能会有一个需求,就是将所有的http的请求自动地重定向到https, 如果前端是使用的nginx来实现的https,我们可以这样配置nginx的301重定向: serv ...
- Xcode脚本自动化打包问题:xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH
运行脚本后报错: xcrun: error: unable to find utility "PackageApplication", not a developer tool o ...
- UEditor富文本WEB编辑器自定义默认值设置方法
1.在使用UEditor编辑器编写内容时你会发现,当输入的内容较多时,编辑框的边框高度也会自动增加,若希望输入内容较多时以拉框滚动的效果. 方法:找到Ueditor文件根目录下的ueditor.con ...
- python之接口
首先,我们必须明确的一点是:python里无接口类型,定义接口只是一个人为规定,在编程过程自我约束 python的类是可以写任意个方法的 定义一个接口对继承类进行约束,接口里有什么方法,继承类就必须有 ...
- 原生JS实现ajax 发送post请求
1. [代码]原生JS实现ajax 发送post请求 <script> var oStr = ''; var postData = {}; var oAjax = null; //post ...
- AppScan扫描建议 问题集
1.1 AppScan扫描建议 若干问题的补救方法在于对用户输入进行清理. 通过验证用户输入未包含危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务,例如:启动任意 SQL 查询 ...
- 2018上C语言程序设计(高级)作业- 第4次作业
作业要求一 1.设计思路: 第一步:首先通过cmd进行判断 第二步:根据题目写的分别进入不同的判断函数,进行逐一判断: 2.实验代码: #include <stdio.h> #includ ...