通过servlet 实现图片验证码功能,分3步实现:
import javax.servlet.http.servlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletException;
import javax.servlet.ServletOutputStream;
import java.io.Exception;
import java.util.Randow;
import java.awt.Color;
import java.awt.Image.BufferImage;
import java.awt.Graphics2D;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
/**
通过servlet实现验证码功能
*/
public class CodeServlet extends HttpServlet{
//声明字符数组常量,随机数从此常量中获取(去除了些常见的容易产生歧义的字符如'1','l','0','o'等)
publis static final char[] CHARS= {'2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','g','k','m','n','p','q','r','s','t','u','v','w','x','z'}
public static Randow randow = new Randow();//声明随机数
//获取4位的随机数
public static String getRandow(){
StringBuffer buffer= new StringBuffer();
for(int i=0; i<4; i++){
buffer.append(CHARS[randow.nextInt(CHARS.length())]);
}
return buffer.toString();
}
//获取随机颜色
public static Color getColor(){
return new Color(radow.nextInt(255),radow.nextInt(255),radow.nextInt(255));
}
//获取随机颜色反色
public static Color getReverseColor(Color c){
return new Color(255-c.getRed(), 255-c.getGreen(), 255-c.getBlue());
}
public void doGet(HttpServletRequst request, HttpServletResponse response) throws HttpServletException,IOException{
//设置相应类型,此处相应类型为图片,HTML文本为(text/html)
response.setContentType("image/jpeg");
//request.setCharacterEncoding = "UTF-8"; //设置请求的编码格式
//response.setCharacterEncoding = "UTF-8"; //设置响应的编码格式
String rdmString = getRandom();
//设置Session以便与前台输入的随机数对比
request.getSession().setAttribute("rdmString",rdmString);
int width = 50;
int height = 20;
Color clr = getColor();
Color rclr = getReverseColor(clr);
//创建图片对象,绘制图片,设置图片属性,产生噪点(最多50个),对图片对象编码
BufferImage bi = new BufferImage(width, height, BufferImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.setFont(new Font(FONT.SANS_SERFS,FONT.BOLD,12));
g.setColor(clr);
g.fillRect(0,0,width,height);
g.setColor(rclr);
g.drawString(rdmString,10,10);
for(int i=0,n=random.nextInt(50); i<n; n++,i++){
g.drawRect(width,height,1,1);
}
ServletOutputStream out = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(bi);//对图片对象编码
out.flush();
}
}
<servlet>
<servlet-name>codeServlet</servlet-name>
<servlet-class>com.servlet.CodeServlet</servlet-class><!-- 实际的类路径 -->
</servlet>
<servlet-mapping>
<servlet-name>codeServlet</servlet-name>
<url-pattern>/servlet/codeServlet</url-pattern>
</servlet-mapping>
<script>
fucntion loadIMG(){
document.getElementById('btn1').disabled = true;
document.getElementById('img1').src = "servlet/codeServlet?ts='+new Date().getTime+'";
}
</script>
<img id="img1" src="servlet/codeServlet" onload="btn1.disabled = false;">
<input type="button" id="btn1" value="换一张" onclick="loadIMG()">
分享到:
相关推荐
本教程将详细介绍如何使用Servlet技术来实现一个基本的图片验证码功能。Servlet是Java服务器端编程的核心技术之一,它可以接收和响应HTTP请求,非常适合构建动态Web应用程序。 首先,我们需要理解验证码的基本原理...
SSH框架提供了模型-视图-控制器(MVC)的架构,使得验证码功能的实现更加方便和高效。 首先,我们需要理解Servlet。Servlet是Java Web开发中的一个核心组件,它是一个Java类,用于扩展服务器的功能。在验证码场景下...
通过以上步骤和组件,SSM框架可以成功地实现登录验证码功能,为Web应用提供了一道安全防线。在实际开发中,我们还应结合具体业务需求,对验证码的复杂度、长度和有效期进行适当调整,以达到最佳的平衡点。
以上就是使用Servlet实现验证码功能的基本步骤。需要注意的是,为了提高安全性,实际应用中还需要考虑缓存清除、超时机制、防止重放攻击等问题。此外,随着技术的发展,现在还有更复杂的验证码解决方案,如滑动...
在本项目中,我们通过Servlet来实现验证码的校验功能,这是一个典型的Web开发中的验证流程。Servlet是Java中用于处理HTTP请求的服务端组件,它可以接收用户的请求并返回响应。 首先,我们需要理解验证码的基本原理...
#### 三、生成验证码图片的Servlet实现 下面通过具体的代码示例来解释如何使用Servlet生成验证码图片。 ```java public class CreateImageServlet extends HttpServlet { public void doGet(HttpServletRequest ...
通过以上步骤,我们就实现了一个基于Servlet的简单验证码功能。这个demo不仅展示了Servlet的基本用法,还涵盖了图像处理、HTTP响应以及session管理等关键知识点。在实际项目中,还可以根据需求进行优化,如使用更...
本教程将详细解释如何使用Servlet技术来实现一个动态的验证码功能,包括点击验证码后更换新的验证码以及验证码的验证过程。 一、Servlet基础 Servlet是Java EE中用于处理HTTP请求的服务器端组件。它接收客户端...
"前后端分离(vue+servlet)实现验证码" 验证码的重要性 在当前的web应用程序中,验证码是一种非常重要的安全机制,用于防止机器人和恶意攻击。验证码可以确保用户的身份验证,防止恶意攻击和机器人攻击。 前后端...
总结,本项目实现了基于Java Servlet的验证码生成与验证功能,涵盖了随机数生成、图像处理、HTTP交互等多个技术点。通过对验证码的生成、发送、验证以及前端的交互处理,确保了用户输入的安全性和系统的可靠性。
本示例通过使用Buffalo框架和Servlet来实现一个简单的图形验证码功能。下面将详细介绍这个实现过程中的关键知识点。 1. **Buffalo框架**:Buffalo是一个轻量级的Java服务框架,它提供了一种简单的方式来处理HTTP...
通过上述步骤,我们可以使用Servlet在Java Web应用中实现一个简单的验证码生成器。当然,实际项目中可能需要考虑更多的细节,如优化验证码的显示效果,增加时间戳防止重放攻击,以及结合其他安全措施等。
在这个案例中,我们讨论的是使用Servlet来实现图片验证码的功能,这是一项关键的Web安全技术。 Servlet是Java服务器端编程的一种方式,它扩展了服务器的功能,允许开发者创建动态、交互式的Web应用程序。在这个场景...
在创建验证码功能时,JSP可以用来展示验证码图像,并处理用户的验证请求。 Servlet则是Java的服务器端程序,它负责接收并处理HTTP请求,执行业务逻辑,并生成响应。在验证码系统中,Servlet可以生成随机验证码字符...
在Java Web开发领域中,经常利用JSP(JavaServer Pages)与Servlet技术来实现验证码功能。本文将详细解析一个具体的JSP Servlet验证码实现案例。 #### 二、核心概念 1. **Servlet**:Servlet是一种基于Java的技术...
在这个场景中,我们将深入探讨如何使用Java Servlet来实现一个动态的验证码图片生成器。 首先,`HackerServlet` 类继承自 `HttpServlet`,这是Java Servlet API中的一个抽象类,用于处理HTTP请求。Servlet是Java...
验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则认为提交...本文介绍了使用servlet来实现随机验证码。
在Java Web开发中,Servlet是一种用于扩展服务器功能的Java类,它可以处理HTTP请求并返回响应。...通过学习和理解这些代码,开发者可以掌握如何在实际项目中实现验证码功能,增强Web应用的安全性。
本文主要探讨如何使用Servlet技术来模仿CSDN网站的动态验证码生成过程,其中包括数字和字母的组合,以及加减乘三种运算的实现。 首先,我们要理解Servlet的原理。Servlet是Java EE中的一种服务器端组件,用于扩展...