第一步:编写验证码的Action

 1 package com;
 2
 3 import java.awt.Color;
 4 import java.awt.Font;
 5 import java.awt.Graphics;
 6 import java.awt.image.BufferedImage;
 7 import java.util.Random;
 8
 9 import javax.imageio.ImageIO;
10 import javax.servlet.ServletOutputStream;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13 import javax.servlet.http.HttpSession;
14
15 import org.apache.commons.lang.RandomStringUtils;
16 import org.apache.struts2.ServletActionContext;
17 public class AuthCodeAction {
18     private HttpServletResponse response = ServletActionContext.getResponse();
19     private HttpServletRequest request = ServletActionContext.getRequest();
20
21     public String execute() {
22         try {
23             int width = 50;
24             int height = 18;
25             // 取得一个4位随机字母数字字符串
26             String s = RandomStringUtils.random(4, true, true);
27
28             // 保存入session,用于与用户的输入进行比较.
29             // 注意比较完之后清除session.
30             HttpSession session = request.getSession(true);
31             session.setAttribute("authCode", s);
32
33             response.setContentType("images/jpeg");
34             response.setHeader("Pragma", "No-cache");
35             response.setHeader("Cache-Control", "no-cache");
36             response.setDateHeader("Expires", 0);
37
38             ServletOutputStream out = response.getOutputStream();
39             BufferedImage image = new BufferedImage(width, height,
40                     BufferedImage.TYPE_INT_RGB);
41             Graphics g = image.getGraphics();
42             // 设定背景色
43             g.setColor(getRandColor(200, 250));
44             g.fillRect(0, 0, width, height);
45
46             // 设定字体
47             Font mFont = new Font("Times New Roman", Font.BOLD, 18);// 设置字体
48             g.setFont(mFont);
49
50             // 画边框
51             // g.setColor(Color.BLACK);
52             // g.drawRect(0, 0, width - 1, height - 1);
53
54             // 随机产生干扰线,使图象中的认证码不易被其它程序探测到
55             g.setColor(getRandColor(160, 200));
56             // 生成随机类
57             Random random = new Random();
58             for (int i = 0; i < 155; i++) {
59                 int x2 = random.nextInt(width);
60                 int y2 = random.nextInt(height);
61                 int x3 = random.nextInt(12);
62                 int y3 = random.nextInt(12);
63                 g.drawLine(x2, y2, x2 + x3, y2 + y3);
64             }
65
66             // 将认证码显示到图象中
67             g.setColor(new Color(20 + random.nextInt(110), 20 + random
68                     .nextInt(110), 20 + random.nextInt(110)));
69
70             g.drawString(s, 2, 16);
71
72             // 图象生效
73             g.dispose();
74             // 输出图象到页面
75             ImageIO.write((BufferedImage) image, "JPEG", out);
76             out.close();
77         } catch (Exception e) {
78             e.printStackTrace();
79         }
80         return null;
81     }
82
83     private Color getRandColor(int fc, int bc) { // 给定范围获得随机颜色
84         Random random = new Random();
85         if (fc > 255)
86             fc = 255;
87         if (bc > 255)
88             bc = 255;
89         int r = fc + random.nextInt(bc - fc);
90         int g = fc + random.nextInt(bc - fc);
91         int b = fc + random.nextInt(bc - fc);
92         return new Color(r, g, b);
93     }
94 }

第二步:配置action

<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts><package name="test" namespace="/test" extends="struts-default"><action name="authCode" class="com.AuthCodeAction" method="execute"></action></package>
</struts>

第三步:编写jsp页面(采用jquery实现动态刷新)

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>验证码</title><script type="text/javascript" src="js/jquery-1.6.2.min.js"></script><script type="text/javascript">function changeImg(){     $("#authCode").attr("src","test/authCode.action?d="+new Date().valueOf());     }    </script></head><body><center><br><img src="test/authCode.action" alt="验证码" id="authCode" οnclick="changeImg()"> <a href="#" οnclick="changeImg()">看不清,换一张!</a> </center></body>
</html>

