•  总结: 验证码就是一张图,然后往这张图上写入随机的字符(数字字母等)。

 1.1  编写html页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="servlet/yanzheng" method="post" >
验证码:<input type="text" name="userCode" /><img src="servlet/CheckCodeImages" /><br/>
<input type="submit" value="验证是否正确" />
</form>
</body>
</html>

  1.2  生成验证码图片

  • CheckCodeImages.java(对应url-patting为servlet/CheckCodeImages)
package servlet;

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; /**
* Servlet implementation class CheckCodeImages
*
* 生成图片验证码
*/
public class CheckCodeImages extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* Default constructor.
*/
public CheckCodeImages() {
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("image/jpeg"); //返回的是图像且后缀为jpeg //从内存创建一张图片
BufferedImage bi=new BufferedImage(80, 40, BufferedImage.TYPE_3BYTE_BGR); //拿到图的画笔
Graphics g=bi.getGraphics(); //获取图上面的图案,即验证码
String code=""; //4个数字合并的字符串
for(int i=0;i<4;i++){
Random rand=new Random();
String strCode=String.valueOf(rand.nextInt(10));
code+=strCode;
} //将图案画在图上
g.drawString(code, 20, 20); //将验证码存起来,以供验证
request.getSession().setAttribute("code", code); //生成图片
ImageIO.write(bi, "jpeg", response.getOutputStream()); } }

结果:

解析: 这个servlet是一张产生随机验证码的图片。

  1.3  验证用户输入验证码是否正确

  • yanzheng.java( <url-pattern>/servlet/yanzheng</url-pattern>)
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8"); //得到用户输入的验证码
String userCode=request.getParameter("userCode"); //得到随机产生的验证码
String code=(String) request.getSession().getAttribute("code"); if(userCode.equals(code)){
System.out.println("验证码输入正确");
}else{
System.out.println("验证码输入错误");
}
}

(七)利用servlet生成图片验证码的更多相关文章

  1. servlet生成图片验证码

    package cn.itcast.servlet.session.demo3; import java.awt.Color; import java.awt.Font; import java.aw ...

  2. jsp使用servlet实现验证码

    在进行表单设计中,验证码的增加恰恰可以实现是否为“人为”操作,增加验证码可以防止网站数据库信息的冗杂等... 现在,小编将讲述通过servlet实现验证码: 验证码作为一个图片,在页面中为“画”出来的 ...

  3. servlet生成验证码

    1.因为朋友们都说现在很少用java自带的图形用户接口,所以小白的我就没去看awt和swing组件,因为要抓紧时间学习后面的,完了出去找工作,等以后再回来了解awt和swing:所以制作验证码的代码是 ...

  4. 利用kaptcha生成验证码的详细教程

    kaptcha是一个简单好用的验证码生成工具,有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.Ka ...

  5. servlet实现验证码

    (博客内容来自:jsp使用servlet实现验证码,以下内容只是不才对原博客的摘抄以便以后翻阅使用) 一.原理: 验证码作为一个图片,在页面中为“画”出来的,它是如何画出来的呢? <生成图片&g ...

  6. Django登录(含随机生成图片验证码)注册实例

    登录,生成随机图片验证码 一.登录 - 随机生成图片验证码 1.随机生成验证码 Python随机生成图片验证码,需要使用PIL模块,安装方式如下: pip3 install pillow 1)创建图片 ...

  7. 利用Servlet导出Excel

    -----因为Excel可以打开HTML文件,因此可以利用页面的Form表单把页面中的table内容提交给Servlet,然后后台把提交上来的table内容转换成文件流的形式,并以下载的形式转给客户端 ...

  8. PHP生成图片验证码demo【OOP面向对象版本】

    下面是我今天下午用PHP写的一个生成图片验证码demo,仅供参考. 这个demo总共分为4个文件,具体代码如下: 1.code.html中的代码: <!doctype html> < ...

  9. J2EE进阶(七)利用SSH框架根据数据表建立model类

    J2EE进阶(七)利用SSH框架根据数据表建立model类 前言 在利用SSH框架进行项目开发时,若将数据库已经建好,并且数据表之间的依赖关系已经确定,可以利用Hibernate的反转功能进行mode ...

随机推荐

  1. 0014SpringBoot结合thymeleaf实现登录功能

    该登录功能需要实现的需求如下: 1.输入用户名密码,如果验证通过,进入首页,并显示登录的用户名 2.如果验证不通过,则重新进入登录页面,并显示“用户名密码错误” 3.如果未经登录,不能直接访问首页等静 ...

  2. ubuntu下卸载旧Mysql并安装新Mysql(升级)

    由于从apt-get下安装的Mysql不是最新版的,所以,需要升级.先卸载,再安装. 1.卸载 先看mysql是否在运行: netstat -tap | grep mysql 然后 sudo apt- ...

  3. [TJOI2015]弦论(第k小子串)

    题意: 对于一个给定的长度为n的字符串,求出它的第k小子串. 有参数t,t为0则表示不同位置的相同子串算作一个,t为1则表示不同位置的相同子串算作多个. 题解: 首先,因为t的原因,后缀数组较难实现, ...

  4. idea2018使用整理

    1.idea怎么设置选中文件时,自动在左侧弹出文件所在位置及文件?

  5. Bzoj 2588 Spoj 10628. Count on a tree(树链剖分LCA+主席树)

    2588: Spoj 10628. Count on a tree Time Limit: 12 Sec Memory Limit: 128 MB Description 给定一棵N个节点的树,每个点 ...

  6. dashucoding记录2019.6.6

    div { display:flex; flex-direction:row-reverse; } -webkit-, - ms-或-moz- CSS语法 flex-direction: row|ro ...

  7. 二分算法题目训练(二)——Exams详解

    CodeForces732D——Exams 详解 Exam 题目描述(google翻译) Vasiliy的考试期限将持续n天.他必须通过m门科目的考试.受试者编号为1至m. 大约每天我们都知道当天可以 ...

  8. As I Began to Love Myself

    As I Began to Love Myself: Charlie Chaplin on his 70th birthday As I began to love myself I found th ...

  9. 用Java实现自动打开浏览器在搜索框中进行搜索

    主要使用了Java的剪切板操作和Robot类 上代码: package pers.jeaven.AutoRobot.main; import java.awt.Desktop; import java ...

  10. c++ 珊格迷宫问题

    #demo1 #include<iostream> #include<ctime> #include<cstdlib> #include<queue> ...