第一步:首先写一个继承dispatchAction的类,用于产生验证码。

package userlogin;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

public class ValidateCodeAction extends DispatchAction{
 public ActionForward getCode(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception{
     HttpSession session = request.getSession();
     int codeLength = 6;// 验证码长度
     int mixTimes = 150;// 模糊程度参数
     Color bgColor = getRandColor(200, 250);// 背景颜色
     Color bfColor = new Color(0, 0, 0);// 字体颜色
     boolean ifRandomColor = true;// 单个字符是否颜色随机
     boolean ifMixColor = true;// 模糊线是否颜色随机
    
     // 设置页面不缓存
     response.setHeader("Pragma", "No-cache");
     response.setHeader("Cache-Control", "no-cache");
     response.setDateHeader("Expires", 0);
     // 在内存中创建图象
     int width = 13 * codeLength + 6, height = 20;
     BufferedImage image = new BufferedImage(width, height,
       BufferedImage.TYPE_INT_RGB);
     // 获取图形上下文
     Graphics g = image.getGraphics();
     // 设定背景色
     g.setColor(bgColor);
     g.fillRect(0, 0, width, height);
     // 设定字体
     g.setFont(new Font("Arail", Font.ITALIC, 20));
     // 画边框
     g.setColor(new Color(33, 66, 99));
     g.drawRect(120, 100, width - 1, height - 1);
    
     g.setColor(getRandColor(160, 200));
  // 随机产生干扰线,使图象中的认证码不易被其它程序探测到
     for (int i = 0; i < mixTimes * codeLength / 10; i++) {
      if (ifMixColor) {
       g.setColor(getRandColor(160, 200));
      }
      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);
     }
     // 取随机产生的认证码(4位数字)
    
  // 向图片中输出数字和字母
         Random  r=new Random();

char[] ch = "abcdefghijklmnopqrstyvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();

int index, len = ch.length;
        String sRand = "";
        for (int i = 0; i < codeLength; i ++) {

index = r.nextInt(len);
  
      String rand =String.valueOf(ch[index]);
      sRand += rand;
      // 将认证码显示到图象中
      if (ifRandomColor)
       g.setColor(getRandColor(20, 110, 0));
      else
       g.setColor(bfColor);
      // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
      g.drawString(rand, 13 * i + 6, 16);
     }
     // 将认证码存入SESSION
     // 图象生效
     session.setAttribute("rand",sRand);
     g.dispose();
     // 输出图象到页面
     ImageIO.write(image, "PNG", response.getOutputStream());
  return null;
 }
 
 private static Random random = new Random();

private Color getRandColor(int fc, int bc) {
    return getRandColor(fc, bc, fc);
 }

private Color getRandColor(int fc, int bc, int interval) {
    if (fc > 255) {
     fc = 255;
    }
    if (bc > 255) {
     bc = 255;
    }
    int r = fc + random.nextInt(bc - interval);
    int g = fc + random.nextInt(bc - interval);
    int b = fc + random.nextInt(bc - interval);
    return new Color(r, g, b);
 }
}

第二步:在jsp的表单中调用(<html:form>):

<tr>
      <td align="left" valign="middle">
      <html:img page="/ValidateCode.do?method=getCode" paramName="imgValidate" border="0" 
         οnclick="reload(this)"
         style="cursor:pointer" /></td>
     </tr>

第三步:在jsp页面中写一个刷新的js事件:

function reload(obj){
     var timenow = new Date().getTime();
     obj.src="${pageContext.request.contextPath}/ValidateCode.do?method=getCode&id="+timenow;
   }

结果如此:

