Servlet 实现验证码
分析
生成图片实现类
ImageServlet 类
① 定义BufferedImage 对象
② 获得 Graphics 对象
③ 通过 Random 产生随机验证码信息
④ 使用 Graphics 绘制图片
⑤ 记录验证码信息到 session 中
⑥ 使用 ImageIO 输出图片
代码实现
1、新建 web 项目 CheckCode,在 WebContent 下新建 index.jsp
index.jsp
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Insert title here</title>
- <script type="text/javascript">
- function reloadCode() {
- //传个时间参数,防止缓存
- var time = new Date().getTime();
- document.getElementById("imageCode").src="<%=request.getContextPath()%>/ImageServlet?d="+time;
- }
- </script>
- </head>
- <body>
- <form action="<%=request.getContextPath()%>/LoginServlet" method="post">
- 验证码:<input type="text" name="checkcode" />
- <img id="imageCode" src="<%=request.getContextPath()%>/ImageServlet" alt="验证码" />
- <a href="javascript:reloadCode();">看不清楚</a> <br />
- <input type="submit" value="提交"/>
- </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 映射
- <servlet>
- <servlet-name>ImageServlet</servlet-name>
- <servlet-class>com.liuyanzhao.ImageServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <!-- 映射为 ImageServlet -->
- <servlet-name>ImageServlet</servlet-name>
- <url-pattern>/ImageServlet</url-pattern>
- </servlet-mapping>
- <servlet>
- <servlet-name>LoginServlet</servlet-name>
- <servlet-class>com.liuyanzhao.LoginServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <!-- 映射为 IndexServlet -->
- <servlet-name>LoginServlet</servlet-name>
- <url-pattern>/LoginServlet</url-pattern>
- </servlet-mapping>
4、运行 Tomcat 服务器,打开浏览器,访问 http://localhost:8080/CheckCode
效果如下
验证码不区分大小写,点击 “看不清楚”可以更换
本文链接:https://liuyanzhao.com/5344.html
Servlet 实现验证码相关推荐
- 转: 通过Servlet生成验证码图片
孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(九)-- 通过Servlet生成验证码图片 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedIma ...
- JSP+servlet生成验证码并验证
生成验证码的基本过程是: <%@ page language="java" import="java.util.*" pageEncoding=" ...
- Java Web学习总结(6)——通过Servlet生成验证码图片
2019独角兽企业重金招聘Python工程师标准>>> 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawIma ...
- javaweb学习总结(九):通过Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl.r ...
- 通过Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 package gacl.res ...
- Servlet开发验证码
在日常的上网过程中,我们经常会有注册和登录操作,而通常的登录注册系统都会要求输入验证码以区别用户行为和计算机程序行为来防止恶意注册.暴力破解密码等. 一.验证码概念及其作用 1.验证码:就是将一串随机 ...
- 基于Servlet的验证码登陆demo
验证码技术在web项目中是十分常见的技术,它可以防止:恶意破解密码.刷票.论坛灌水,某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试等,本文利用比较简易的方式实现了这个功能. 1. ...
- 通过Servlet生成验证码图片 (转孤傲苍狼)
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl.r ...
- javaweb(九)—— 通过Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl.r ...
- avaweb学习总结(九)—— 通过Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl.r ...
最新文章
- 突发!微信官方证实:“绞杀”了刷量平台
- 除了百度,国内还有哪些无人驾驶公司?
- 方法革新:8个宏基因组分析新工具 | 热心肠日报
- linux sftp远程连接命令
- OpenCV用于人脸检测
- 百度地图JavascriptApi Marker平滑移动及车头指向行径方向
- poj3254 Corn Fields
- 5分钟轻松教您如果组建100-500路大型拼接监控系统!
- PostgreSQL开放自由
- 前端累加nan怎么解决_前端面试,你有必要知道的一些JavaScript 面试题(上)
- MySQL锁定机制简介
- 将I1111改成I1112
- 谷歌翻译函数C#代码实现
- R可视化:plot函数基础操作
- vast显示不出来服务器,VAST实用小知识?
- php 去除多余空行,php如何去除空行
- 在Linux中修改系统的IP地址
- poj 1718 River Crossing
- 职业学校计算机教学创新论文题目,信息技术论文题目大全
- objective-c常见类型%z
热门文章
- 【资料搬迁】虚拟机安装CentOS
- (转)webstorm快捷键
- pyglet: a cross-platform windowing and multimedia
- [转]Using Named Pipes (FIFOs) with Bash
- ASA站点×××,远程站点通过主站上网之配置
- 支持向量机总结(SVM)
- 【java与智能设备】CH11 Android中常见数据格式解析
- 概率论与数理统计 习题篇
- android缓存垃圾扫描功能吗,Android 系统缓存扫描与清理方法分析
- Android计算器(仿小米计算器)