昨晚在csdn看到一位前辈写一个ajax+servlet+jsp验证。顿时心血来潮,在阅读前辈的代码下我亲手体验一下,做了一个验证码生成工具类。以供大家做个參考。

1:加入VeriyCodeUtils类生成验证码图像

package com.servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.util.Random; import javax.imageio.ImageIO; /**
*
* @author hubiao
* 验证码生成器
* 用到API
* BufferedImage 创建一个图像
* Graphics2D 绘制
* fillRect(x,y,width,height);背景
* font()字体
* drawRect();边框
* drawLine();线
* drwaString:图像数据
* ImageIO 生成图像
*/
public class VeriyCodeUtils {
/**
* @param output 保存验证图像的流
* @return 验证码
*/
public static String newVeriyCode(OutputStream output)
{
int width = 90;
int height = 40;
int codeCount = 5;
char[] codeSequence = { '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', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; //创建图像对象,8位RGB
BufferedImage buffered = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); //通过Crapahices来绘制图像到BufferedImage中
Graphics2D gra = buffered.createGraphics(); //设置图片背景:白色
gra.setColor(Color.WHITE);
gra.fillRect(0, 0, width, height); //设置字体,字体大小依据图片高度决定
gra.setFont(new Font("Fixedsys",Font.PLAIN,height-2)); //设置边框:黑色,1cm
gra.setColor(Color.BLACK);
gra.drawRect(0, 0, width-1, height-1); //生成10条黑色干扰线
gra.setColor(Color.BLACK);
Random ran = new Random();
for(int i = 0; i < 70;i++)
{
int x = ran.nextInt(255);
int y = ran.nextInt(255);
int x1 = ran.nextInt(255);
int y1 = ran.nextInt(255);
gra.drawLine(x, y,x+x1, y+y1);//画直线
}
//生成验证码
StringBuffer sb = new StringBuffer();
int r = 0,g = 0,b = 0;
for(int i = 0; i < codeCount; i++)
{
String strRand = String.valueOf(codeSequence[ran.nextInt(codeSequence.length)]);
//对每位验证码都生成不同的颜色。添加识别系统难度
r = ran.nextInt(255);
g = ran.nextInt(255);
b = ran.nextInt(255);
gra.setColor(new Color(r, g, b));
gra.drawString(strRand, (i+1)*13, height-4);
sb.append(strRand);
}
try {
ImageIO.write(buffered, "jpeg", output);
} catch (Exception e) {
throw new RuntimeException(e);
} return sb.toString();
}
}

2:servlet使用验证码

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//禁止图像缓存
resp.setHeader("Pragma", "no-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
resp.setContentType("image/jpeg"); //生成验证码图像
String veriyCode = VeriyCodeUtils.newVeriyCode(resp.getOutputStream()); //将验证码保存到session中
HttpSession session = req.getSession();
session.setAttribute("validateCode", veriyCode);
}

3:JSP页面使用验证码

</head>
<script type="text/javascript">
function createCode()
{
var t = new Date().getTime();//防止页面缓存。使用时间搓
var srcImg = document.getElementById("srcImg");
srcImg.src="/ImgVeifyWeb/vity.do?"+t;
}
</script>
<body>
<h1>${requestScope.code}</h1>
<img id="srcImg" src="<c:url value="/vity.do"></c:url>" /> #这里使用直接让img訪问servlet,通过response响应一个图像流
<a href="##" id="codeId" onclick="createCode()">换一张</a>
<form action="<c:url value="/hello.do"></c:url>" method="post">
<input type="text" name="codeVify"/>
<input type="submit" value="提交"/>
</form>
</body>

3:校验验证码

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpSession session = req.getSession();
Object validateCode = session.getAttribute("validateCode");
System.out.println(validateCode); String codeVify = req.getParameter("codeVify");
if(codeVify==null || codeVify.equals(""))
{
req.setAttribute("code","验证证不能为空");
req.getRequestDispatcher("/index.jsp").forward(req, resp);
return;
}else if(!validateCode.toString().equalsIgnoreCase(codeVify))
{
req.setAttribute("code","验证证错误");
req.getRequestDispatcher("/index.jsp").forward(req, resp);
return;
}
System.out.println("以下開始 做其它业务操作....");
}

校验图例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHViaWFvXzA2MTg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

