验证码的制作(一):使用servlet来实现验证码

使用servlet来实现验证码

下面让我们来说一下为什么在项目开发中要用到验证码,以及使用验证码会给我们的项目带来什么好处?

1、如果开发中不使用验证码会给项目带来那些危害:

①、如果对用户不断登录的话,可以破解用户密码

②、对对某个网站创建账户

③、对某个网站提交垃圾数据

④、对某个网站刷票等一系列危害

2、在网上的可以看到其实验证码是通过动态获取图片以及图片中的内容不断变化的过程,下面让我们来说一下生成验证码用到了那些类,如下图:

1、BufferedImage图像数据缓冲区

2、Graphics绘制图片

3、Color获取颜色

4、Random获取随机数

5、ImageIO输出图片

知道了生成验证码用的实现类,下面我们来定义自己的一个servlet类来实现验证码,具体步骤如下:

1、首先创建一个页面:index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	<script type="text/javascript">
	function reloadCode(){
	var time=new Date().getTime();
	document.getElementById("imagecode").src="<%=path %>/servlet/ImageServlet?d="+time;
	}
	</script>
  </head>

  <body>
    验证码:<input type="text" name="checkcode" />
    <img alt="验证码" id="imagecode" src="<%=path %>/servlet/ImageServlet" />
    <a href="javascript:reloadCode();">看不清楚</a><br/>
  </body>
</html>

2、下面来创建它的servlet:ImageServlet.java

package com.code;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
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;

public class ImageServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		BufferedImage bImage=new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);
		//画图
		Graphics graphics=bImage.getGraphics();
		Color color=new Color(220,150,130);
		graphics.setColor(color);
		//给图片画个框
		graphics.fillRect(0, 0, 78, 27);

		/**
		 * 在图片中显示的内容
		 * 字母和数字的组合
		 */
		char[] ch="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
		//随机获取里面的内容
		Random random=new  Random();
		int len=ch.length,index;
		StringBuffer sb=new StringBuffer();
		for(int i=0;i<4;i++){
			index=random.nextInt(len);
			graphics.setColor(new Color(random.nextInt(88),random.nextInt(188),random.nextInt(255)));
			graphics.drawString(ch[index]+"",(i*15)+3, 18);
			sb.append(ch[index]);
		}
		//将验证码保存到session为以后比较使用
		request.getSession().setAttribute("piccode", sb.toString());
		ImageIO.write(bImage, "JPG", response.getOutputStream());
		}

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

	}

}

ImageServlet类写完之后,需要在web.xml里面配置该servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>ImageServlet</servlet-name>
    <servlet-class>com.code.ImageServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>ImageServlet</servlet-name>
    <url-pattern>/servlet/ImageServlet</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

根据上面的步骤完成之后,将该web项目部署到tomcat上运行就可以了,运行结果如下图:

至此一个简单的运用servlet来实现验证码的案例就算完成了,是不是很简单呢!以后还会更新更方便、更简洁、功能更全的方法来实现验证码。

时间: 2024-10-30 22:49:42

验证码的制作(一):使用servlet来实现验证码的相关文章

验证码的制作(二):使用开源组件jcaptcha来实现验证码

使用开源组件jcaptcha来实现验证码 之前说了简单的运用servlet来实现验证码,但其实现的验证码样式比较单一,容易被破解.所以接下来我来介绍另一种实现验证码的方式:那就是运用开源组件jcaptcha来实现样式更全面的验证码样式. 开始之前咱们先来看看运用jcaptcha实现验证码以及对其的验证的一个大致流程:流程图如下 开始之前我们需要下载jcaptcha开源组件jar包 上边就是该项目中需要用到的war包:可以到网上下载,然后将war包解压:这里需要注意的是需要把里面的.class文件

servlet中生成验证码

在servlet中生成验证码 package login; import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.util.Random; import javax.servlet.Ser

Java实现验证码的制作

验证码概述 为什么使用验证码? 验证码(CAPTCHA)是一种全自动程序.主要是为了区分“进行操作的是不是人”.如果没有验证码机制,将会导致以下的问题: 对特定网站不断进行登录,破解密码: 对某个网站创建账户: 对某个网站提交垃圾数据(灌水贴): 对某个网站进行刷票. 使用Servlet实现验证码 一个验证码包含两个部分:图片和输入框. 1 <script type="text/javascript"> 2 function reloadCode(){ 3 var time

ASP.NET——验证码的制作

        我们在登陆网站,发表博客或者提交评论的时候,经常会遇到填写验证码这一项,当时感觉挺神奇的样子,终于在牛腩新闻发布系统里接触到了,在这里小小的总结下.         用到的东东有三个:一个aspx页面,一个图片         首先,建立一个aspx页面.         <%@ WebHandler Language="C#" Class="Picture" %> using System; using System.Web; usin

java图形验证码生成工具类及web页面校验验证码

最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善. 验证码生成器: [html] view plain copy print? import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; im

验证码的制作和验证(三)

三.Kaptcha的扩展----算式验证码 1.将原来的KaptchaServlet.class反编译为KaptchaServlet.java,在其基础上修改,得新的KaptchaServlet.java [反编译软件:java Decompiler][代码有注释部分为修改部分] 1 package com.kaptcha; 2 3 import java.awt.image.BufferedImage; 4 import java.io.IOException; 5 import java.u

利用Servlet生成动态验证码

先创建一个Servlet import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.awt.i

servlet实现一次性验证码

大致的思路:先用java生成验证码,然后将生成的验证码保存到session中,在表单提交时,将保存到session中的验证码与表单提交的验证码进行比较,然后输出不同的结果.其实还可以实现一个目标,在用户禁用cookie也能验证成功,那就需要url重写了.这个例子只是给了一个简单的验证码的实现,当然可以根据实际的需求写出更加精彩的验证码,比如"汉字"验证码,算术验证码.本文只是给怎样实现验证码提供了一个基本的思路. ImageCodeUtil.java package cn.zq.uti

PHP验证码的制作教程

自己过去自学了PHP绘画验证码的教程,现在就把这一部分笔记跟大家分享,希望可以帮到大家. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜那么麻烦了.  笔记链接:http://pan.baidu.com/s/1qYdQdKK 密码:pvj2 下面主要从理论+实践代码进行讲解,后面有代码实例. 一.验证码的介绍验证码是为全自动区分计算机和人类的图灵测试的缩写.是一种区分用户是计算机和人的