需要使用的文件:
reg.html页面文件
验证码制作文件ImageServlet.java
提交响应文件RegServlet
web.xml配置文件
这句话<img src="ImageServlet" />,我们在web.xml文件里面配置ImageServlet文件,可以直接通过这个src访问到ImageServlet文件,然后获得回应,显示验证码
reg.html文件---------------------------------------------
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h2>用户注册</h2> <form action="RegServlet" method="POST"> 帐号:<input type="text" id="userName" name="userName" onblur="sendRequest()" /> <div id="msg"></div> <br /> 验证码<input type="text" name="validate" /> <img src="ImageServlet" /> <br /> <input type="submit" value="提交" /> </form> </body> </html>
------------------------------------------------------------------------
验证码制作文件ImageServlet.java
---------------------------------------------------------------
import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class ImageServlet extends HttpServlet { // 定义可选择的字符 private static final String CHARS = "23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ"; static Random random = new Random(); // 得到一个随机的字符串 private String getRandomString() { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < 6; i++) { // 生成六个字符 buffer.append(CHARS.charAt(random.nextInt(CHARS.length()))); } return buffer.toString(); } // 随机背景颜色 public static Color getRandomColor() { // 得到随机颜色 return new Color(random.nextInt(128) + 127, random.nextInt(128) + 127, random.nextInt(128) + 127); } public static Color getReverseColor(Color c) { // 得到颜色的反色 return new Color(255 - c.getRed(), 255 - c.getGreen(), 255 - c.getBlue()); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/jpeg"); // 设置输出类型 // 得到随机字符串 String randomString = getRandomString(); // 将getSession()设置为true,当会话不存在是返回null //将验证码存入session对象,方便验证的时候取出 request.getSession(true).setAttribute("randomString", randomString); // 设置图片的宽、高 int width = 80; int height = 30; Color bcolor = getRandomColor(); // 设置背景色 Color fcolor = getReverseColor(bcolor); // 前景色 // 创建一个彩色图片 BufferedImage bimage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR); // 创建绘图对象,从bimage上得到的绘制对象,会把数据绘制到bimage上 Graphics2D g = bimage.createGraphics(); // 字体样式为宋体,加粗,20磅 g.setFont(new Font("Vijaya", Font.BOLD, 20)); // 先画出背景色 g.setColor(bcolor); g.fillRect(0, 0, width, height); // 再画出前景色 g.setColor(fcolor); for (int i = 0; i < randomString.length(); i++) { // 绘制随机字符 g.drawString(randomString.charAt(i) + "", 10 + i * 12, 22); } // 画出干扰点 for (int i = 0, n = random.nextInt(100); i < n; i++) { g.fillRect(random.nextInt(width), random.nextInt(height), 1, 1); } //上面部分便是生成验证码图片代码,下面是将图片输出到请求对象浏览器页面 // 将图像输出到浏览器 ServletOutputStream outstream = response.getOutputStream(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outstream); encoder.encode(bimage); outstream.flush(); outstream.close(); } }
----------------------------------------------
接下来是提交验证码后判断对错的文件响应文件RegServlet
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class RegServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //首先判断验证码 //获得用户提交的验证码 String validate = request.getParameter("validate"); //从session中获得系统生成的验证码 String randomStr = (String)request.getSession().getAttribute("randomString"); if(validate.equalsIgnoreCase(randomStr)){ //当验证码正确的时候,才来获得其他数据 System.out.println("验证码正确!!"); }else{ System.out.println("验证码错误!!"); } } }
-web.xml配置文件------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>PicValidate</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>ImageServlet</servlet-name> <servlet-class>servlet.ImageServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ImageServlet</servlet-name> <url-pattern>/ImageServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>RegServlet</servlet-name> <servlet-class>servlet.RegServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RegServlet</servlet-name> <url-pattern>/RegServlet</url-pattern> </servlet-mapping> </web-app>
相关推荐
当用户提交登录表单时,服务器端会检查用户输入的验证码是否与session中存储的原始验证码一致,如果匹配则验证成功,否则提示用户重新输入。 以下是一个简单的验证码生成Servlet示例: ```java import java.awt....
- 后台接收到请求后,从Session中取出验证码并比较与用户输入的是否一致,如果匹配则登录成功,否则提示用户重新输入。 4. **整合SSM**: - 在SpringMVC配置中,定义验证码相关的Controller映射。 - 在Spring...
实现php定制登录验证码
在软件测试过程中,有时我们需要去掉登录过程中的验证码以简化测试步骤,提高自动化测试的效率。登录验证码的主要目的是防止恶意机器人或自动程序进行非法操作,但它也会给自动化测试带来额外的复杂性,因为每个...
3. **用户输入验证**:当用户输入验证码后,我们需要比较他们的输入是否与生成的验证码匹配。可以添加一个事件监听器,如`onsubmit`,来在表单提交时进行验证: ```javascript document.getElementById('myForm')....
在压缩包中的“gif动态登录验证码工具类”很可能是实现这种验证码功能的源代码,包含了生成随机字符串、制作GIF动画以及验证用户输入的核心逻辑。 总的来说,“gif动态登录验证码”是一种有效的安全措施,通过利用...
- **比较**:将用户输入的验证码与保存在session中的正确验证码进行比较,如果相同则表示验证成功。 #### 三、验证码的工作原理 验证码的主要目的是确认用户是否为真实的人类操作者,而不是自动化的程序。在登录...
PHP登录验证码功能PHP写的登录验证码功能
### jsp用户登录验证码知识点详解 #### 一、概述 在Web应用开发中,为了防止自动化工具或恶意脚本对登录系统的频繁尝试,通常会在登录界面加入验证码功能。验证码(CAPTCHA)是一种用来区分人与计算机的技术手段。...
验证码生成与判断是Web开发中常见的一种安全机制,主要用于防止自动化程序(如机器人)进行非法操作,例如批量注册、恶意登录等。在这个项目中,"验证码生成 判断" 涉及到的主要知识点包括验证码的生成逻辑、图像...
【标题】: "适用于各种编程中文汉字验证码制作" 在编程领域,验证码是一种常见的安全机制,用于验证用户身份,防止自动脚本或者恶意机器人进行非法操作。中文汉字验证码因其独特的复杂性和难以被机器识别的特性,...
登录验证码 jigsawcanvas滑动验证码
验证码是一种用于验证用户身份的安全机制,它通常由一串随机字符组成,用户需要在输入框中正确输入才能完成特定操作,如登录、提交表单等。在VB(Visual Basic)中制作加密验证码涉及到编程基础、图像处理以及字符串...
在工作中经常用到验证码,验证码的主要作用是防止机器人暴力猜测系统用户名、密码,防止论坛被一些发帖程序大量灌水。验证码一般是有数字、大小写字母组成,也有的有汉字,例如:126邮箱的注册,怎么制作验证码呢?
在这个"登录 单点登录 带验证码登录"的实例中,我们将会深入探讨以下几个关键知识点: 1. **登录机制**:登录系统通常需要用户输入用户名和密码。在本示例中,登录过程可能是通过用户界面提交表单,后台Java代码...
为了使验证码与每个用户的登录请求关联,我们需要在生成验证码时使用一个唯一的标识(如 `randomstr`)。当用户提交登录表单时,将这个标识与生成的验证码一起发送到服务器。服务器端根据这个标识来查找对应的验证码...
jsp登录验证码,很好的登录验证码初学易懂
易语言验证码制作与识别是计算机编程领域中的一个关键知识点,主要涉及到图像处理、模式识别以及字符串匹配等技术。易语言,是由中国程序员王垠开发的一种简单易学的编程语言,其设计目标是让编程变得更加简单直观。...
5. **验证用户输入**:当用户输入验证码后,服务器端会比较用户输入的验证码与之前保存的验证码是否一致,一致则验证通过,否则失败。 过滤器(Filter)在Servlet生命周期中扮演了重要角色,它们可以: 1. **字符...
6. 集成与应用:将训练好的模型集成到验证码自动识别库中,与其他系统或服务接口配合,实现实时或批量的验证码识别功能。 7. 抗攻击策略:为了应对不断变化的验证码类型和反机器识别策略,制作器还需要具备一定的抗...