验证码
来源:互联网 发布:趣头条刷金币软件 编辑:程序博客网 时间:2024/06/05 00:11
1.html页面加入img标签,src则直接访问servlet
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> </head> <body> <img src="servlet/check" id="checkId" onclick="change()"/> <script> function change(){ document.getElementById("checkId").src='servlet/check?ts='+new Date().getTime(); } </script> </body></html>
2.以下是servlet 内容
package com.qw;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 check extends HttpServlet { private static final long serialVersionUID = 1L; //随机字符 不包括0 1等难以识别的 private 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'}; private static Random random = new Random(); //获取6位随机数 private static String getRandomString(){ StringBuffer buffer = new StringBuffer(); for(int i = 0; i < 6; i++){ buffer.append(chars[random.nextInt(chars.length)]); } return buffer.toString(); } //获取随机颜色 private static Color getRandomColor(){ return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255)); } //获取随机颜色的反色 private 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);//将验证码放入session中 int width = 100;//图片宽度 int height = 30;//图片高度 Color color = getRandomColor(); Color reverseColor = getReverseColor(color); BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);//创建图片 Graphics2D g = bi.createGraphics();//获取绘图对象 //设置背景色 g.setColor(color); g.fillRect(0, 0, width, height); //设置彩色字 g.setColor(reverseColor); g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16)); 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); } ServletOutputStream out = response.getOutputStream();//转换成JPEG格式 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);//编码器 encoder.encode(bi);//编码 out.flush();//输出 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); }}
3.web.xml内容
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" 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_2_5.xsd"> <servlet> <servlet-name>check</servlet-name> <servlet-class>com.qw.check</servlet-class> </servlet> <servlet-mapping> <servlet-name>check</servlet-name> <url-pattern>/servlet/check</url-pattern> </servlet-mapping> </web-app>
上面是servlet 需要配置web.xml,下面的是放在了jsp中。更加灵活
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ page import="java.awt.*,com.sun.image.codec.jpeg.*,java.awt.image.BufferedImage" %><%! private static final long serialVersionUID = 1L; //随机字符 不包括0 1等难以识别的 private 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'}; private static Random random = new Random(); //获取6位随机数 private static String getRandomString(){ StringBuffer buffer = new StringBuffer(); for(int i = 0; i < 6; i++){ buffer.append(chars[random.nextInt(chars.length)]); } return buffer.toString(); } //获取随机颜色 private static Color getRandomColor(){ return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255)); } //获取随机颜色的反色 private static Color getReverseColor(Color c){ return new Color(255-c.getRed(),255-c.getGreen(),255-c.getBlue()); }%><% response.setContentType("image/jpeg");//设置输出类型 必须 String randomString = getRandomString(); request.getSession(true).setAttribute("randomString", randomString);//将验证码放入session中 int width = 100;//图片宽度 int height = 30;//图片高度 Color color = getRandomColor(); Color reverseColor = getReverseColor(color); BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);//创建图片 Graphics2D g = bi.createGraphics();//获取绘图对象 //设置背景色 g.setColor(color); g.fillRect(0, 0, width, height); //设置彩色字 g.setColor(reverseColor); g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16)); 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); } ServletOutputStream outi = response.getOutputStream();//转换成JPEG格式 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outi);//编码器 encoder.encode(bi);//编码 outi.flush();//输出%>
0 0
- 简单验证码验证
- 验证验证码
- 验证码的验证
- 验证码的验证
- 验证码客户端验证
- java验证码 验证
- 验证码验证模块
- 手机短信验证码验证
- 验证验证码
- 表单验证+验证码
- thinkphp 验证码功能(验证验证码)
- 验证码
- 验证码
- 验证码
- 验证码
- 验证码
- 验证码
- 验证码
- 最小生成树算法Prim、Kruskal
- 支付宝分布式事务文章
- 自学android 碰到的知识点总结
- map 用法。
- 网络游戏服务器端架构设计
- 验证码
- Linux下面的终端编程 做一个简单的菜单
- 解决重新安装MySQL无法 start service的问题
- html5
- YARN工作流程
- 数字转换成字符串进行连接
- The word is not correctly spelled问题解决
- [HW] OJ记录20题之四
- 【html】day01_Web概述_html工作原理_XML与HTML_乱码问题