java Servlet 实现动态验证码图片示例

整理文档,搜刮出一个java Servlet 实现动态验证码图片的代码,稍微整理精简一下做下分享。

package com.hacker;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Date;
import java.util.Locale;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.bean.Student;

public class HackerServlet extends HttpServlet {

   //验证码图片的宽度。
     private int width=60;
     //验证码图片的高度。
     private int height=20;
@Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   BufferedImage buffImg=new BufferedImage(width,height,
               BufferedImage.TYPE_INT_RGB);
           Graphics2D g=buffImg.createGraphics();

          //创建一个随机数生成器类。
           Random random=new Random();

           g.setColor(Color.WHITE);
           g.fillRect(0,0,width,height);

           //创建字体,字体的大小应该根据图片的高度来定。
           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);

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

          //randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
           StringBuffer randomCode=new StringBuffer();
           int red=0,green=0,blue=0;

          //随机产生4位数字的验证码。
          for (int i=0;i<4;i++) {
            //得到随机产生的验证码数字。
            String strRand=String.valueOf(random.nextInt(10));

            //产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
            red=random.nextInt(110);
            green=random.nextInt(50);
            blue=random.nextInt(50);

            //用随机产生的颜色将验证码绘制到图像中。
             g.setColor(new Color(red,green,blue));
            g.drawString(strRand,13*i+6,16);

             //将产生的四个随机数组合在一起。
            randomCode.append(strRand);
          }
          //将四位数字的验证码保存到Session中。
          HttpSession session=req.getSession();
          session.setAttribute("randomCode",randomCode.toString());

           //禁止图像缓存。
          resp.setHeader("Pragma","no-cache");
          resp.setHeader("Cache-Control","no-cache");
          resp.setDateHeader("Expires", 0);

          resp.setContentType("img/JPG");

           //将图像输出到Servlet输出流中。
          ServletOutputStream sos=resp.getOutputStream();
          ImageIO.write(buffImg, "JPG",sos);
          sos.close();
        }

  }

