验证码

来源:互联网 发布:趣头条刷金币软件 编辑:程序博客网 时间: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
原创粉丝点击