jsp验证码生成以及刷新
验证码生成算法 -回复

验证码生成算法-回复验证码生成算法是指用于验证用户身份的一种技术手段,通过生成一串随机的字符或数字,要求用户输入正确才能通过验证。
随着网络技术的发展,验证码算法应用得越来越广泛,可以用于登录验证、注册账户、防止机器人恶意攻击等场景。
本文将从生成原理、常见算法、安全性等方面一步一步介绍验证码生成算法。
一、生成原理验证码生成算法的基本原理是通过生成随机的字符或数字,远程传递给客户端,并要求用户输入正确的验证码进行验证。
这个过程一般包括以下几个步骤:1. 生成随机字符或数字集合:首先需要确定验证码的内容,一般为字母、数字或字母数字组合。
然后从这个集合中随机选择若干个字符或数字组成验证码。
2. 绘制验证码图片:将生成的验证码绘制到一张图片上,这样用户就需要通过观察图片中的字符或数字来输入正确的验证码。
3. 将验证码传递给客户端:通过网络传输将生成的验证码发送到客户端,一般是以图片的形式进行传递。
4. 用户输入验证:用户在登录或注册界面中看到验证码图片后,需要输入相应的验证码,系统则会对用户输入的验证码和生成的验证码进行比较,若输入正确则验证通过。
二、常见验证码生成算法1. 普通随机算法:这是最直观的一种生成验证码的算法,即从字符或数字集合中随机选择若干个字符或数字组成验证码。
这种算法简单易懂,但存在安全性较低的问题,因为生成的验证码很容易被机器人破解。
2. 扭曲算法:为了增加验证码的安全性,可以对生成的验证码进行扭曲处理,使得验证码不易被机器人自动识别。
扭曲算法通常是通过对验证码图片进行一些形变操作,如扭曲、旋转、拉伸等,使得验证码不易被自动识别。
3. 噪点算法:为了进一步增加验证码的安全性,可以在验证码图片上添加一些噪点,使得验证码更难以被机器人自动识别。
噪点可以是干扰线、干扰点等,通过增加干扰元素可以有效防止机器人攻击。
4. 字体变化算法:为了增加验证码的对抗性,可以对生成的验证码进行字体变化,使得验证码更不易被破解。
jsp页面验证码

