java生成图片验证码示例程序
发布时间:2023-09-13 10:17:57
标签:java,图片验证码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登陆页面</title>
<script type="text/javascript">
function refresh() {
loginForm.image.src = "creatImage.jsp";
}
</script>
</head>
<body>
<h1>欢迎登陆本系统</h1><br>
<form action="" method = "post" name="loginForm">
<label>账号:<input name="username" type="text" /></label><br>
<label>密码:<input name="password" type="password" /></label><br>
<label>验证码:<input name="code" type="text" /></label>
<!-- 将验证码当做图片处理 -->
<img name="image" border="0" src="creatImage.jsp" onclick="refresh()" />
<input type="submit" value="登陆" />
</form>
</body>
</html>
<%@page import="java.util.Random"%>
<%@page import="java.awt.Graphics"%>
<%@page import="javax.imageio.*"%>
<%@page import="java.awt.*"%>
<%@page import="java.awt.image.BufferedImage"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
final char[] str = {'0','1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q',
'r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H',
'I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int width=100,height=60;
BufferedImage bi = new BufferedImage(width,height,
BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
g.setColor(new Color(200,200,200));
g.fillRect(0, 0, width, height);
Random rnd = new Random();
StringBuffer sb = new StringBuffer("");
//产生四位数的字母数字验证码,各个数字的颜色也随即
for(int i=0; i<4; i++) {
int num = rnd.nextInt(str.length);
Color c = new Color(rnd.nextInt(256),
rnd.nextInt(256),rnd.nextInt(256));
g.setColor(c);
g.setFont(new Font("", Font.BOLD+Font.ITALIC, 20));
g.drawString(str[num]+"", 10, 17);
sb.append(str[num]);
}
//划干扰线
for(int i=0; i<10; i++) {
Color c = new Color(rnd.nextInt(256),
rnd.nextInt(256),rnd.nextInt(256));
g.setColor(c);
g.drawLine(rnd.nextInt(width), rnd.nextInt(height),
rnd.nextInt(width), rnd.nextInt(height));
}
String s = new String(sb);
/*
若是产生四位数字,则nextInt(8999) + 1000;
然后String.valueOf转换为String
*/
//验证码存入session里,方便在登陆校检页比对
session.setAttribute("image",s);
//输出到页面
ImageIO.write(bi,"JPEG",response.getOutputStream());
/*
加入下面这两句什么作用呢?
否则报异常: java.lang.IllegalStateException: getOutputStream()
has already been called for this response
不管原因了
*/
out.clear();
out = pageContext.pushBody();
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>图片生成</title>
</head>
<body>
</body>
</html>


猜你喜欢
- C#调用C++ dll string类型返回为了这个问题,百度了一堆不靠谱的资料,什么C#调用c++类型对应啥的,说用string ,Str
- 一、基本概念C#只有两种数据类型:值类型和引用类型值类型在线程栈分配空间,引用类型在托管堆分配空间值类型转为引用类型称成为装箱,引用类型转为
- android在网络上下载文件,供大家参考,具体内容如下步骤: 1.使用HTTP协议下载文件- 创建一个HttpURLConnection对
- 需求读200+的CSV/EXCEL文件,按文件名称存到不同数据库前期准备环境maven + jdk8 + mysql代码展示pom文件<
- 目录位运算按位“与” &按位“或” |异或 ^移位运算左移 <<右移 >>无符号右移 >>>
- 消息发送过程消息的发送可能会经过 * 、序列化、分区器等过程。消息发送的主要涉及两个线程,分别为main线程和sender线程。如图所示,主
- 一、背景我们都知道 http 协议只能浏览器单方面向服务器发起请求获得响应,服务器不能主动向浏览器推送消息。想要实现浏览器的主动推送有两种主
- 这篇文章主要介绍了springboot配置文件的加载顺序解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 前言在最近的一个项目需要用JAVA来解析DICOM图片,DICOM被广泛应用于放射医疗,心血管成像以及放射诊疗诊断设备(X射线,CT,核磁共
- 一、项目简述环境配置:Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,
- 概述异步这个概念在不同语境下有不同的解释,比如在一个单核CPU里开启两个线程执行两个函数,通常认为这种调用是异步的,但对于CPU来说它是单核
- 一、synchronized 有不足新事物的出现要不是替代老事物,要么就是对老事物的补充JUC 的 locks 就是对 synchroniz
- 前言Groovy 是一种基于 JVM 的动态语言,与 Java 语言紧密集成,可以很方便地在 Java 项目中使用。Groovy 有着简洁的
- 1. json数据类型类型描述Number数字型String字符串型Boolean布尔型Array数组Object对象null空值(1)js
- 按照常规思维,往一个map里put一个已经存在的key,会把原有的key对应的value值覆盖,然而通过一次线上问题,发现Java8中的Co
- 本文实例为大家分享了Unity3D实现摄像机镜头移动并限制角度的具体代码,供大家参考,具体内容如下摄像机镜头跟随鼠标移动,并限制上下左右的移
- 先看看效果图:开源项地址:https://github.com/chrisbanes/Android-PullToRefresh
- 用函数指针变量调用函数指针变量也可以指向一个函数。一个函数在编译时被分配给一个入口地址。这个函数入口地址就称为函数的指针。可以用一个指针变量
- 前言JavaEE(Java Enterprise Edition),Java企业版,是一个用于企业级web开发平台。最早由Sun公司定制并发
- Class类中获取方法:public Method[] getMethods();//获取包括自身和继承(实现)过来的所有的public方法