在struts中实现验证码相关推荐

  1. java web中 生成图片验证码,转自逍遥郎

    javaWeb中图片验证码的生成 废话不多说,直接进入主题,javaWeb中生成验证码并在jsp上显示,我这里是用的Struts2,所以分为三步,第一,写Action,第二,写Struts.xml,第 ...

  2. 辛星php函数,辛星和您用更简略的方式去实现PHP中的验证码

    辛星和您用更简单的方式去实现PHP中的验证码 说实话,提到验证码我想大家都不会陌生,确实,验证码还是挺常见的,现在搜索一下PHP的验证码类简直是海量的数据,那我们今天就来实现一个自己的验证码把,不过它 ...

  3. struts中简单的校验

    Struts中简单的校验 "计应134(实验班) 凌豪" Struts2校验简要说明:struts2中通常情况下,类型转换要在数据校验之前进行.类型转换其实也是基本的服务器端校验, ...

  4. tp中php验证码程序,thinkPHP 验证码生成与验证

    您现在的位置是:网站首页>>PHP>>thinkPHP thinkPHP 验证码生成与验证 发布时间:2018-12-06 13:34:11作者:wangjian浏览量:842 ...

  5. Struts 中的自定义异常

    在struts 中要想自定义异常,首先我们要写一个普通的java类来继承RuntimeException如下所示: package exception; public class MyExceptio ...

  6. Django中示例验证码的实现总结

    验证码 在用户注册.登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻业务服务器.数据库服务器的压力. 1)安装包Pillow3.4.1. 1 pip inst ...

  7. 论坛中的验证码的作用

    论坛中的验证码的作用 因为你的WEB站有时会碰到客户机恶意攻击,其中一种很常见的攻击手段就是 身份欺骗_它通过 在客户端脚 本写入一些代码,然后利用其,客户机在网站,论坛反复登陆,或者攻击者创建一个H ...

  8. 83.Django项目中使用验证码

    1. 概述 ​ 验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apar ...

  9. struts中的javascript - seinbar的专栏

    上一篇文章中介绍校验时提到客户边的校验用到了JavaScript,实际上用Struts配合JavaScript还可以实现许多有用的功能,比如,级联下拉菜单的实现就是一个典型的例子: 本例假设要实现的是 ...

  10. struts中的redirect=true与redirect=false

    struts中的redirect="true"与redirect="false" struts中的redirect="true"与redir ...

最新文章

  1. 如何设置REUSE_ALV_GRID_DISPLAY'的单个单元格的是否可以输入
  2. matlab arima模型定阶,ARIMA模型预测问题
  3. html css 前端实现消息提醒数_自学的福音,web前端学习全套视频教程+最新学习思维导图都在这里...
  4. Flask-DebugToolbar的配置
  5. 二维数组最大连通子数组之和
  6. 『自定义View实战』—— 仿ios图标下载view DownloadLoadingView
  7. AjaxPro实现方法
  8. 公众号题库搜题对接(提供免费接口)
  9. 计算机论文要多少字,期刊论文一般多少字
  10. 热插拔技术详解(上)
  11. 小程序调取相机照片添加水印(时间水印)
  12. Mybatis报错Could not find resource mybatis.xml
  13. python怎样安装whl文件
  14. 【图像生成Metrics】快速计算FID、KID、IS、PPL
  15. 在cmd下import cv2报错——OpenCV实现BRISK
  16. php线下支付,Paypal线下支付模块,附下载地址_PHP教程
  17. python字典相同键合并_在Python中用相同的键合并两个字典
  18. 强调实体融合的当下,元宇宙当仁不让地成为各色玩家关注的焦点
  19. 距离元旦还有多少天-----电子时钟
  20. 2022-2028全球与中国食品饮料包装透明沉积膜市场现状及未来发展趋势

热门文章

  1. 阿里云云计算 23 VPC的基础架构
  2. 凸优化第五章对偶 5.5最优性条件
  3. Dropout浅层理解
  4. 分类战车SVM全系列
  5. 李航《统计学习方法》多项式函数拟合问题--最小二乘法
  6. 概率图模型(PGM)学习笔记(一)动机与概述
  7. 【文献阅读笔记】(1):一篇手把手教你做GWAS的Guideline文献解读
  8. 【 Educational Codeforces Round 71 (Rated for Div. 2) F】Remainder Problem【分块】
  9. 【2019南昌邀请赛网络赛 B Greedy HOUHOU BZOJ 2957 楼房重建】线段树+二分
  10. DLLPasswordFilterImplant:DLL密码过滤器