当然这还需要改进成平常见到的验证码 形式,还需要努力

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • JavaWeb应用实例:用servlet实现oracle 基本增删改查

    很久没有写博客了,可能是太懒散,不愿意把时间花在这上面,可是我心里还是知道写博客的重要性的 ,所以从今天开始 ,我将与大家分享一下我学Java WEB写的一些小实例  ,我个人是不太喜欢书本上的晦涩的概念的,所以我花了更多的时间在一些应用实例上,我觉得这样的学习方式很适合我,由简到繁,由浅入深 废话不多话,开始我们的第一个实例:  servlet实现Oracle 基本增删改查 开发环境:JDK7 +Myeclipse10+tomcat7.0+oracle 11g 首先附上数据库创建脚本: cre

  • java HttpServletRequest和HttpServletResponse详解

    java  HttpServletRequest和HttpServletResponse详解 最近由于CAS相关的JAR包的重新封装,所以想尽量做到0配置,而这个过程中大量使 用HttpServletRequest,现在整理如下,以便以后查阅.(表格为从别的地方复制的,排版渣了点,酬和看吧.) 请求与响应相关的类和接口非常多,下表是主要的与请求和接口相关的类以及接口. 主要的与请求和接口相关的类及接口 方    法 说    明 ServletInputStream Servlet的输入流 Se

  • java基于servlet的文件异步上传

    在这里使用了基于servlet的文件异步上传,好了废话不多说,直接上代码了... package com.future.zfs.util; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.s

  • javaweb中ajax请求后台servlet(实例)

    废话不多说,直接上代码 public class DZFP_jdbc extends HttpServlet{ private static final long serialVersionUID = 1L; public static Connection conn; public static ResultSet rs = null ; public static PreparedStatement ps = null ; private static String url = "jdbc:

  • javaweb servlet中使用请求转发乱码的实现

    乱码的方式有很多,这里指出一种不容易想到的 *请确保您的页面单独访问正常,经过servlet请求转发时,有PrintWriter out = response.getWriter()不正常,没有正常 解决方式是在执行PrintWriter out = response.getWriter();前加上 response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8&

  • Java基础 Servlet监听器详解

    Java基础 Servlet监听器详解 1 概念:Servlet监听器,用来监听web容器的一些对象状态的变化,主要是ServletContext.HttpSession.HttpServletRequestl三类对象状态.Servlet的监听器 2  Servlet2.4和JSP2.0规范中一共定义了有八个接口类和六种事件. 3 web.xml中定义Servlet的url-pattern时如果url-pattern的值的"/",则说明该Servlet是该项目的默认Servlet,当请

  • javabean servlet jsp实现分页功能代码解析

    前端实现用ligerUI实现分页,感觉用框架确实简单,闲着无聊,模拟着liger的分页界面实现了一遍(只要是功能,样式什么无视) 这里用基础的三层架构+servlet+jsp实现,思路很简单,把所有分页相关信息写入到一个pagebean类里面,service返回这个bean类,每次分页查询时都从该bean里查找信息.只是其中的细节问题比较繁琐,如边界处理(前端和后台边界都要处理),下拉框跳转后要显示当前页等等 这是ligerUI实现的分页样式(实现过程我的上一篇博客有写:http://www.j

  • java Servlet 实现动态验证码图片示例

    整理文档,搜刮出一个java Servlet 实现动态验证码图片的代码,稍微整理精简一下做下分享. package com.hacker; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; i

  • Servlet输出一个验证码图片的实现方法实例

    什么是Servlet Servlet(Server Applet),全称Java Servlet,未有中文译文.是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者. Servlet运行于支持Java的应用服务器中.从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展

  • java压缩文件和下载图片示例

    本文实例为大家分享了java压缩文件和下载图片示例,供大家参考,具体内容如下 主页面index.xml <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <html> <head> <title>项目的主页</title> </head> <body> <h2>主页

  • python通过pillow识别动态验证码的示例代码

    目录 环境配置  安装 pillow(PIL)库 识别过程 生活中,我们在登录微博,邮箱的时候,常常会碰到验证码.在工作时,如果想要爬取一些数据,也会碰到验证码的阻碍.本次试验将带领大家认识验证码的一些特性,并利用 Python 中的 pillow 库完成对验证码的破解. 环境配置 Python 2.7 Pillow 模块 有个问题就是python2.7目前只能让使用到2020年,现在再利用2.7下载好多东西都会报错,也该是时候更新到python3.7了,本文还是依赖于2.7的环境. 识别验证码

  • Java实现短信验证码的示例代码

    目录 项目需求 需求来由 代码实现 发送验证码方法 注册方法 忘记密码 前端代码 编码中遇到的问题 如何改进 短信验证码相信大家都不陌生吗,但是短信验证码怎么生成的你真的了解吗,本文揭示本人项目中对短信验证码的. 项目需求 用户注册/忘记密码添加短信验证码 需求来由 登录注册页面需要确保用户同一个手机号只关联一个账号确保非人为操作,避免系统用户信息紊乱增加系统安全性 代码实现 同事提供了WebService接口,很好,之前没调过,又增加了困难. 这边用的阿里云的短信服务,废话少说上图,呸,上代码

  • java实现随机生成验证码图片

    验证码 验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apart"(全自动区分计算机和人类的图灵测试)的缩写.由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类. 作用 防止恶意破解密码.刷票.论坛灌水.刷页. 有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,实际上使用验证码是现在很多网站通行的方式(比如招商银

  • php生成动态验证码gif图片

    这是一个通过php生成的动态验证码图片的示例,重点是可以运行哦!下面先发下效果图: 下面是php生成动态验证码需要用到的相关类和函数. <?php /** *ImageCode 生成包含验证码的GIF图片的函数 *@param $string 字符串 *@param $width 宽度 *@param $height 高度 **/ function ImageCode($string='',$width=75,$height=25){ $authstr=$string?$string:((tim

  • Java实现动态获取图片验证码的示例代码

    本文介绍了Java实现动态获取图片验证码的示例代码,分享给大家,具体如下: import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingEx

  • Java web实现动态图片验证码的示例代码

    验证码 防止恶意表单注册 生成验证码图片 定义宽高 int width = 100; int height = 50; 使用BufferedImage再内存中生成图片 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 绘制背景和边框 Graphics g = image.getGraphics(); g.setColor(Color.WHITE); g.fillRect(0, 0

  • Java 生成随机验证码图片的示例

    1.情景展示 登录时,生成随机验证码图片,如何实现?  2.原因分析 后台生成验证码并生成图片返回至前台 3.解决方案 导包 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.Ser

随机推荐