分析

生成图片实现类

① 定义BufferedImage 对象

② 获得 Graphics 对象

③ 通过 Random 产生随机验证码信息

④ 使用 Graphics 绘制图片

⑤ 记录验证码信息到 session 中

⑥ 使用 ImageIO 输出图片

代码实现

1、新建 web 项目 CheckCode,在 WebContent 下新建 index.jsp

index.jsp

pageEncoding="UTF-8"%>

>

Insert title heretitle>

function reloadCode() {

//传个时间参数,防止缓存

var time = new Date().getTime();

document.getElementById("imageCode").src="/ImageServlet?d="+time;

}

script>

head>

/LoginServlet" method="post">

验证码:

/ImageServlet" alt="验证码" />

看不清楚a>

form>

body>

html>

2、在 src 下新建 com.liuyanzhao 包,然后分别新建用于动态画图的 ImageServlet 类和用于判断验证码是否正确的 LoginServlet 类

ImageServlet.java

package com.liuyanzhao;

import java.awt.Color;

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;

/*

* @author LiuYanzhao

*/

public class ImageServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

BufferedImage bi = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);

Graphics g = bi.getGraphics();

Color c = new Color(200,155,255);

g.setColor(c);

g.fillRect(0, 0, 68, 22);

char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();

Random r = new Random();

int len = ch.length,index;

StringBuffer sb = new StringBuffer();

for(int i=0;i<4;i++) {

index = r.nextInt(len);

g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));

g.drawString(ch[index]+"", (i*15)+3, 18);

sb.append(ch[index]);

}

request.getSession().setAttribute("piccode", sb.toString());

ImageIO.write(bi, "JPG", response.getOutputStream());

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

}

LoginServlet.java

package com.liuyanzhao;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/*

* @author LiuYanzhao

*/

public class LoginServlet extends HttpServlet{

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String piccode = (String)request.getSession().getAttribute("piccode");

String checkcode = request.getParameter("checkcode");

checkcode = checkcode.toUpperCase();//不区分大小写

response.setContentType("text/html;charset=utf-8");

PrintWriter out = response.getWriter();

if(piccode.equals(checkcode)) {

out.println("验证码输入正确");

} else {

out.println("验证码输入错误");

}

out.flush();

out.close();

}

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doPost(request, response);

}

}

3、在 web.xml 里添加 Servlet 映射

ImageServletservlet-name>

com.liuyanzhao.ImageServletservlet-class>

servlet>

ImageServletservlet-name>

/ImageServleturl-pattern>

servlet-mapping>

LoginServletservlet-name>

com.liuyanzhao.LoginServletservlet-class>

servlet>

LoginServletservlet-name>

/LoginServleturl-pattern>

servlet-mapping>

4、运行 Tomcat 服务器,打开浏览器,访问 http://localhost:8080/CheckCode

效果如下

验证码不区分大小写,点击 “看不清楚”可以更换

