以下使用struts2.3.4生成的图片验证码的代码(生成验证大码的代码来源于网络):
1.Action中的代码,主要是 createImage 方法。
package com.buy.user;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import com.opensymphony.xwork2.ActionContext;
public class UserAction {
private ByteArrayInputStream inputStream;
public ByteArrayInputStream getInputStream() {
return inputStream;
}
public void setInputStream(ByteArrayInputStream inputStream) {
this.inputStream = inputStream;
}
public String add(){
return "success";
}
/**
* 生成随机颜色
* @param fc 前景色
* @param bc 背景色
* @return Color对象,此Color对象是RGB形式的。
*/
private 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 String createImage() {
// 在内存中创建图象
int width=85, height=20;
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(0, 0, width, height);
// 设定字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;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);
}
// 取随机产生的认证码(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
ActionContext.getContext().getSession().put("rand",sRand);
// 图象生效
g.dispose();
ByteArrayOutputStream output = new ByteArrayOutputStream();
ImageOutputStream imageOut = null;
try {
imageOut = ImageIO.createImageOutputStream(output);
ImageIO.write(image, "JPEG", imageOut);
imageOut.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray());
this.setInputStream(input);
return "success";
}
public String validate(){
String strv = (String)ActionContext.getContext().getSession().get("rand");//获取图片的验证码
System.out.println("strv = " + strv);//在这里可以验证手动输入的验证与图片的验证是否相同
return "success";
}
}
2. struts.xml中的配置如下。
<action name="getValidateImage" class="com.buy.user.UserAction" method="createImage">
<result type="stream">
<param name="contentType">image/jpeg</param>
<param name="inputName">inputStream</param>
</result>
</action>
3. jsp 页面中应如下调用
<label class="img">
<img style="cursor:pointer;width:100px;height:26px;" alt="" onclick="changeValidateCode(this)" ver_colorofnoisepoint="#888888" id="JD_Verification1" src="getValidateImage.action">
</label>
<label class="ftx23">
看不清?<a href="javascript:void(0)" onclick="changeValidateCode(this)" class="flk13">换一张</a>
</label>
javascript的代码如下:
function changeValidateCode(obj) {
//这和浏览器的缓存机制有关系,也可以把页面设置为不缓存,这样就不用这个参数了。"nocache="+new Date().getTime()
document.getElementById("JD_Verification1").src=document.getElementById("JD_Verification1").src + "?nocache="+new Date().getTime();
}
4. 提交按钮的jsp页面代码,xml配置 ,javascript代码.(也就是验证手动输入验证码是否正确)
<form name="testff" id="formpersonal21" action="test.do" method="post" onclick="check()" >
<input type="button" value="同意以下协议,提交" >
</form>
function check(){
document.getElementById("formpersonal21").submit();
return true;
}
<action name="test" class="com.buy.user.UserAction" method="validate">
<result>test.jsp</result>
</action>
分享到:
相关推荐
Struts2.3.4包下载
这是很全乎的一分struts2.3.4.1版本的API,而且是chm格式。 方便阅读和查询。
在编程世界中,`structs` 是一个非常重要的概念,特别是在 C 和 C++ 这样的编程语言中。...希望这个详尽的 structs 学习笔记能帮助初学者更好地掌握这一关键概念。欢迎大家补充和完善,一起提升我们的编程技能。
Struts2.3.4.1_API帮助文档(Structs2最新API帮助文档)大部分中文解说
Structs2验证码是一种基于Structs2框架开发的验证码生成系统,它主要应用于Web应用程序中,以增强安全性,防止恶意自动化的机器人或者爬虫程序进行非法操作。Structs2是Struts2的一个版本,是一个广泛使用的Java Web...
Go语言学习笔记.pdf 共174页是一本关于Go语言的详细学习笔记,涵盖了Go语言的基础知识、函数、数组、Maps、Structs、接口、并发、程序结构、标准库等方面的内容。本笔记共分为三大部分:Go语言基础、标准库和扩展库...
3. **CSS和JS**:在验证码的实现中,CSS用于美化验证码图片周围的元素,例如,可以设置边框、背景色、文字样式等。JavaScript则可以用于处理与验证码相关的交互,例如,点击刷新验证码按钮时更新验证码图片,或者在...
根据提供的文件内容,以下是对Go语言学习笔记的详细知识点阐述。 Go语言是Google开发的一种静态类型、编译型、并发型,并具有垃圾回收功能的编程语言。它由Robert Griesemer、Rob Pike和Ken Thompson于2007年9月...
3. 函数参数:Structs可以作为函数参数传递,使得一次传递多个变量成为可能。 4. 枚举(Enum)扩展:在某些语言中,如C#,可以基于Structs创建枚举类型,这为枚举提供了更丰富的功能。 了解了Structs的基本概念后,...
structs2很详细的学习笔记,structs2的建造,工作原理,例子,逐步讲解,纯文字的
Structs2.0 是一款基于Java的开源MVC框架,它是Struts 1.x的升级版,提供了更强大和灵活的功能。本篇文章将深入探讨Structs2.0的基础知识,特别是其对OGNL(Object-Graph Navigation Language)的集成和使用。 首先...
struts-2.3.4版本中所有的Jar包文件,配置最基础的structs2所需的6个必须的jar文件为: commons-fileupload-1.2.2.jar commons-logging-1.1.1.jar freemarker-2.3.19.jar ognl-3.0.5.jar struts2-core-2.3.4.jar ...
此“STRUCTS学习文档”提供了对Structs2框架全面而深入的了解,非常适合初学者和有经验的开发者。 首先,Structs2的核心概念之一是Action,它是处理用户请求的中心组件。每个Action都对应于特定的业务逻辑,并通过...
Structs2是一个流行的Java框架,主要用于构建Web应用和服务。它提供了强大的MVC(Model-View-Controller)架构支持,使得开发者能够更高效地组织和管理代码。"structs2基本jar包"是Structs2框架的核心组件,包含了...
学习Structs2时,笔记部分通常会涵盖以下几个关键知识点: 1. **配置文件**:Structs2的配置文件主要包括struts.xml,这是整个应用的核心配置,用于定义Action、结果类型、拦截器等。通过配置文件,我们可以指定...
### Java + Struts 快速学习指南 #### Struts Logic 标签库详解 Struts Logic 标签库是Struts框架中一个非常重要的组成部分,它提供了一系列逻辑控制标签,帮助开发者更容易地实现复杂的业务逻辑处理。下面我们将...
2012年最新版本的Struts2.3.4帮助文档
### Struts2学习宝典知识点概述 #### 一、Struts2简介 - **起源与发展**:Struts2起源于WebWork2,并在发展过程中与Struts社区合并,形成了当前的Struts2框架。官方网址为[http://struts.apache.org/]...