验证码的Java实现--jsp

<%@ page language="java"  pageEncoding="UTF-8"  %>
<%@ page contentType="image/jpeg"  import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
    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);

    //生成随机验证码
    Random random = new Random();
    String sRand = "";
    for (int i = 0; i < 4; i++) {
        String rand = String.valueOf(random.nextInt(10));
        sRand += rand;
    }
    // 将认证码存入SESSION
    session.setAttribute("CHECK_NUMBER_KEY", sRand);

    // 在内存中创建图象
    int width = 55;
    int height = 20;
    BufferedImage image = new BufferedImage(width, height,
            BufferedImage.TYPE_INT_RGB);

    // 获取图形上下文
    Graphics g = image.getGraphics();

    // 设定背景色
    g.setColor(getRandColor(200, 250));
    g.fillRect(0, 0, width, height);

    //设定字体
    g.setFont(new Font("serif", Font.CENTER_BASELINE, 16));

    //画边框
    //g.setColor(new Color(1));
    //g.drawRect(0,0,width-1,height-1);

    // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
    g.setColor(getRandColor(160, 200));
    for (int i = 0; i < 100; 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);
    }

    for (int i = 0; i < 4; i++) {
        String rand = sRand.substring(i, i + 1);
        // 将认证码显示到图象中
        g.setColor(new Color(20 + random.nextInt(110), 20 + random
                .nextInt(110), 20 + random.nextInt(110)));
        //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
        g.drawString(rand, 13 * i + 6, 16);
    }

    // 图象生效
    g.dispose();

    // 输出图象到页面
    try {
        ImageIO.write(image, "JPEG", response.getOutputStream());
    } catch (Exception e) {
    }
    out.clear();
    out = pageContext.pushBody();
%>
时间: 2024-10-08 19:35:06

验证码的Java实现--jsp的相关文章

java:JSP(JSPWeb.xml的配置,动态和静态导入JSP文件,重定项和请求转发,使用JSP实现数据库的增删改查实例)

1.JSP的配置: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":&qu

Java基础——JSP

一.JSP的由来 在很多动态网页中,绝大多部分内容是不变的,只有局部内容需要动态产生和改变.例如, 一个新闻的浏览次数,只有这个次数是动态改变的,而Servlet程序返回客户端的代码全是java程序动态创建的.Servlet 的缺点,处理界面困难.JSP 是在Servlet的基础上发展起来的,它弥补了Servlet在界面处理方面的缺陷. 简单来讲,JSP =html+java片段+jsp标签+javascript,它功能强大,可以和javabean 结合 另外,JSP+javabeen+serv

Java EE JSP内置对象及表达式语言

一.JSP内置对象 JSP根据Servlet API规范提供了一些内置对象,开发者不用事先声明就可使用标准变量来访问这些对象. JSP提供了9种内置对象: (一).request 简述: JSP编程中最常用的对象,代表来自客户端的请求,调用request对象相应的方法可以获取关于客户请求的信息. 常见方法的用法示例: 1 <font size=5> 2 <br>客户端使用的协议是: 3 <% 4 String protocol = request.getProtocol();

GOOGLE kaptcha 验证码生成插件 servlet/jsp项目中使用步骤

步骤一: 在项目中添加kaptchar的jar包,下载地址:http://code.google.com/p/kaptcha/(建议使用迅雷下载) 步骤二: 配置web.xml,详细配置如下(这里不是所有的配置,这里的参数还有很多可以酌情精简): <!-- 配置验证码插件servlet类 --> <servlet> <servlet-name>kaptcha</servlet-name> <servlet-class> com.google.co

Java之JSP基础语法

1.JSP页面元素简介及page指令 2.JSP注释,3种不同注释 <!--  我是HTML注释,在客户端可见 --> <%--我是JSP注释,在客户端不可见 --%> <% //我是脚本单行注释 /*我是脚本多行注释 脚本注释在客户端不可见*/ %> 3.JSP脚本,用于书写脚本,语法:<% %> <% out.print("欢迎大家学习JavaEE课程"); %> 4.JSP声明,用于声明Java变量或方法,语法:<

Java、JSP获得当前日期的年、月、日

Java package com.ob; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateTest { public static void main(String[] args) throws ParseException { Calendar now = Calendar.

JAVA学习-JSP页面组成

主要组成为: 1.静态内容 2.指令 page指令:位于页面顶部,一个页面可以有多个page指令. <%@ page 属性1="" 属性2="" 属性3="" %> 常用属性,language指定当前jsp页面使用的脚本语言,默认是java.import引用脚本使用到的类库.contextType指定编码方式.默认值是 text/html,ISO-8859-1.pageEncoding页面编码,建议修改成contentType. in

Java、JSP与JavaScript的区别

java和javaScript是两种完全不同的语言,并不是收都有个java就类似 Java,全称应该是 Java Applet,是嵌在网页中,而又有自己独立的运行窗口的小程序.Java Applet 是预先编译好的,一个Applet 文件(.class)用 Notepad 打开阅读,根本不能理解.Java Applet 的功能很强大,可以访问 http.ftp等协议,甚至可以在电脑上种病毒(已有先例了). JavaScript 的能力就比较小了.JavaScript 是一种“脚本”(“Scrip

Java中jsp和Servlet的区别

1 Servlet Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面.它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层. Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机. 2 JSP JSP技术使用Java编程语言编写类XML