`
zxsqi
  • 浏览: 28126 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

structs2.3.4 学习笔记(3) 生成图片验证码

阅读更多

以下使用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">
      &nbsp;看不清?<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包下载

    struts 2.3.4_API

    这是很全乎的一分struts2.3.4.1版本的API,而且是chm格式。 方便阅读和查询。

    structs学习笔记(很详细,欢迎补充)

    在编程世界中,`structs` 是一个非常重要的概念,特别是在 C 和 C++ 这样的编程语言中。...希望这个详尽的 structs 学习笔记能帮助初学者更好地掌握这一关键概念。欢迎大家补充和完善,一起提升我们的编程技能。

    Struts2.3.4.1_API帮助文档(Structs2最新API中文、英文帮助文档)

    Struts2.3.4.1_API帮助文档(Structs2最新API帮助文档)大部分中文解说

    Structs2验证码

    Structs2验证码是一种基于Structs2框架开发的验证码生成系统,它主要应用于Web应用程序中,以增强安全性,防止恶意自动化的机器人或者爬虫程序进行非法操作。Structs2是Struts2的一个版本,是一个广泛使用的Java Web...

    Go语言学习笔记.pdf 共174页

    Go语言学习笔记.pdf 共174页是一本关于Go语言的详细学习笔记,涵盖了Go语言的基础知识、函数、数组、Maps、Structs、接口、并发、程序结构、标准库等方面的内容。本笔记共分为三大部分:Go语言基础、标准库和扩展库...

    struts2 验证码----web界面生成几种常见的验证码

    3. **CSS和JS**:在验证码的实现中,CSS用于美化验证码图片周围的元素,例如,可以设置边框、背景色、文字样式等。JavaScript则可以用于处理与验证码相关的交互,例如,点击刷新验证码按钮时更新验证码图片,或者在...

    Go 学习笔记 高清

    根据提供的文件内容,以下是对Go语言学习笔记的详细知识点阐述。 Go语言是Google开发的一种静态类型、编译型、并发型,并具有垃圾回收功能的编程语言。它由Robert Griesemer、Rob Pike和Ken Thompson于2007年9月...

    Structs学习Structs学习Structs学习

    3. 函数参数:Structs可以作为函数参数传递,使得一次传递多个变量成为可能。 4. 枚举(Enum)扩展:在某些语言中,如C#,可以基于Structs创建枚举类型,这为枚举提供了更丰富的功能。 了解了Structs的基本概念后,...

    struts2学习笔记(详细文字)

    structs2很详细的学习笔记,structs2的建造,工作原理,例子,逐步讲解,纯文字的

    Structs2.0入门学习

    Structs2.0 是一款基于Java的开源MVC框架,它是Struts 1.x的升级版,提供了更强大和灵活的功能。本篇文章将深入探讨Structs2.0的基础知识,特别是其对OGNL(Object-Graph Navigation Language)的集成和使用。 首先...

    struts-2.3.4所有Jar包文件

    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学习文档

    此“STRUCTS学习文档”提供了对Structs2框架全面而深入的了解,非常适合初学者和有经验的开发者。 首先,Structs2的核心概念之一是Action,它是处理用户请求的中心组件。每个Action都对应于特定的业务逻辑,并通过...

    structs2基本jar包

    Structs2是一个流行的Java框架,主要用于构建Web应用和服务。它提供了强大的MVC(Model-View-Controller)架构支持,使得开发者能够更高效地组织和管理代码。"structs2基本jar包"是Structs2框架的核心组件,包含了...

    Structs2框架2016学习资料

    学习Structs2时,笔记部分通常会涵盖以下几个关键知识点: 1. **配置文件**:Structs2的配置文件主要包括struts.xml,这是整个应用的核心配置,用于定义Action、结果类型、拦截器等。通过配置文件,我们可以指定...

    Java+structs快速学习指南

    ### Java + Struts 快速学习指南 #### Struts Logic 标签库详解 Struts Logic 标签库是Struts框架中一个非常重要的组成部分,它提供了一系列逻辑控制标签,帮助开发者更容易地实现复杂的业务逻辑处理。下面我们将...

    最新版本Struts2.3.4帮助文档

    2012年最新版本的Struts2.3.4帮助文档

    Structs2学习宝典.doc

    ### Struts2学习宝典知识点概述 #### 一、Struts2简介 - **起源与发展**:Struts2起源于WebWork2,并在发展过程中与Struts社区合并,形成了当前的Struts2框架。官方网址为[http://struts.apache.org/]...

Global site tag (gtag.js) - Google Analytics