`

验证码在页面的使用

阅读更多
包括验证码的图片生成,服务器对验证码的对比确认。
一、生成验证码图片的服务器端Servlet
package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;

public class PicCodeServlet extends HttpServlet {
	// 验证码图片的宽度。
	 private int width=60;
	 // 验证码图片的高度。
	 private int height=20;
	
	public PicCodeServlet() {
		super();
	}

	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

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

		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			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.pink);
       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=request.getSession();
       session.setAttribute("randomCode",randomCode.toString());
//       request.setAttribute("randomCode",randomCode.toString());

       
        // 禁止图像缓存。
       response.setHeader("Pragma","no-cache");
       response.setHeader("Cache-Control","no-cache");
       response.setDateHeader("Expires", 0);
       response.setContentType("image/jpeg");
       
       // 将图像输出到Servlet输出流中。
      ServletOutputStream sos=response.getOutputStream();
      ImageIO.write(buffImg, "jpeg",sos);
      System.out.println("==========");
      sos.close();
	}

	public void init() throws ServletException {
		// Put your code here
	}

}


------------------------
二、前台页面登录login.jsp中验证码的输入(原始页面在struts下自动生成)
<%@ page language="java" pageEncoding="utf-8"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
  <head>
    <html:base />
    <title>login.jsp</title>

  </head>
  <body >
	<center>
<h1>欢迎光临!!!!!</h1>
<table border="1"><tr><td>
   	<form action="servlet/DoLoginServlet" method="post">
	用户名:<input type="text" id="username" /><br>
	密 &nbsp;&nbsp;码:<input type="password" id="password"/><br>
	验证码:<input type="text" name="validateCode" id="validateCode" size="5px" />
	<img id="img" src="servlet/PicCodeServlet"/>
<input type="button" value="重新获取验证码" onclick=""/><br>
	<input type="submit" value="登录" /><input type="reset" id="reset" value="重置"/>
	</form>
</td></tr></table>
</center>
  </body>
</html:html>


----------------------
三、服务器端对验证码的对比确认
package servlet;

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;

public class DoLoginServlet extends HttpServlet {

	public DoLoginServlet() {
		super();
	}
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
	}
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doPost(request, response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		String code = request.getParameter("validateCode");
		System.out.println("inputCode ="+code);
		System.out.println("sessionCode ="+request.getSession().getAttribute("randomCode"));
		String randomCode = request.getSession().getAttribute("randomCode").toString();
		//把前台输入的验证码与服务器生成的验证码对比
		if(code.equals(randomCode)){
			System.out.println("验证码正确");
		}else{
			System.out.println("验证错误,请重新输入!");
		}
	}
	public void init() throws ServletException {
	}

}

0
0
分享到:
评论

相关推荐

    ASP.NET页面验证码控件,方便快捷使用(附使用说明)

    在实际应用中,我们可以这样在ASP.NET的`.aspx`页面中使用这个验证码控件: ```asp ``` 运行时,这个控件会生成一个随机的图像,用户需要输入图像中显示的字符以完成验证。通常,我们还会在后端验证用户输入的...

    .net 生成验证码 代码 页面

    在这个场景中,我们将讨论如何在.NET环境中创建验证码并将其集成到网页中。 首先,我们需要两个关键文件:一个ASP.NET网页(通常是.aspx文件)用于显示和生成验证码,以及一个后端处理代码(如.aspx.cs或.aspx.vb...

    页面js生成验证码

    在提供的链接中,`yanzhengma.html`可能是示例代码,展示了一个简单的验证码生成页面。通过分析这个文件,我们可以学习到如何用JavaScript实现验证码功能,包括图像处理、动态生成和验证逻辑等。 学习这个话题,...

    页面显示验证码

    在这个项目中,"页面显示验证码"实现了验证码的生成和展示功能,但仅限于在网页上显示,没有包括验证用户输入的部分。 JSP(JavaServer Pages)是Java的一种动态网页技术,它允许开发者在HTML代码中嵌入Java代码,...

    Bootstrap实现前端登录页面带验证码功能完整示例

    Bootstrap有自定义的验证码样式,在前端页面可以直接使用,他的css、js在使用前要在开头引入 上代码: &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;!-- 告诉浏览器网页所...

    安卓验证码相关-随机图片验证码适合登录页面使用点击更换输入错误自动更换.rar

    本文将深入探讨"安卓验证码相关-随机图片验证码适合登录页面使用点击更换输入错误自动更换.rar"这个压缩包所包含的知识点。 首先,随机图片验证码是一种基于图像的验证方式,它的核心思想是生成一串随机字符,并将...

    移动端手机号注册登录+验证码页面+填写资料

    在移动端应用开发中,"移动端手机号注册登录+验证码页面+填写资料"是常见的用户认证流程,涉及到了前端技术栈中的JavaScript、jQuery、CSS以及HTML5和CSS3等关键元素。以下将详细介绍这些知识点: 1. **手机号登录*...

    js短信验证码倒计时(页面刷新无效)

    本文将深入探讨如何实现一个js短信验证码倒计时功能,同时确保在页面刷新后倒计时状态能够保持。 首先,我们需要理解验证码发送和倒计时的基本逻辑。当用户点击获取验证码按钮时,前端会向后端发送请求,请求发送...

    注册页面用的验证码demo

    在这个“注册页面用的验证码demo”中,我们可以推测它可能采用了一种现代且用户体验友好的验证码设计,例如基于JavaScript实现的动态图形验证码。这种验证码在生成时随机生成一组图像,并通过JavaScript控制显示在...

    这个是资源文件,手机验证码验证页面

    - 用户输入验证码:用户接收到验证码后输入,页面使用jQuery监听输入事件,提交时发送验证码至服务器进行验证。 - 验证结果反馈:服务器验证验证码是否匹配,通过JSP返回结果,页面根据结果显示成功或失败消息。 ...

    JavaScript实现页面动态验证码

    在本主题中,我们将深入探讨如何使用JavaScript实现一个页面动态验证码。验证码的主要目的是防止自动化的机器人程序对网站进行恶意操作,例如批量注册、垃圾评论等。 验证码通常包括一些随机生成的字符或数字,用户...

    手机验证码h5页面附带验证

    在这个项目中,我们看到的"手机验证码h5页面附带验证"是一个适用于快速集成到现有项目中的H5页面模板,特别适合对前端开发不太熟悉的开发者,即“小白党”。通过简单的复制和粘贴,就可以将这个验证功能整合到你的...

    jsp页面生成验证码

    在jsp登录页面生成验证码,并在登录的时候在后台进行验证码是否一致的比较。

    JAVA实现注册页面验证码刷新

    - **AJAX**:为了让验证码在不刷新整个页面的情况下更新,我们可以使用AJAX(Asynchronous JavaScript and XML)。JavaScript库如jQuery提供了方便的API来发送异步请求到服务器获取新验证码,并更新页面上的验证码...

    H5注册页面,手机号验证,验证码验证,错误提示

    在H5注册页面,一般使用短信验证码,用户输入手机号后,系统向该号码发送一条包含验证码的短信。用户收到验证码后输入到页面上,系统再次验证。这一过程可以通过Ajax异步请求实现,提高用户体验。 ```javascript //...

    vue插件——使用canvas生成图形验证码

    接着,我们将这个canvas绘制的验证码作为一个Vue组件,这样可以在任何Vue应用中方便地引入和使用。组件的属性可能包括验证码的尺寸、颜色方案、字符数量等,可以通过配置这些属性来调整验证码的样式和难度。 在用户...

    layUI的验证码功能及校验实例

    在实际部署中,开发者需要注意防刷机制,如验证码的刷新频率不宜过高,以免给正常用户带来不便,同时也可以加入验证码刷新的按钮,允许用户在看不清楚时刷新验证码。 最后,文件内容强调了layUI的验证码实现是使用...

    页面随机验证码生成

    在JSP页面上,通常会有一个专门的图片元素显示验证码。这个图片是由服务器动态生成的,包含一组随机的字符或数字,这些字符通常被扭曲、倾斜、加噪声,以便人类可以识别但机器难以解析。 在Java后台,验证码的生成...

    只更新验证码,不刷新页面

    通过使用`&lt;iframe&gt;`,我们可以实现验证码的动态更新,让用户在填写表单时可以无缝地获取新的验证码,而不会丢失已填写的信息。 `&lt;iframe&gt;`是HTML中的一个内联框架元素,它可以嵌入另一个HTML文档到当前文档中。在本...

    JavaScript 验证码页面

    简单验证码页面模板页面 JavaScript 实现简单的验证码

Global site tag (gtag.js) - Google Analytics