servlet awt随机图片验证码
package rd.test; import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
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 Test1 extends HttpServlet { public static final int WIDTH = 120;
public static final int HEIGHT = 35; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { BufferedImage image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); //1,设置背景色
setBackGround(g); //2,设置边框
setBorder(g); //3,画干扰线
drowRandomLine(g); //4,写随机数
//drawRandomNum(g);
String random = drawRandomNum2d((Graphics2D)g);//验证相关
request.getSession().setAttribute("checkcode",random);//验证相关
//5,图形写给浏览器
response.setContentType("image/jpeg");
//控制浏览器不要缓存随机验证码图片,让它每次都更新
response.setDateHeader("expries", -1);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
ImageIO.write(image, "jpg", response.getOutputStream());
} private void drowRandomLine(Graphics g) {
// TODO Auto-generated method stub
g.setColor(Color.GRAY); for(int i = 0;i<5;i++) {
int x1 = new Random().nextInt(WIDTH-2)+2;
int y1 = new Random().nextInt(HEIGHT-2)+2; int x2 = new Random().nextInt(WIDTH-2)+2;
int y2 = new Random().nextInt(HEIGHT-2)+2; g.drawLine(x1, y1, x2, y2);
}
} private String drawRandomNum2d(Graphics2D g) {
// TODO Auto-generated method stub
g.setColor(Color.RED);
g.setFont(new Font("宋体",Font.BOLD,20));
//[\u4e00-\u9fa5]
String base = "一二三四五六七八九十百千万兆亿啊我饿依无余"; StringBuffer sb = new StringBuffer();//验证相关
int x = 5;
for(int i = 0;i<4;i++) {
int degree = new Random().nextInt()%30;
String ch = "" + base.charAt(new Random().nextInt(base.length()));
sb.append(ch);//验证相关
g.rotate(degree*Math.PI/180, x, 25);//设置旋转幅度
g.drawString(ch, x, 25);
g.rotate(-degree*Math.PI/180, x, 25);//转回去
x+=30;
}
return sb.toString();
} private void drawRandomNum(Graphics g) {
g.setColor(Color.RED);
g.setFont(new Font("宋体",Font.BOLD,20));
//[\u4e00-\u9fa5]
String base = "一二三四五六七八九十百千万兆亿啊我饿依无余"; int x = 5;
for(int i = 0;i<4;i++) {
String ch = "" + base.charAt(new Random().nextInt(base.length()));
g.drawString(ch, x, 20);
x+=30;
} } private void setBorder(Graphics g) {
g.setColor(Color.BLUE);
g.drawRect(1, 1, WIDTH-2, HEIGHT-2); } private void setBackGround(Graphics g) {
// TODO Auto-generated method stub
g.setColor(Color.WHITE);
g.fillRect(0, 0, WIDTH, HEIGHT);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { } }
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> <script type="text/javascript">
function changeImg(img){
img.src = img.src + "?" + new Date().getTime();
}
</script> </head> <body> <form action="/web/servlet/check" method="post">
用户名:<input type="text" name="username">
密码 :<input type="password" name="password"><br/><br/>
验证码:<input type = "text" name="checkcode">
<img src="http://localhost:8080/random/servlet/Test1" onclick="changeImg(this)"/>
<input type="submit" value="注册">
</form>
</body>
</html>
check:
request.setCharacterEncoding("UTF-8");
String c_checkcode = request.getParameter("checkcode");
String s_checkcode = request.getSession().getAttribut("checkcode");
if(c_checkcode!=null && s_checkcode!=null && c_checkcode.equals(s_checkcode)){
System.out.println("处理注册请求“);
}else{
System.out.println("验证码错误");
}
servlet awt随机图片验证码的更多相关文章
- springboot搭建项目,实现Java生成随机图片验证码。
这篇文章主要介绍了如何通过Java如何生成验证码并验证.验证码的作用我想必大家都知道,话不多说开始实施! 首先创建一个springboot项目以下是项目结构,内有utli工具类.存放生成图片验证码方法 ...
- python随机图片验证码的生成
Python生成随机验证码,需要使用PIL模块. 安装: 1 pip3 install pillow 基本使用 1. 创建图片 1 2 3 4 5 6 7 8 9 from PIL import Im ...
- Java生成随机图片验证码
前台html代码 [Java] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 <div style="margin-top: 50px;&quo ...
- python 生成随机图片验证码
1.安装pillow模块 pip install pillow (1)创建图片 from PIL import Image #定义使用Image类实例化一个长为400px,宽为400px,基于RGB的 ...
- 字符型图片验证码识别完整过程及Python实现
字符型图片验证码识别完整过程及Python实现 1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...
- 字符识别Python实现 图片验证码识别
字符型图片验证码识别完整过程及Python实现 1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...
- Django登录(含随机生成图片验证码)注册实例
登录,生成随机图片验证码 一.登录 - 随机生成图片验证码 1.随机生成验证码 Python随机生成图片验证码,需要使用PIL模块,安装方式如下: pip3 install pillow 1)创建图片 ...
- response小结(三)—输出随机图片(验证码功能实现)
本文是一个很简单的向网页上输出验证码的实现喲!通过注释解释清楚了每一步! Myeclipse下的Package Explorer显示文件结构如下: ResponseDemo.java实现了输出随机图片 ...
- Servlet实现数字字母验证码图片(二)
Servlet实现数字字母验证码图片(二): 生成验证码图片主要用到了一个BufferedImage类,如下:
随机推荐
- const和define在值定义上的区别
(1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. (2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有 ...
- leetcode weekly contest 43
leetcode weekly contest 43 leetcode649. Dota2 Senate leetcode649.Dota2 Senate 思路: 模拟规则round by round ...
- JDK及JRE中bin工具说明
jre/bin工具说明:javac:Java编译器,将Java源代码换成字节代 java:Java解释器,直接从类文件执行Java应用程序代码 appletviewer(小程序浏览器):一种执行HTM ...
- Apache commons——Apache旗下的通用工具包项目
Apache Commons是Apache旗下的一个开源项目,包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动 这里是Apache commons的官方网站 下面是工具的简单介绍: ...
- R类
资源文件的使用分为在代码中使用和在其他资源文件中引用该资源文件.在我们编译一个Android应用时,Android会自动生成一个R类,在该类中根据不同的资源类型又生成了相应的内部类,该类包含了系统中使 ...
- boost.python编译及演示样例
欢迎转载,转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/46781581 linux编译boost的链接:http://bl ...
- fdopen()和fileno()函数
转:http://book.2cto.com/201212/11763.html 文件描述字函数是流函数的初等函数,每一个流都与一个描述字相连.给定一个打开的文件描述字,可以用fdopen()函数为它 ...
- JSON还原为结构体
JSON还原为结构体 1)JSON字符串还原为结构体: 2)访问结构体的字段值: 本例运行效果图: uses SynCommons; const // JSON字符串 JSON1 = '{' + #1 ...
- WINDOWS常用端口列表
按端口号可分为3大类: (1)公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务.通常这些端口的通讯明确表明了某种服务的协议.例如:80端口实际上总 ...
- javascript比较两个时间大小
//var yourtime=document.getElementById('begin_time').value; var yourtime='2010-12-10 11:12'; yourtim ...