Jsp+servlet 验证码案例的更多相关文章

  1. Java Web项目案例之---登录注册和增删改查(jsp+servlet)

    登录注册和增删改查(jsp+servlet) (一)功能介绍 1.用户输入正确的密码进行登录 2.新用户可以进行注册 3.登录后显示学生的信息表 4.可以添加学生 5.可以修改学生已有信息 6.可以删 ...

  2. Java基于springMVC的验证码案例

    ``` Java验证码案例(基于springMVC方式) 验证码工具类 package com.ekyb.common.util; import java.awt.Color; import java ...

  3. JSP/Servlet(一)

    JSP/Servlet(一)   Web应用和web.xml文件: 一.构建Web应用: 1.在任意目录下创建一个文件夹. 2.在第1步所建的文件夹内建一个WEB-INF文件夹(注意大小写). 3.进 ...

  4. Jsp制作验证码

    验证码 验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apart&qu ...

  5. 使用JSP+Servlet+Jdbc+Echatrs实现对豆瓣电影Top250的展示

    使用JSP+Servlet+Jdbc+Echatrs实现对豆瓣电影Top250的展示 写在前面: 有的小伙伴,会吐槽啦,你这个标题有点长的啊.哈哈 ,好像是的!不过,这个也是本次案例中使用到的关键技术 ...

  6. javaweb练手项目jsp+servlet简易购物车系统

    简易购物车项目 这是一个用intellij IDEA做的简易的javaweb项目,开发环境使用的jdk1.8和tomcat8以及mysql数据库. 1.项目开发准备: 创建github仓库 项目框架搭 ...

  7. 基于jsp+servlet图书管理系统之后台万能模板

    前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...

  8. JS.中文乱码,Jsp\Servlet端的解决办法

    JS.中文乱码,Jsp\Servlet端的解决办法 2010-03-08 15:18:21|  分类: Extjs |  标签:encodeuricomponent  乱码  urldecoder   ...

  9. 最简单的jsp+servlet的增删改查代码

    package ceet.ac.cn.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.s ...

随机推荐

  1. tomcat不打印日志

    commons-logging.jar导入这个包到tomcat  lib下 2.修改tomcat的bin目录下面的catalina.bat文件   只需修改:set CLASSPATH=%CLASSP ...

  2. dom监听事件class

    layui.use(['layer', 'form'], function(){ var layer = layui.layer ,form = layui.form; var $ = layui.j ...

  3. ARP是如何工作的?

    我们知道,当我们在浏览器里面输入网址时,DNS服务器会自动把它解析为IP地址,浏览器实际上查找的是IP地址而不是网址.那么IP地址是如何转换为第二层物理地址(即MAC地址)的呢? 在局域网中,这是通过 ...

  4. window10换系统为windows7

    第一步 第二步 第三步 下载系统:http://www.dnxtc.net 1.GHO镜像安装器和WIN7,GHO文件必须一起放在除C盘外的其他盘的根目录 2.“GHO镜像安装器“工具上右键管理员方式 ...

  5. 【原】tcpdump命令

    1.常用参数总结 tcpdump tcpdump -i  (网卡) tcpdump -nn  (数字的方式显示IP和端口.一个n是ip) tcpdump -c x   (抓包数量,x为数字) tcpd ...

  6. CGContextAddArc

    这个函数让我在纸上画了半天才搞明白,把我的理解给大家分享下. void CGContextAddArc(CGContextRef c, CGFloat x, CGFloat y, CGFloat ra ...

  7. 样例GeoQuiz应用开发 第2章

    先介绍一下MVC,Model View Controller,是软件架构中最常见的一种框架. 简单来说就是通过 controller 的控制去操作 model 层的数据,并且返回给 view 层展示, ...

  8. 笔试算法题(27):判断单向链表是否有环并找出环入口节点 & 判断两棵二元树是否相等

    出题:判断一个单向链表是否有环,如果有环则找到环入口节点: 分析: 第一个问题:使用快慢指针(fast指针一次走两步,slow指针一次走一步,并判断是否到达NULL,如果fast==slow成立,则说 ...

  9. Centos6.8 安装mongo3.6以及权限配置和开启外网链接

    目录 安装环境和版本说明,以及参考文档链接 安装MongoDB数据库 运行MongoDB数据库 删除卸载MongoDB 配置MongoDB管理员用户 修改配置文件,允许外网链接 安装配置完成,使用Ro ...

  10. laravel学习笔记3--高级

    一.artisan 1.基本使用: 1.1.查看基本命令: php artisan 1.2.查看具体命名的使用: php artisan help migrate 1.3.创建控制器: php art ...