java验证码(采用struts2实现)转相关推荐

  1. java 验证码透明背景_Java中的证书透明度验证

    java 验证码透明背景 因此,我有一个幼稚的想法,即除了证书有效性检查(在Java中)之外,将证书透明性验证作为每个请求的一部分也很容易. 牺牲了整个周末的一半时间,我可以证明这并不是一件小事. 但 ...

  2. java 验证码生成和验证

    1.java 验证码生成与校验原理: 后台生辰验证码图片,将图片传到前台: 后台在session中保存验证码内容: 前台输入验证码后传到后台在后台取出session保存的验证码进行校验. 2.图片生成 ...

  3. java 验证码_java实现简单的验证码功能

    最近要做一个网站,要求实现验证码程序,经过不断调试,终于成功实现功能. 一.验证码生成类 生成验证码的话需要用到java的Graphics类库,画出一个验证码 废话不多说,直接上代码 package ...

  4. java 验证码旋转,java实现动态验证码

    java动态实现验证码,供大家参考,具体内容如下 [实现效果] 点击图片或者文字可以更换验证码 验证码随机生成,由大小写字母和数字组成 验证码字体颜色随机生成,字母角度有偏转 干扰线随机分布 在这里插 ...

  5. Java验证码jar包ValidateCode.jar的使用(附百度网盘下载)

    Java验证码jar包ValidateCode.jar的使用(附百度网盘下载地址) 在项目中我们会经常用写图片验证码这个功能.但是自己去封装也挺繁琐的,这里提供给各位小伙伴一个很好用的生成图片验证码的 ...

  6. java验证码识别库

    java验证码识别库 使用J4L识别验证码 使用 Tess4J 进行 OCR 识别 使用J4L识别验证码 将解压文件下bits64目录的三个文件 liblept168.dll tess3Wrapper ...

  7. java验证码效果,和图片缩略效果

    java验证码效果,和图片缩略效果 效果图:验证码 效果图:缩略 这两个效果我做在了一个类里面,可以进行调用,直接上代码 注:要是复制粘贴此代码,需要更改自己所使用的字体,也可以用我这个字体,记得更改 ...

  8. 【Java EE (Struts2 + Spring + Hibernate)开发】:Struts2(二)之【拦截器机制】

    [Java EE (Struts2 + Spring + Hibernate)开发]:Struts2(二)之[拦截器机制] 本文地址:http://blog.csdn.net/shanglianlm/ ...

  9. java 生成图片验证码结合struts2使用

    验证码生成器类 package com.itest.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...

最新文章

  1. Python使用matplotlib可视化散点图、使用seaborn中的lmplot函数使用多子图可视化不同分组的散点图最优拟合线性回归曲线
  2. 脑电图伪迹去除方法汇总
  3. 解决python安装第三方库速度很慢的问题(opencv为例)
  4. Linux 命令之 tail -- 在屏幕上显示指定文件的末尾若干行/显示文件尾部内容/查看文件尾部内容
  5. Android堆栈分析
  6. 标记三维点_便携式3D扫描仪全自动三坐标测量机三维扫描设计扫描测量摄影
  7. javascript中定时器interval的使用
  8. 常见移动机器人运动学模型总结(图片版)
  9. java 编译开关_Java开关盒字符串
  10. Win10技巧:如何确定电脑是否适用Hyper-V虚拟机?
  11. 理解Linux高性能网络架构的那些事
  12. halcon手眼标定
  13. vdbench数据校验翻译
  14. IDA Pro、OllyDbg、LordPE和UltraEdit简单实用实验
  15. 热血传奇GOM引擎问题集锦
  16. 基于ArcScene简单实验操作
  17. Animated之基础篇-概述
  18. 【渲染管线】关于透明度混合blend
  19. iOS 支付 [支付宝 银联 微信]
  20. jmeter之取样器(HTTP请求、调试取样器)

热门文章

  1. 【通知】3月当当购书大额优惠券赠送,仅限今明两天
  2. 【知识星球】softmax损失相关的小问题
  3. 全球及中国数字内容产业运行现状调研与盈利前景分析报告2022年
  4. 全球及中国水牛奶市场销售份额与投资盈利前景分析报告2022版
  5. 中国商业智能(BI)市场发展趋势及未来投资潜力评估报告2022-2028年版
  6. 功能性平台创新-农业大健康·杨建国:谋定都江堰精华灌区
  7. 使用 PHPMAILER 发送邮件实例
  8. Go 变量及基本数据类型2
  9. JavaScript 正则表达式
  10. MySQL数据库基本的“增删改查”操作 -《狗嗨默示录》-