1.页面代码

<html>
<head>
<title>Title</title>
<script type="text/javascript" src="/resources/js/jquery-3.3.1.js" ></script>
<script type="text/javascript" >
function reloadCheckImg()
{
$("img").attr("src", "./img.jsp?t="+(new Date().getTime())); //<img src="...">
}
$(document).ready(function(){
$("#checkcodeId").blur(function(){
var $checkcode = $("#checkcodeId").val();
//校验 :文本框中输入的值 发送到服务端。
//服务端: 获取文本框输入的值 ,和真实验证码图片中的值对比 ,并返回验证结果
$.post(
"/CheckCodeServlet",//服务端地址
"checkcode="+$checkcode ,
function(result){//图片地址(imgs/right.jpg imgs/wrong.jpg)
//result: imgs/right.jpg
var resultHtml = $("<img src='"+result+"' height='15' width='15px' />") ;
$("#tip").html(resultHtml);
}
);
});
});
</script>
</head>
<body>
验证码:
<input type="text" name="checkcode" id="checkcodeId" size="4" />
<!-- 验证码--> <a href="javascript:reloadCheckImg();"> <img src="./img.jsp"/></a> <span id="tip"> </span>
</body>
</html>

2.绘制验证码

<%@ page import="java.awt.*" %>
<%@ page import="java.util.Random" %>
<%@ page import="java.awt.image.BufferedImage" %>
<%@ page import="javax.imageio.ImageIO" %>
<%@ page contentType="image/jpeg;charset=UTF-8" language="java" %> <%!
//随机产生颜色值
public Color getColor(){
Random ran = new Random() ;//Math.random() 0-1
int r = ran.nextInt(256) ;
int g = ran.nextInt(256) ;
int b = ran.nextInt(256) ;
return new Color(r,g,b) ;//red green blue 0-255
} //产生验证码值
public String getNum() {
// 0-8999 1000-9999
int ran = (int)( Math.random()*9000) +1000 ;
return String.valueOf(ran) ;
}
%> <% //禁止缓存,防止验证码过期
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.setHeader("Expires","0"); //绘制验证码
BufferedImage image = new BufferedImage(80,30,BufferedImage.TYPE_INT_RGB) ;
//画笔
Graphics graphics = image.getGraphics();
graphics.fillRect(0,0,80,30);
//绘制干扰线条
for(int i=0;i<60;i++)
{
Random ran = new Random() ;
int xBegin = ran.nextInt(80) ;//
int yBegin = ran.nextInt(30) ; int xEnd = ran.nextInt(xBegin +10 ) ;
int yEnd = ran.nextInt(yBegin + 10) ; graphics.setColor( getColor());
//绘制线条
graphics.drawLine(xBegin,yBegin,xEnd,yEnd);
} graphics.setFont(new Font("seif",Font.BOLD,20));
//绘制验证码
graphics.setColor(Color.BLACK);
String checkCode = getNum() ; //2 1 3 4
StringBuffer sb = new StringBuffer() ;
for(int i=0;i<checkCode.length();i++){
sb.append(checkCode.charAt(i)+" " ) ;//验证码的每一位数字
} graphics.drawString( sb.toString(), 15,20 );//绘制验证码 //将验证码真实值 保存在session中,供使用时比较真实性
session.setAttribute("CKECKCODE" ,checkCode ); //真实的产生图片
ImageIO.write(image,"jpeg", response.getOutputStream()) ; //关闭
out.clear();
out = pageContext.pushBody() ; //<input type="image" src="xxx" /> %>

3.service调用

        String resultTip = null;
//获取用户输入验证码
String checkcodeClient = request.getParameter("checkcode");
//真实的验证码值
String checkcodeServer = (String) request.getSession().getAttribute("CKECKCODE");
if(checkcodeServer.equals(checkcodeClient)) {
resultTip = "/resources/image/right.jpg";
}else {
resultTip = "/resources/image/wrong.jpg";
}
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.write(resultTip);
writer.close();
writer.flush();

