实践---java实现生成验证码功能
来源:互联网 发布:淘宝退款率高了怎么办 编辑:程序博客网 时间:2024/06/06 00:11
开始
1.编写验证码图形显示页面
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html ><html><head><meta charset="UTF-8"><title>图片验证码</title></head><script type="text/javascript" src="js/jQuery1.9.1.js"></script><script type="text/javascript"> //功能为重新加载 function reload(){/*通过document对象的getElementById()方法拿到 id名为 image的变量 *通过url传参 new一个 Date对象传入时间 */document.getElementById("image").src="<%=request.getContextPath() %>/imageServlet?date="+new Date().getTime();//Jquery取元素 $()方式 调用.val()传入" " $("#checkcode").val(""); // 将验证码清空} // 功能为验证码 function verificationcode(){ //生命一个名为 text的变量 通过Jquery方式取得元素 checkcode的值 $("#元素名").val() var text=$.trim($("#checkcode").val()); // $.post("${pageContext.request.contextPath}/verificationServlet",{op:text},function(data){ data=parseInt($.trim(data)); if(data>0){ $("#span").text("验证成功!").css("color","green"); }else{ $("#span").text("验证失败!").css("color","red"); reload(); //验证失败后需要更换验证码 } }); $("#checkcode").val(""); // 将验证码清空 }</script><body> 验证码:<input type="text" name="checkcode" id="checkcode"/> <img src="<%=request.getContextPath() %>/imageServlet" alt="验证码" id="image" /><a href="javascript:reload();"><label>换一张</label></a><br><input type="button" value="提交" onclick="javascript:verificationcode()"><span id="span"></span></body></html>
2.编写图片生成的Servlet
ImageServlet.java
package com.dw.servlet;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;import javax.servlet.http.HttpSession;public class ImageServlet extends HttpServlet {private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置字符编码为utf-8request.setCharacterEncoding("utf-8");//画图像BufferedImage bfi = new BufferedImage(85,28,BufferedImage.TYPE_INT_RGB);//Graphics g = bfi.getGraphics();//矩形的坐标g.fillRect(0, 0, 85, 28);//验证码字符范围 字符数组存放char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();//生成随机数Random r = new Random(); //int index; //StringBufferStringBuffer sb = new StringBuffer(); //保存字符串for(int i=0; i<4; i++){index = r.nextInt(ch.length);//设置颜色//g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));g.setColor(new Color(r.nextInt(200),r.nextInt(100),r.nextInt(200)));//设置字体Font font = new Font("宋体", 30, 28);g.setFont(font);g.drawString(ch[index]+"", (i*20)+2, 25);sb.append(ch[index]);}// 添加噪点 int area = (int) (0.02 * 80 * 25); for(int i=0; i<area; ++i){ int x = (int)(Math.random() * 80); int y = (int)(Math.random() * 25); bfi.setRGB(x, y, (int)(Math.random() * 250)); } //设置验证码中的干扰线 for (int i = 0; i < 6; i++) { //随机获取干扰线的起点和终点 int xstart = (int)(Math.random() * 80); int ystart = (int)(Math.random() * 25); int xend = (int)(Math.random() * 80); int yend = (int)(Math.random() * 25); g.setColor(interLine(1, 200)); g.drawLine(xstart, ystart, xend, yend); } HttpSession session = request.getSession(); //保存到session session.setAttribute("verificationCode", sb.toString()); ImageIO.write(bfi, "JPG", response.getOutputStream()); //写到输出流}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);}/** * 获取随机的颜色值,r,g,b的取值在Low到High之间 * @param L 左区间 * @param R 右区间 * @return 返回随机颜色值 */ private static Color interLine(int Low, int High){ if(Low > 255) Low = 255; if(High > 255) High = 255; if(Low < 0) Low = 0; if(High < 0) High = 0; int interval = High - Low; int r = Low + (int)(Math.random() * interval); int g = Low + (int)(Math.random() * interval); int b = Low + (int)(Math.random() * interval); return new Color(r, g, b); }}
3.验证码的逻辑验证Servlet
Ve'rificationServlet.java
package com.dw.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class VerificationServlet extends HttpServlet {//生成序列化idprivate static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置字符编码为utf-8response.setCharacterEncoding("utf-8");//设置内容类型 为html 编码格式为utf-8response.setContentType("text/html;charset=utf-8");//通过request对象的getSession()得到session对象 赋值给 HttpSession类型的实例化对象 session HttpSession session =request.getSession();//从session对象 拿到 名称为verificationCode变量的 字符串类型的 变量String verificationCode = (String)session.getAttribute("verificationCode");//验证码 对象String checkcode = request.getParameter("op");//打印输出字符流 PrintWriter out = response.getWriter();if(checkcode.equals(verificationCode)){out.println(1);}else{out.println(0);}//刷新输出流out.flush();//关闭输出流out.close();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}}
4.web.xml中配置
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>verification_code</display-name> <servlet> <!-- 图像Servlet --> <servlet-name>ImageServlet</servlet-name> <servlet-class>com.dw.servlet.ImageServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ImageServlet</servlet-name> <!-- 处理的url路径为 相对路径 以/imageServlet开始的 所有请求 --> <url-pattern>/imageServlet</url-pattern> </servlet-mapping> <servlet> <!-- 验证Servlet --> <servlet-name>VerificationServlet</servlet-name> <servlet-class>com.dw.servlet.VerificationServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>VerificationServlet</servlet-name> <url-pattern>/verificationServlet</url-pattern> </servlet-mapping> <!-- 欢迎页 --> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
结果:
什么都不输入
输入看到的字符
总结:
以上 验证码生成以及验证功能
总结
0 0
- 实践---java实现生成验证码功能
- java web 生成图片验证码的功能实现
- JAVA实践生成验证码图片
- ssh生成图片验证码功能实现
- JAVA验证码功能实现(生成验证码的Servlet)
- Java实现验证码功能
- Java实现验证码验证功能
- Java实现验证码验证功能
- Java实现验证码验证功能
- java实现验证码生成
- Java实现页面验证功能随机生成图片
- java源码实现生成,签发,验证用户证书功能
- 【java】Java验证码功能实现
- 用Java实现随机验证码功能
- Java实现随机验证码功能实例
- Java实现随机验证码功能实例
- Java实现随机验证码功能实例
- Java实现随机验证码功能实例
- MVP与MVP+Dagger2的使用及比较
- 开启SE16N调试功能,用户表内容的删除与更新
- hihoCoder1307 : 穿越禁区
- ORACLE 临时表空间使用率过高的原因及解决方案
- iOS 扫描二维码
- 实践---java实现生成验证码功能
- xcode命令行编译
- PAT甲级1002
- Muli3D <9> CubeTexture的采样原理
- 读取properties配置文件信息
- 解决mac上启动tomcat时出现Local host name unknown异常
- Java基础:数组Array转成List的几种方法
- warning: 远程 HEAD 指向一个不存在的引用,无法检出(warning: remote HEAD refers to nonexistent ref, unable to checkout)
- hadoop1.x:hdfs