一、使用纯Servlet实现验证码.
(1)在web.xml配置:
<servlet>
<servlet-name>image</servlet-name>
<servlet-class>org.test.web.AuthImage</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>image</servlet-name>
<url-pattern>/authImage</url-pattern>
</servlet-mapping>
(2)servlet源码:
public class AuthImage extends HttpServlet
{
private static final String CONTENT_TYPE = "text/html; charset=gb2312";
//设置字母的大小,大小
private Font mFont = new Font("Times New Roman", Font.PLAIN, 17);
public void init() throws ServletException
{
super.init();
}
Color getRandColor(int fc,int bc)
{
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc);
int g=fc+random.nextInt(bc-fc);
int b=fc+random.nextInt(bc-fc);
return new Color(r,g,b);
}
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
//表明生成的响应是图片
response.setContentType("image/jpeg");
int width=100, height=18;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200,250));
g.fillRect(1, 1, width-1, height-1);
g.setColor(new Color(102,102,102));
g.drawRect(0, 0, width-1, height-1);
g.setFont(mFont);
g.setColor(getRandColor(160,200));
//画随机线
for (int i=0;i<155;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(6) + 1;
int yl = random.nextInt(12) + 1;
g.drawLine(x,y,x + xl,y + yl);
}
//从另一方向画随机线
for (int i = 0;i < 70;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(12) + 1;
int yl = random.nextInt(6) + 1;
g.drawLine(x,y,x - xl,y - yl);
}
//生成随机数,并将随机数字转换为字母
String sRand="";
for (int i=0;i<6;i++)
{
int itmp = random.nextInt(26) + 65;
char ctmp = (char)itmp;
sRand += String.valueOf(ctmp);
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(String.valueOf(ctmp),15*i+10,16);
}
HttpSession session = request.getSession(true);
session.setAttribute("rand",sRand);
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
}
public void destroy()
{
}
}
(3)页面显示:
<img src="authImage"/>
二、使用纯jsp实现验证码
<%@ page language="java" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"
contentType="image/jpeg" pageEncoding="UTF-8"%>
<% //设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cahce-Control","no-cache");
response.setDateHeader("Expires",0);
//在内存中创建图片
int width=60,height=20;
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//获取图形上下文
Graphics g= image.getGraphics();
//生成随机类
Random random= new Random();
//设置背景颜色
g.setColor(new Color(160,200,100));
g.fillRect(0,0,width,height);
//设置字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//随机产生50条干扰线,使图形中的验证码不易被其他的程序探测到
g.setColor(new Color(160,200,200));
for(int i=0;i<50;i++)
{
int x=random.nextInt(width);
int y=random.nextInt(height);
int x1=random.nextInt(width);
int y1=random.nextInt(height);
g.drawLine(x,y,x+x1,y+y1);
}
//随机产生验证码(6位数字)
String sRand="";
for(int i=0;i<6;i++)
{
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
//将验证码显示到图象
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(rand,13*i+6,16);
}
session.setAttribute("rand",sRand); //////将产生的验证码存储到sesson中
g.dispose();
ImageIO.write(image,"JPEG",response.getOutputStream());
out.clear(); //***********
out=pageContext.pushBody();//**********
%>
分享到:
相关推荐
在Java Web开发中,我们可以使用Servlet和JSP来实现一个简单的图形验证码。以下将详细介绍如何利用这两个技术进行验证码的实现。 首先,理解验证码的基本原理:验证码是一种通过图像显示随机字符或数字的方式,用户...
综上所述,"JAVA Web留言板 (JSP SERVLET验证码)"项目涵盖了JAVA Web开发的核心技术,包括前后端交互、数据处理、用户验证以及安全性实践等多个方面,是学习和掌握JAVA Web开发的一个典型实例。通过实践这个项目,...
生成验证码图片 java类中获得验证码的方法: session.getAttribute("checkcode"); jsp页面中显示图片的方式: ${pageContext.request.contextPath}/checkcode.jsp"/> 另外在web.xml中配置验证码类的加载: ...
在这个例子中,JSP页面可能包含一个`<img>`标签,其`src`属性指向一个Servlet,该Servlet负责生成验证码的图像并将其作为HTTP响应的一部分返回给浏览器。 3. **控制器(Controller)**: 用户输入验证码后,会提交...
在Java开发中,生成动态GIF验证码是一种常见的安全机制,用于防止自动机器人...通过以上步骤,你就可以在Java Web应用中实现一个生成动态GIF验证码的功能。这不仅增强了系统的安全性,也为用户提供了良好的交互体验。
综上所述,这个项目展示了如何在Java Web环境中利用Servlet和JSP来创建一个具有刷新功能的随机验证码系统。Servlet负责生成和验证验证码,而JSP作为用户界面,提供了用户交互的可能性。这个系统对于理解Java Web开发...
用java写的自动生成验证码图片,和验证,用的servlet技术
在这里,我们需要配置Servlet的映射路径,比如 `<servlet-mapping>` 和 `<servlet>` 标签,使得用户可以通过特定URL访问到验证码生成的Servlet。 最后,`shown.java`可能是Servlet的源代码,其中包含了验证码的生成...
本文将详细介绍如何在Java Server Pages (JSP) 和 Servlet 技术的基础上,实现一个简单而实用的验证码图片生成工具。 #### 一、验证码的基本概念 验证码(CAPTCHA)是一种区分计算机和人类的方法,常用于验证用户...
### 二、验证码生成原理 验证码通常由随机字符组成,这些字符可以是数字、字母或特殊符号,有时还会加入背景噪声或扭曲效果以增加识别难度。在本例中,验证码是通过以下步骤生成的: 1. **定义字符集**:如`...
Servlet是Java Web开发中的一...总之,Servlet生成图片验证码是一种常见的Web安全实践,通过结合Java的图形库和HTTP交互,可以实现高效且安全的用户验证机制。在设计和实现时,应充分考虑用户体验和安全性之间的平衡。
本教程将详细讲解如何在Java环境下实现一个完美的、可定制的验证码生成系统。 首先,验证码的基本原理是生成一串随机字符串,并将其与图像结合,用户在看到图像后需输入对应的字符串,服务器端会验证用户输入的字符...
jsp 验证码生成和刷新是 Web 开发中非常重要的一部分。验证码的生成和刷新可以防止机器人攻击和恶意注册。下面我们将详细介绍 jsp 验证码生成和刷新的过程。 一、四位数据的验证图片生成 验证码生成是使用 servlet...
本项目是一个基于Java实现的验证码生成及刷新功能,涉及到的技术主要包括JSP(JavaServer Pages)和Servlet。 首先,我们来看JSP。JSP是Java的一种动态网页技术,它允许开发者将HTML代码与Java代码混合编写,使得...
在这个提供的压缩包中,包含的是一个基于Java实现的彩色验证码生成与验证的功能代码,适用于网页安全验证,防止自动机器人或恶意攻击。验证码通常由随机字符组成,目的是确保用户是人类而非自动化程序。 1. **彩色...
本项目“jsp随机验证码生成测试”提供了一个基于Java Server Pages (JSP) 实现的验证码生成实例,旨在帮助开发者理解和实践如何在Web应用程序中集成验证码功能。 验证码的主要目的是验证用户是人而不是计算机程序。...
总的来说,Java Web验证码生成示例提供了一个基础的验证码系统实现,对于初学者来说,这是一个了解验证码工作原理和实践Java Web开发的好例子。通过深入研究和修改,你可以根据实际需求增强验证码的安全性和用户体验...
压缩包中的"验证码生成"文件可能包含了实现上述步骤的JSP代码示例。通过查看和学习这个示例,你可以了解到如何在实际项目中生成和使用验证码。为了深入理解,你需要了解JSP语法、Java图像处理以及HTTP会话管理等相关...
在Java Web开发领域中,经常利用JSP(JavaServer Pages)与Servlet技术来实现验证码功能。本文将详细解析一个具体的JSP Servlet验证码实现案例。 #### 二、核心概念 1. **Servlet**:Servlet是一种基于Java的技术...
在验证码系统中,Servlet可以生成随机验证码字符串,存储到服务器端,同时创建对应的图像文件供JSP展示。 验证码通常由一组随机字符组成,这些字符可能包括字母、数字、特殊符号等。在生成验证码时,我们可以通过...