JavaWeb中登录验证码生成的更多相关文章

  1. python登录验证码生成及自动化测试规避

    在用django写论坛的时候,需要有登录及注册功能. 故就登录界面后端需要生成随机验证码并传值给前端的代码进行编写如下. 验证码生成png需要调用到python的图形库 生成注册码img import ...

  2. Javaweb中利用kaptcha生成验证码

    引入kaptcha-2.3-jdk15.jar包 在web.xml中进行配置 <servlet> <servlet-name>Kaptcha</servlet-name& ...

  3. ASP.NET登录验证码解决方案

    目录 #验证码效果图 #代码 0.html代码 1.Handler中调用验证码生成类 2.验证码图片绘制生成类 3.高斯模糊算法类 #注意 #参考 在web项目中,为了防止登录被暴力破解,需要在登录的 ...

  4. JavaWeb开发之普通图片验证码生成技术与算术表达式验证码生成技术

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6134649.html    另:算术验证码生成的JSP.Servlet实现均已移植github:https:/ ...

  5. Java中SSM+Shiro系统登录验证码的实现方法

    1.验证码生成类: import java.util.Random; import java.awt.image.BufferedImage; import java.awt.Graphics; im ...

  6. Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题

    日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚 ...

  7. java web中验证码生成的demo

    首先创建一个CaptailCode类 package com.xiaoqiang.code; import java.awt.*; import java.awt.font.FontRenderCon ...

  8. javaweb项目中表单生成的验证码以及校验

    首先先来看一下项目的结构吧,有两个servlet,一个是进行验证码的生成以及存储的,一个是进行校验的,还有一个jsp页面是用来实现form表单的书写和展示: 我们只需要看这三个就行了,其他的自动忽略: ...

  9. javaweb(九)—— 通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

随机推荐

  1. Docker系列八: 数据卷

    什么是数据卷 生成环境中使用docker的过程中,往往需要对数据进行持久化,或者需要多个容器之间进行数据共享,这个就涉及到了容器数据管理 容器中管理数据主要有两种方式: 数据卷:容器内数据之间映射到本 ...

  2. mysql 子查询不支持limit

    mysql执行如下语句 : SELECT * FROM `xxx_base_info` where yn =1 and xxx_keeper_id in (SELECT id FROM `user`w ...

  3. 5-6 学生CPP成绩计算

    给出下面的人员基类框架: class Person { protected: string name; int age; public: Person(); Person (string p_name ...

  4. nmon监控指标

    一.NMON中的各项参数指标: SYS_SUMM:显示当前服务器的总体性能情况 Total System I/OStatistics: Avg tps during an interval:显示采集间 ...

  5. python学习笔记(13)常用模块列表总结

    os模块: os.remove() 删除文件 os.unlink() 删除文件 os.rename() 重命名文件 os.listdir() 列出指定目录下所有文件 os.chdir() 改变当前工作 ...

  6. django框架进阶-admin-长期维护

    ###############    django--admin的使用    ################ # django后台管理: # 第一步: # 在settings文件中修改语言和时区 L ...

  7. 牛客-小w的a=b问题

    题目传送门 sol1:老实做,预处理出所有2到1e5的素数,对所有数进行分解质因数,然后对比因子个数.感觉有点卡常,用了快读然后多次优化之后才过的,map也用上了. 素数筛,快速分解质因数 #incl ...

  8. python3下scrapy爬虫(第三卷:初步抓取网页内容之抓取网页里的指定数据)

    上一卷中我们抓取了网页的所有内容,现在我们抓取下网页的图片名称以及连接 现在我再新建个爬虫文件,名称设置为crawler2 做爬虫的朋友应该知道,网页里的数据都是用文本或者块级标签包裹着的,scrap ...

  9. 思科WLC5508上传定制Portal展示模版

    1. 登录Cisco设备,获取模板样例登录cisco WLC设备后点击help,打开帮助文档Wireless Tab-->Web Login Page-->External Web Aut ...

  10. 吴裕雄--天生自然 R语言开发学习:广义线性模型(续一)

    #----------------------------------------------# # R in Action (2nd ed): Chapter 13 # # Generalized ...