AJAX+jsp无刷新验证码实例(完整代码)1.login.jsp<%@ pagelanguage="java"contentType="text/html;charset=gb2312"import = "java.util.*"import = "java.sql.*"import = "java.text.*"import = "java.io.*"%><%@ include file="../conn.jsp"%><%request.setCharacterEncoding("gb2312");%><%String username=request.getParameter("name");String pass=request.getParameter("pws");String num=request.getParameter("num");String random=(String)session.getAttribute("random");if(num!=null&&random!=null){if(num.equals(random)){Statement stmt=conn.createStatement();ResultSet rs=stmt.executeQuery("select * from admin where admin='"+username+"' and pass='"+pass+"'");if(rs.next()){String id=rs.getString("id");session.setAttribute("id",id);response.sendRedirect("admin.jsp");}rs.close();stmt.close();conn.close();}}%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>两岸咖啡</title><link href="../include/style.css" rel="stylesheet" type="text/css" /><script src="net.js"></script><script type="text/javascript">var times=0;function subform(){var gtext=this.req.responseText;var info=document.getElementById("info");if(gtext.indexOf("validate_successful")!=-1){//info.innerHTML="<font color=green>验证码通过</font>";document.forms["form"].submit();//当得到的值表示合法,则验证码通过。
生成验证码的几种方式

⽣成验证码的⼏种⽅式⽣成验证码的⼏种⽅式1,在jsp页⾯中直接⽣成验证码image.jsp源码://image.jsp<%@ page contentType="image/jpeg"import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"pageEncoding="GBK"%><%!Color getRandColor(int fc, int bc) {//给定范围获得随机颜⾊Random random = new Random();if (fc > 255)fc = 255;if (bc > 255)bc = 255;int r = fc + random.nextInt(bc - fc);int g = fc + random.nextInt(bc - fc);int b = fc + random.nextInt(bc - fc);return new Color(r, g, b);}%><%//设置页⾯不缓存response.setHeader("Pragma", "No-cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);// 在内存中创建图象// 通过这⾥可以修改图⽚⼤⼩int width = 85, height = 23;BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 获取图形上下⽂// g相当于笔Graphics g = image.getGraphics();//⽣成随机类Random random = new Random();// 设定背景⾊g.setColor(getRandColor(200, 250));// 画⼀个实⼼的长⽅,作为北京g.fillRect(0, 0, width, height);//设定字体g.setFont(new Font("⿊体", Font.PLAIN, 18));//画边框g.setColor(Color.BLUE);g.drawRect(0,0,width-1,height-1);// 随机产⽣155条⼲扰线,使图象中的认证码不易被其它程序探测到g.setColor(getRandColor(160, 200));for (int i = 0; i < 155; i++) {int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(12);int yl = random.nextInt(12);g.drawLine(x, y, x + xl, y + yl);}// 取随机产⽣的认证码(4位数字)//String rand = request.getParameter("rand");//rand = rand.substring(0,rand.indexOf("."));String sRand = "";// 如果要使⽤中⽂,必须定义字库,可以使⽤数组进⾏定义// 这⾥直接写中⽂会出乱码,必须将中⽂转换为unicode编码String[] str = { "A", "B", "C", "D", "E", "F", "G", "H", "J", "K","L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X","Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j","k", "m", "n", "p", "s", "t", "u", "v", "w", "x", "y", "z","1", "2", "3", "4", "5", "6", "7", "8", "9" };for (int i = 0; i < 5; i++) {String rand = str[random.nextInt(str.length)];sRand += rand;// 将认证码显⽰到图象中g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));//调⽤函数出来的颜⾊相同,可能是因为种⼦太接近,所以只能直接⽣成 g.drawString(rand, 16 * i + 6, 19);}// 将认证码存⼊SESSIONsession.setAttribute("rand", sRand);// 图象⽣效g.dispose();// 输出图象到页⾯ImageIO.write(image, "JPEG", response.getOutputStream());out.clear();out = pageContext.pushBody();%>login.jsp源码(使⽤验证码的页⾯)://使⽤验证码的页⾯login.jsp<%@ page contentType="text/html" pageEncoding="GBK"%><html><head><title>登陆页⾯</title><script>function reloadImage() {document.getElementById('identity').src = 'image.jsp?ts=' + new Date().getTime();}</script></head><body><center><%// 乱码解决request.setCharacterEncoding("GBK");%><h1>登陆程序</h1><hr><%=request.getAttribute("info") != null ? request.getAttribute("info") : ""%><form action="check.jsp" method="post">⽤户ID:<input type="text" name="mid"><br>密码:<input type="password" name="password"><br>验证码:<input type="text" name="code" maxlength="5" size="5"><img src="image.jsp" id="identity" onclick="reloadImage()" title="看不清,点击换⼀张"> <br><input type="submit" value="登陆"><input type="reset" value="重置"></form></center></body></html>效果如下:2,使⽤Servlet⽣成验证码IdentityServlet.java源码://IdentityServlet.java代码如下:package com.helloweenvsfei.servlet;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;public class IdentityServlet extends HttpServlet {/****/private static final long serialVersionUID = -479885884254942306L;public static final char[] CHARS = { '2', '3', '4', '5', '6', '7', '8','9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M','N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };public static Random random = new Random();public static String getRandomString() {StringBuffer buffer = new StringBuffer();for (int i = 0; i < 6; i++) {buffer.append(CHARS[random.nextInt(CHARS.length)]);}return buffer.toString();}public static Color getRandomColor() {return new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255));}public static Color getReverseColor(Color c) {return new Color(255 - c.getRed(), 255 - c.getGreen(), 255 - c.getBlue());}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("image/jpeg");String randomString = getRandomString();request.getSession(true).setAttribute("randomString", randomString);int width = 100;int height = 30;Color color = getRandomColor();Color reverse = getReverseColor(color);BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics2D g = bi.createGraphics();g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 16));g.setColor(color);g.fillRect(0, 0, width, height);g.setColor(reverse);g.drawString(randomString, 18, 20);for (int i = 0, n = random.nextInt(100); i < n; i++) {g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);}// 转成JPEG格式ServletOutputStream out = response.getOutputStream();JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(bi);out.flush();}public static void main(String[] args) {System.out.println(getRandomString());}}Web..xml源码://Web.xml的配置为:<servlet><servlet-name>IdentityServlet</servlet-name><servlet-class>com.helloweenvsfei.servlet.IdentityServlet</servlet-class></servlet><servlet-mapping><servlet-name>IdentityServlet</servlet-name><url-pattern>/servlet/IdentityServlet</url-pattern></servlet-mapping>identity.html源码://测试页⾯identity.html为:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>identity.html</title><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="this is my page"><meta http-equiv="content-type" content="text/html; charset=GB18030"><!--<link rel="stylesheet" type="text/css" href="./styles.css">--></head><body><script>function reloadImage() {document.getElementById('btn').disabled = true;document.getElementById('identity').src='servlet/IdentityServlet?ts=' + new Date().getTime(); }</script><img src="servlet/IdentityServlet" id="identity" onload="btn.disabled = false; "/> <input type=button value=" 换个图⽚ " onclick="reloadImage()" id="btn"></body></html>3,在Struts2应⽤中⽣成验证码RandomNumUtil.java源码://RandomNumUtil.javapackage org.ml.util;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.util.Random;import javax.imageio.ImageIO;import javax.imageio.stream.ImageOutputStream;public class RandomNumUtil {public static final char[] CHARS = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M','N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z','2', '3', '4', '5', '6', '7', '8','9','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm','n', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};private ByteArrayInputStream image;// 图像private String str;// 验证码/*** 构造⽅法调⽤初始化属性⽅法*/private RandomNumUtil() {init();}/*** 取得RandomNumUtil实例*/public static RandomNumUtil Instance() {return new RandomNumUtil();}/*** 取得验证码图⽚*/public ByteArrayInputStream getImage() {return this.image;}/*** 取得图⽚的验证码*/public String getString() {return this.str;}/*** 初始化属性否具体⽅法*/private void init() {// 在内存中创建图象int width = 85, height = 18;//设置图形的⾼度和宽度,以及RGB类型BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 获取图形上下⽂Graphics g = image.getGraphics();// ⽣成随机类Random random = new Random();// 设定背景⾊g.setColor(getRandColor(200, 250));g.fillRect(0, 0, width, height);// 设定字体g.setFont(new Font("Times New Roman", Font.PLAIN, 18));// 随机产⽣255条⼲扰线,使图象中的认证码不易被其它程序探测到g.setColor(getRandColor(160, 200));for (int i = 0; i < 255; i++) {int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(12);int yl = random.nextInt(12);g.drawLine(x, y, x + xl, y + yl);}// 取随机产⽣的认证码(6位数字)StringBuffer sRand = new StringBuffer();for (int i = 0; i < 6; i++) {String rand = String.valueOf(CHARS[random.nextInt(CHARS.length-1)]);//从字符数组中随机产⽣⼀个字符sRand.append(rand);// 将认证码显⽰到图象中g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));// 调⽤函数出来的颜⾊相同,可能是因为种⼦太接近,所以只能直接⽣成g.drawString(rand, 13 * i + 6, 17);}// 赋值验证码this.str = sRand.toString();// 图象⽣效g.dispose();//下⾯将⽣成的图形转变为图⽚ByteArrayOutputStream output = new ByteArrayOutputStream();ByteArrayInputStream input = null;try {ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);ImageIO.write(image, "JPEG", imageOut);//将图像按JPEG格式写⼊到imageOut中,即存⼊到output的字节流中 imageOut.close();//关闭写⼊流input = new ByteArrayInputStream(output.toByteArray());//input读取output中的图像信息} catch (Exception e) {System.out.println("验证码图⽚产⽣出现错误:" + e.toString());}this.image = input;/* 赋值图像 */}/** 给定范围获得随机颜⾊*/private Color getRandColor(int fc, int bc) {Random random = new Random();if (fc > 255)fc = 255;if (bc > 255)bc = 255;int r = fc + random.nextInt(bc - fc);int g = fc + random.nextInt(bc - fc);int b = fc + random.nextInt(bc - fc);return new Color(r, g, b);}}RandomAction.java源码://RandomAction.java的代码:package org.ml.action;import java.io.ByteArrayInputStream;import org.ml.util.RandomNumUtil;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class RandomAction extends ActionSupport {private ByteArrayInputStream inputStream;public String execute() throws Exception {RandomNumUtil rdnu = RandomNumUtil.Instance();//取得随机验证码产⽣类的对象this.setInputStream(rdnu.getImage());// 取得带有随机字符串的图⽚ActionContext.getContext().getSession().put("random", rdnu.getString());// 取得随机字符串放⼊HttpSession return SUCCESS;}public void setInputStream(ByteArrayInputStream inputStream) {this.inputStream = inputStream;}public ByteArrayInputStream getInputStream() {return inputStream;}}struts.xml配置://struts.xml配置为:<!-- Random验证码 --><action name="rand" class="org.ml.action.RandomAction"><result type="stream" name="success"><param name="contentType">image/JPEG</param><param name="inputName">inputStream</param></result></action>HTML中的表单源码://HTML中的表单代码为:<tr height="35"><td width="14%" class="top_hui_text"><span class="login_txt">验证码:</span></td><td colspan="2" class="top_hui_text"><input type="text" name="rand" id="rand" size="6"maxlength="6"><script type="text/javascript">function changeValidateCode(obj) {//获取当前的时间作为参数,⽆具体意义var timenow = new Date().getTime();//每次请求需要⼀个不同的参数,否则可能会返回同样的验证码//这和浏览器的缓存机制有关系,也可以把页⾯设置为不缓存,这样就不⽤这个参数了。
JS如何生成随机验证码

JS如何⽣成随机验证码本⽂实例为⼤家分享了JS⽣成随机验证码的具体代码,供⼤家参考,具体内容如下在⽹站中我们很常见到形形⾊⾊的验证码,今天我们来⽤JS来⽣成⼀个随机的⼆维码。
我们需要⽤到canvas来进⾏验证码的绘制什么是CanvasHTML5 的 canvas 元素使⽤ JavaScript 在⽹页上绘制图像。
画布是⼀个矩形区域,您可以控制其每⼀像素。
canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的⽅法。
思路我们要做的⼆维码⾸先要有随机的数字,其次就是要有随机的位置。
HTML<canvas id="canvas" style="border: 1px solid red; width: 80px; height: 40px;"></canvas>JSfunction getVerification() { //⼆维码var ctx = document.getElementById("canvas").getContext("2d");// 清空画布ctx.clearRect(0,0, 400, 400);// 设置字体ctx.font = "128px bold ⿊体";// 设置垂直对齐⽅式ctx.textBaseline = "top";// 设置颜⾊ctx.fillStyle = randomColor();// 绘制⽂字(参数:要写的字,x坐标,y坐标)ctx.fillText(getRandomNum(10), 0, getRandomNum(50));ctx.fillStyle = randomColor();ctx.fillText(getRandomNum(10), 50, getRandomNum(50));ctx.fillStyle = randomColor();ctx.fillText(getRandomNum(10), 100, getRandomNum(50));ctx.fillStyle = randomColor();ctx.fillText(getRandomNum(10), 150, getRandomNum(50));}我们使⽤ctx.fillStyle = randomColor();来设置随机的颜⾊,每写⼀个数字换⼀个颜⾊,randomColoe()函数代码如下,可以随机⽣成⼗六进制颜⾊码。
jsp实现验证码

jsp实现验证码在web开发领域⾥⾯,验证码是⼀个⽐较常见的功能,⽽归根到底,验证码其实就是⼀组随机数,或者是⼀个随机算术⼀、基本知识1、为什么需要验证码?验证码,很多时候出现在注册页⾯或者登陆界⾯,在这些页⾯中有可能会出现恶意注册和暴⼒破解,这时候验证码可以有效防范这些攻击。
所以,总的来说,验证码很多时候是为了防⽌不法分⼦对⽹站进⾏恶意的注册和攻击,是⼀种有效的拦截⼿段。
2、验证码的⼯作原理 ⾸先,我们要明确⼀点就是,验证码实际是在服务器端产⽣的,因为如果在前端参数的话并不能有效拦截,因此很多时候,在拦截时我们都需要在服务器端进⾏相关操作,防⽌⿊客绕过前端验证直接⾮法访问。
验证码的⼯作原理其实⽅⼏个步骤:⾸先,服务端随机产⽣⼏个随机数或者随机算式,然后通过session对象将数据传输到客户端,客户端输⼊验证码,通过r表单将数据提交到服务器,服务器提取数据之后和产⽣的随机数字或者算式的结果对⽐,以此进⾏验证。
当然,很多时候,简单的验证码很容易被图像识别软件破解,所以现在很多时候更流⾏短信验证等⽅式,但是,⼀下讨论的均是简单的数字图⽚验证。
⼆、验证码的实现过程1、⾸先,验证码其实就是在服务端产⽣⼀张带有验证码数字或者算式的图⽚,所以,在这个过程要⽤到gui知识,具体请先看⼀下代码//1、验证码界⾯//验证码的宽和⾼int width = 70;int height = 30;/**图像缓冲对象(注意:在多次对某个对象操作时,为了提⾼效率,很多时候选择⽤缓冲对象来进⾏操作,因为缓冲类的对象很多时候是可以即时改变对象的数据的)*/BufferedImage bufferedImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//创建图像操作对象,⽤于操作验证码图⽚对象Graphics2D g = bufferedImage.createGraphics();//创建字体对象⽅便操作图像字体的属性Font font = new Font("Times New Roman",Font.PLAIN,18);g.setFont(font);//设置相关颜⾊等等g.setColor(Color.BLACK);g.drawRect(0,0,width-1,height-1);g.setColor(Color.GRAY); 以上创建了⼀个基本的验证码图⽚,注意很多时候如果要反复对象对某个对象进⾏修改操作时(如某个字符串,需要反复进⾏拼接操作时,为提⾼性能,⼀般选择⽤缓冲类的对象进⾏操作之后再转换为相关对象)。
动态验证码的技术原理

动态验证码的技术原理
动态验证码是一种通过不断变化的验证码来提高安全性的验证技术。
其技术原理主要包括以下几个步骤:
1. 生成动态验证码:系统会根据一定的算法或规则生成一个初始验证码。
这个初始验证码可以是一个固定的随机数、某一时间段内的动态变化值,或者是基于某种特定的规则计算得出的值。
2. 发送验证码:系统将生成的验证码通过短信、邮件等方式发送给用户。
用户可以在验证码输入框中输入收到的验证码。
3. 验证码验证:系统会与用户输入的验证码进行比对验证。
如果用户输入的验证码与系统生成的验证码一致,表示验证通过;如果不一致,则验证不通过。
4. 刷新验证码:为了增加验证码的安全性,系统会定期刷新验证码。
刷新的方式可以是定时刷新、用户手动刷新或其他方式。
刷新后的验证码可以是一个新的随机数,或者根据预设的规则重新计算得出。
动态验证码的原理在于每次生成和发送的验证码都是跟上一次不同的,增加了破解的难度。
同时,刷新验证码也可以有效防止验证码被暴力破解或重放攻击。
数字验证码的开发流程

数字验证码的开发流程
数字验证码的开发流程主要包括以下几个步骤:
1. 生成验证码:通常使用服务器端技术(如Java的Servlet)生成随机的数字或字符,拼接成一个字符串,存入session域中。
2. 显示验证码:将生成的验证码以图片的形式传送到客户端,展示给用户。
3. 客户端验证:客户端对用户输入的验证码进行简单的规则校验,例如判断验证码是否为空、输入的字符长度是否达到标准等。
4. 提交验证:用户将输入的验证码传送到服务器端,服务器在session中取到存储的验证码值,进行具体的验证判断。
5. 结果处理:根据输入的验证码是否正确,服务器端跳转到相应的界面。
如果输入错误,一般会跳回当前界面,并刷新验证码。
具体实现的页面,比如可以有一个用于生成验证码的Response_3类。
在实际开发中,还可能涉及到前端页面设计和后端代码实现等步骤。
此外,还可以结合Redis等缓存技术来保存验证码,以减轻服务器的压力。
具体的开发流程可能因项目需求和开发环境而有所不同,建议根据实际情况进行调整。
Jsp-图片验证码及刷新

1.图片验证码的实现主要的技术点是如何生成一个图片。
生成图片可以使用java.awt包下的类来实现。
我们先写一个简单的生成图片的程序HelloImage.java。
以下是代码部分。
(是我在做留言板项目时的部分代码)"HelloImage .java"view plaincopy to clipboardprint?package liuyanban;import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;/*** 生成图片*/public class HelloImage {public static void main(String[] args){BufferedImage image = new BufferedImage(80, 50,BufferedImage.TYPE_INT_RGB);//建立BufferedImage对象。
指定图片的长度宽度和色彩。
Graphics g = image.getGraphics();//取得Graphics对象,用来绘制图片。
g.setColor(new Color(255,255,255));//绘制图片背景和文字。
g.fillRect(0, 0, 80, 25);g.setColor(new Color(0,0,0));g.drawString("HelloImage",6,16);g.dispose();//释放Graphics对象所占用的资源。
try{ImageIO.write(image, "jpeg", new File("C:\\helloImage.jpeg"));//通过ImageIO对象的write静态方法将图片输出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于jsp验证码生成,显示,验证和刷新:
1:四位数据的验证图片生成,用servlet实现
2:在web.xmlli配置servlet
3:页面上显示servlet生成的图片
4:关于验证码输入数据的验证
5:验证码的刷新
——————————————————————–
1:四位数据的验证图片生成,用servlet实现,servlet代码如下:
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
public class vImage extends HttpServlet {
public void init(ServletConfig conf) throws ServletException {
super.init(conf);
}
public void doGet(HttpServletR equest req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType(‖image/jpeg‖);
res.setHeader(‖Pragma‖, ―No-cache‖);
res.setHeader(‖Cache-Control‖, ―no-cache‖);
res.setDateHeader(‖Expires‖, 0);
HttpSession session = req.getSession();
// 在内存中创建图象
int width = 60, height = 20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
// 生成随机类
Random random = new Random();
// 设定背景色
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);
// 设定字体
g.setFont(new Font(‖Times New Roman‖, Font.PLAIN, 18));
// 画边框
//g.setColor(new Color());
//g.drawR ect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160, 200));
for (int i = 0; i 255) fc = 255;
if (bc > 255) bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
}
2: 在web.xmlli配置servlet:
vImage
/vimage
注:注意元素在web.xml文件里的位置
3:页面上显示servlet生成的图片:
注:在需要显示验证码的地方加上这句,name在刷新验证码的时候会用到。
4: 关于验证码输入数据的验证:
验证码生成时存入了session,就是servlet里的这句session.setAttribute(‖post_validate_code‖, sRand);具体验证就不多说了。
5: 验证码的刷新
刷新验证码
function reloadImage(url)
{
document.form名字.pic.src = url;
}。