Java实现图片验证码具体代码
作者:xanlv 发布时间:2021-06-30 13:16:35
标签:Java,验证码
本文实例为大家分享了Java图片验证码代码,供大家参考,具体内容如下
网页显示效果:
index.jsp
使用两种方式强制图片更新:
1、设置图片输出时不缓存。
2、用js改变请求的地址。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>第一个web项目的主页</title>
<script type="text/javascript">
function changeImg(){
var _img=document.getElementById("_img");
var time=new Date().getTime();//浏览器认为相同的动作(被过滤)没必要应答,所以用时间值改变src值(即请求)(事实上是同一请求)
_img.src="confirm?"+time;//用js改变请求的地址
}
</script>
</head>
<body>
<h2>主页主页</h2>
<h2>湖南长沙</h2>
<h3>发布方式一......</h3>
<img src="images/1.jpg"/>
<br/>
<a href="jsps/a.jsp">去到子页</a>
<hr/>
<form >
姓名:<input type="text" name="nmae"/><br/>
密码:<input type="password" name="pwd"/> <br/>
确认密码:<input type="text" name=pwd2/> <br/>
验证码:<input type="text" /><img id="_img" src="confirm"/>
<!-- 不可行
<a href="confirm">看不清</a> <br/>
-->
<a href="javascript:changeImg();">看不清</a> <br/>
<input type="submit" value="注册"/>
</form>
</body>
</html>
自动生成验证码的java代码
关键类(以下类为基础部分的内容)
BufferedImage
ImageIO
Graphics/Graphics2D
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
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 ImageServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// System.out.println("jinlaile");
resp.setContentType("image/jpeg");//jpeg是图片格式。设置响应内容的类型为jpeg的图片
int width=64;
int height=40;
BufferedImage bImg=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g=bImg.getGraphics();
//背景
g.setColor(Color.white);
g.fillRect(0, 0, width, height);
//字体颜色
g.setFont(new Font("aa", Font.BOLD,18));
//用随机数生成验证码:4个0~9以内的整数
Random r=new Random();
for(int i=0;i<=4;i++){
int t=r.nextInt(10);//10以内的随机整数
int y=10+r.nextInt(20);//上下位置:10~30
Color c=new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255));
g.setColor(c);
g.drawString(""+t, i*16, y);
}
//画干扰线
for(int i=1;i<8;i++){
Color c=new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255));
g.setColor(c);
g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));
}
//把图形刷到bImg对象中
g.dispose();//相当于IO中的close()方法带自动flush();
ImageIO.write(bImg,"JPEG", resp.getOutputStream());//通过resp获取req的outputStream对象,发向客户端的socket的封装,即写到客户端
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<!-- 访问安全目录WEB-INF中的b.jsp文件 -->
<servlet>
<servlet-name>bbbb</servlet-name>
<jsp-file>/WEB-INF/b.jsp</jsp-file>
</servlet>
<!-- 访问生成验证码的java代码 -->
<servlet>
<servlet-name>img</servlet-name>
<servlet-class>cn.hncu.servlet.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>bbbb</servlet-name>
<url-pattern>/bb.asp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>img</servlet-name>
<url-pattern>/confirm</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
0
投稿
猜你喜欢
- package TestList;import java.util.ArrayList;import java.util.Iterator;
- 介绍了图的最小生成树的概念,然后介绍了求最小生成树的两种算法:Prim算法和Kruskal算法的原理,最后提供了基于邻接矩阵和邻接链表的图对
- 一、案例场景遇到过这样的场景,在定义一个static修饰的Map时,使用了大量的put()方法赋值,就类似这样——public static
- 什么是WebSocket?WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信—
- 1.spring-kafka<dependency> <groupId>org.springframe
- 环境:VS2019+Qt5.121. CLR库安装 &nb
- 序言之前封装过一个日志注解,打印方法执行信息,功能较为单一不够灵活,近来兴趣来了,想重构下,使其支持表达式语法,以应对灵活的日志打印需求。该
- 容器适配器我们可以看出,栈中没有空间配置器(内存池),而是适配器适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目
- 一、消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架
- 注:作者使用IDEA + Gradle注:需要有一定的java SpringBoot and SSM+Springcloud基础程序测试错误
- 1.定义Token的注解,需要Token校验的接口,方法上加上此注解import java.lang.annotation.ElementT
- Java Function的使用一、方法介绍表示接受一个参数并产生结果的函数。参数类型 T - 函数输入的类型R - 函数的结果类型方法介绍
- 双向循环链表定义相比于单链表,有两个指针,next指针指向下一个结点,prior指针指向上一个结点,最后一个结点的next指针指向头结点,头
- 多数据源创建数据库CREATE DATABASE mybatis_plus_1;USE mybatis_plus_1;CREATE TABL
- 项目中用到用户定义运算公式进行就算的需求,这样需要进行字符串四则运算解析,下面提供字符串公式四则运算解析与计算工具类,需要的同学可参考。工具
- 一、准备官网下载IntelliJ IDEA 2017 并安装好下载汉化包 (链接: https://pan.baidu.com/s/1JkU
- throw抛出异常的方式比较直接:if(age < 0){throw new MyException("年龄不能为负数!&q
- Java程序设计 图形用户界面 【十】复选框复选框JCheckBoxJCheckBox类方法作用public JCheckBox(Icon
- 背景:本人不是Java开发人员,经过四年多的历练,可以说是一枚BI攻城师了吧,最近粗糙的写了一个Portal来集成cognos报表,下面就入
- 1、JDBCJDBC 就是 数据库开发 操作的 代名词,因为只要是现代商业项目的开发那么一定是离不开 数据库 的,不管你搞的是什么,只要是想