java servlet验证码_Servlet 实现验证码相关推荐

  1. java servlet 多线程_Servlet的多线程和线程安全

    线程安全 首先说明一下对线程安全的讨论,哪种情况我们可以称作线程安全? 网上对线程安全有很多描述,我比较喜欢<Java并发编程实战>给出的定义,"当多个线程访问某个类时,不管运行 ...

  2. java servlet 作用_servlet的作用,servlet有什么用?

    Servlet我们经常说到,那你们知道servlet的作用是什么吗?下面通过这篇文章一起来了解一下吧. servlet作用 当我们在使用一个交互式 的Web站点的时候,我们所浏览到的所有内容都应该是在 ...

  3. java servlet例子_Servlet学习教程(三)---- 一个简单的Servlet例子

    我们用个最简单的Servlet例子来解说一下Servlet简单配置以及Servlet类实现类的写法. 第一,我们新建一个Dynamic Web Project,起名Servlet 点击NEXT,设置D ...

  4. java servlet 入门_servlet 入门详解

    servlet 入门详解 Servlet是一种服务器端的编程语言,是J2EE中比较关键的组成部分.Servlet本质上也是Java类,编写Servlet需要遵循java的基本语法,但是与一般的Java ...

  5. java servlet文件下载_Servlet 实现文件下载

    Servlet 实现文件下载 在生活或者工作中,总是避免不了下载文件,下载的东西有各种类型,譬如图片,视频,文本,文档,音乐等等,这些东西有大有小,大的有几G到几十G,小的或许只有几K.这些东西究竟是 ...

  6. java servlet作用_Servlet的功能是什么

    servlet是很复杂的东西,事实上,servlet就是一个Java接口,interface! 打开idea,ctrl + shift + n,搜索servlet,就可以看到是一个只有5个方法的int ...

  7. java servlet试题_Servlet面试题库 选择题

    2015-11-27 06:30:03 阅读( 247 ) 1.有两个Servlet:servlet1和servlet2,servlet1把HttpServletRequest和HttpServlet ...

  8. java servlet 配置_servlet与javabean配置

    servlet与javabean配置 (一):目录结构 tomcat的目录结构如下: 目录名 简介 bin 存放启动和关闭tomcat脚本 conf 包含不同的配置文件,server.xml(Tomc ...

  9. java servlet文件下载_Servlet实现文件下载功能

    本文实例为大家分享了Servlet实现文件下载的具体代码,供大家参考,具体内容如下 把文件目录直接暴露给用户是很不安全的.所以要用Servlet来做,而且这样做,文件的存储方式就更丰富了,可以是从文件 ...

最新文章

  1. 倒计时2天,如何搭乘通往AI全明星技术盛宴的末班车?(附大会完整版全日程)...
  2. Qt5.7 + VS2015 环境搭建
  3. IRIS在win2003中安装 报 error while loading a DLL错误
  4. python中a=str(int(a))什么意思_如何解决TypeError:只能将str(而不是“int”)连接到str - python...
  5. python怎么写中文至excel_[ Python爬虫实战 ] python 操作excel以及解决中文报错 - pytorch中文网...
  6. 杭电 2036 改革春风吹满地【求多边形面积】
  7. Linux中文件权限的一些知识
  8. Node.js npm 详解
  9. 【计算机网络复习】1.2.1 分层结构、协议、接口、服务
  10. 教育|仝卓高考舞弊案细节曝光:为“恢复高考成绩”已起诉1年多
  11. 企业级应用与互联网应用的区别?
  12. 关于简历:怎样才叫熟悉/精通Linux?
  13. jQuery核心函数
  14. VLC支持的视频和音频文件扩展名
  15. 反激开关电源变压器设计实例讲解(定明芳)
  16. PHP 获取YouTube视频相关信息(Youtube Api v3)
  17. STM32F103RCT6实验代码之ADS1115的使用
  18. 微软同步备份工具SyncToy,值得使用
  19. plsql无法连接linux下的oracle服务器,提示:ora-12541:TNS 无监听程序
  20. [转]PMP之挣值管理(PV、EV、AC、SV、CV、SPI、CPI)的记忆方法

热门文章

  1. mwt是什么意思网络用语_skr、xswl、zsqg…这些网络用语你知道是什么意思吗?
  2. 改变人生的100句箴言
  3. 蓝桥杯练习题之 Fibonacci数列
  4. 【Matlab学习手记】Matlab积分问题
  5. Java中的字节是什么意思?
  6. 回传速率和测量带宽及两者之间的联系
  7. 现有列表记录商品名称和价格如下:‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬要求用户输入总资产,例如: 20000,输出所有商品序号和商品列表,每行
  8. NIXIE_TUBE
  9. MATLAB | solve函数求解析解时不支持分段函数的解决方案
  10. 【产品运营从0到1】资深产品运营推荐的互联网产品运营人员必看书籍