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类,如下:
随机推荐
- DiskFileUpload上传与Spring的CommonsMultipartResolver上传对比
最近在做一个小小的上传功能竟被虐得体无完肤, 在使用tomcat内置的DiskFileUpload获取前台jsp传来的附件参数和其他表单参数, 竟然出现莫名其妙的乱码问题, 即使tomcat的serv ...
- MSSQL SELECT(刚刚)新插入到表中的那条记录
假设对表 TXxxxxxxx 表新插入一条记录,然后要 SELECT 出刚刚插入的这条记录.可使用 SCOPE_IDENEITY(); 处理.具体代码参考如下: INSERT INTO TXxxxxx ...
- python string和dict转换
字典(dict)转为字符串(string) 我们可以比较容易的将字典(dict)类型转为字符串(string)类型. 通过遍历dict中的所有元素就可以实现字典到字符串的转换: for key, va ...
- VS2010下面Empty Project使用
VS2010下面Empty Project使用:1,添加代码HelloApp #include <afxwin.h> class CHelloApp:public CWinApp{publ ...
- Small tips of APP H5 page
在开发日常落地页的时候,每当碰到一些很酷炫的宣传图用css实现很复杂且耗时的时候,一般采取切图然后将其放在页面中,在这个过程中发现<img/>标签中图片下方会有一行小空白,影响了与后一部分 ...
- unity 3D + Google Play In-app Billing (IAB)(转) 热度 3
最近由于工作需要,研究unity如何接入Google Play以实现游戏内购买.目前IAB的实现,prime31做的插件比较好,各平台的IAB均有,但费用相对过高(几乎都是70刀左右,可怜穷小子).在 ...
- 【mysql】二级索引----聚簇索引和非聚簇索引-----
参考地址: https://blog.csdn.net/bigtree_3721/article/details/51335479 https://blog.csdn.net/roxliu/artic ...
- android 设置屏幕方向
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//通过程序改变屏幕显示的方向 1.landscape:横屏(风景 ...
- json-lib 的maven dependency
项目中要用到json-lib,mvnrepository.com查找它的dependency时结果如下: <dependency> <groupId>net.sf.json-l ...
- Orchard运用 - 如何隐藏去除某些Meta标记
众所周知,每个系统多多少少都会有一些痕迹或标记之类的东西, 比如默认的Orchard搭建的网站, 如果你查看源代码即可看到类似的代码: <meta content="Orchard&q ...