- 浏览: 173598 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (157)
- 心情故事 (2)
- SWT/JFACE/RCP (5)
- 数据库 持久层 (22)
- 程序开发的小常识 (17)
- 设计模式 (6)
- UML图 (1)
- 框架相关文章 (15)
- 消息服务 (3)
- javascript ajax jquery (12)
- servlet http 协议 (1)
- 中间件 服务器 JNDI (11)
- EJB (4)
- core JAVA jvm (17)
- 算法 算数 智力题 (5)
- 版本控制软件 (1)
- 软件下载 (15)
- quartz job (2)
- xml (2)
- 线程 (9)
- 英语专栏学习 (0)
- SWT/JFACE/RCdP (0)
- Unix (1)
- Maven (3)
- 第一段经历 (0)
- 第二段经历 (0)
- 第三段经历 (0)
- 第四段经历 (9)
- ide开发工具 (2)
- 浏览器兼容 (1)
- 技术的缺点总结 (1)
- 验证码 (1)
- 面试问题大全 (3)
- 第五段经历 (5)
- 趣味编程 (1)
最新评论
-
zhangwei8607:
哥,我来了
发表了这么多技术文章,为什么没人留言 -
aqqcat:
这个太骚了同志
proxy 的原理 -
dmwdmc:
...
9个球其中1个空心最多称2次得出空心球 -
kjmmlzq19851226:
9个球分三组为A、B、C,任意取其中两组进行第一次称重,两种情 ...
9个球其中1个空心最多称2次得出空心球 -
zhangwei8607:
:idea: 学习了
网银系统augcb申请信用卡ejb的应用
这个是验证码的开源框架 。
首先import SimpleCaptha jar .
然后web.xml
index.jsp
然后验证。。。
captchaSubmit.jsp
如果想扩展和详细了解,可以反编译jar看或者。
http://www.iteye.com/topic/790024
http://xiayingjie.iteye.com/blog/790038
如果想可以用加减简单运算验证。则可以扩展这个核心类。
配置文件web.xml
OcjCaptcha 为Captcha加了个
如果页面需要无提交页面就刷新验证码的话,可以使用更改src的方式来实现。不能用ajax实现。
首先import SimpleCaptha jar .
然后web.xml
引用
<servlet>
<servlet-name>StickyCaptcha</servlet-name>
<servlet-class>nl.captcha.servlet.SimpleCaptchaServlet</servlet-class>
<init-param>
<param-name>width</param-name>
<param-value>150</param-value>
</init-param>
<init-param>
<param-name>height</param-name>
<param-value>35</param-value>
</init-param>
<init-param>
<param-name>text</param-name>
<param-value>word:3,number:3</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>StickyCaptcha</servlet-name>
<url-pattern>/stickyImg</url-pattern>
</servlet-mapping>
<servlet-name>StickyCaptcha</servlet-name>
<servlet-class>nl.captcha.servlet.SimpleCaptchaServlet</servlet-class>
<init-param>
<param-name>width</param-name>
<param-value>150</param-value>
</init-param>
<init-param>
<param-name>height</param-name>
<param-value>35</param-value>
</init-param>
<init-param>
<param-name>text</param-name>
<param-value>word:3,number:3</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>StickyCaptcha</servlet-name>
<url-pattern>/stickyImg</url-pattern>
</servlet-mapping>
index.jsp
引用
<img src="/Validation/stickyImg" />
<form action="/Validation/captchaSubmit.jsp" method="post">
<input name="answer" />
<input type="submit" name="submit"/>
</form>
Validation工程名
<form action="/Validation/captchaSubmit.jsp" method="post">
<input name="answer" />
<input type="submit" name="submit"/>
</form>
然后验证。。。
captchaSubmit.jsp
引用
<%@ page import="nl.captcha.Captcha" %>
<%
nl.captcha.Captcha captcha = (nl.captcha.Captcha) session.getAttribute(Captcha.NAME);
request.setCharacterEncoding("UTF-8");
String answer = request.getParameter("answer");
if (captcha.isCorrect(answer)) { %>
<b>Correct!</b>
<% } %>
<%
nl.captcha.Captcha captcha = (nl.captcha.Captcha) session.getAttribute(Captcha.NAME);
request.setCharacterEncoding("UTF-8");
String answer = request.getParameter("answer");
if (captcha.isCorrect(answer)) { %>
<b>Correct!</b>
<% } %>
如果想扩展和详细了解,可以反编译jar看或者。
http://www.iteye.com/topic/790024
http://xiayingjie.iteye.com/blog/790038
如果想可以用加减简单运算验证。则可以扩展这个核心类。
package util; import java.awt.Color; import java.awt.Font; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import nl.captcha.backgrounds.GradiatedBackgroundProducer; import nl.captcha.gimpy.BlockGimpyRenderer; import nl.captcha.servlet.CaptchaServletUtil; import nl.captcha.text.producer.ChineseTextProducer; import nl.captcha.text.producer.DefaultTextProducer; import nl.captcha.text.renderer.DefaultWordRenderer; import nl.captcha.text.renderer.WordRenderer; public class CalculateCaptcha extends HttpServlet { private static final String PARAM_HEIGHT = "height"; // 高度 默认为50 private static final String PARAM_WIDTH = "width";// 宽度 默认为200 private static final String PAEAM_NOISE = "noise";// 干扰线条 默认是没有干扰线条 private static final String PAEAM_TEXT = "text";// 文本 private static final String PAEAM_CAL = "calculate";// 算数 protected int _width = 200; protected int _height = 50; protected boolean _noise = false; protected String _text = null; protected String _cal = "0"; @Override public void init() throws ServletException { if (getInitParameter(PARAM_HEIGHT) != null) { _height = Integer.valueOf(getInitParameter(PARAM_HEIGHT)); } if (getInitParameter(PARAM_WIDTH) != null) { _width = Integer.valueOf(getInitParameter(PARAM_WIDTH)); } if (getInitParameter(PAEAM_NOISE) != null) { _noise = Boolean.valueOf(getInitParameter(PAEAM_NOISE)); } if (getInitParameter(PAEAM_TEXT) != null) { _text = String.valueOf(getInitParameter(PAEAM_TEXT)); } if (getInitParameter(PAEAM_CAL) != null) { _cal = String.valueOf(getInitParameter(PAEAM_CAL)); } } @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { OcjCaptcha.Builder builder = new OcjCaptcha.Builder(_width, _height); // 增加边框 builder.addBorder(); // 是否增加干扰线条 if (_noise == true) builder.addNoise(); // ----------------自定义字体大小----------- // 自定义设置字体颜色和大小 最简单的效果 多种字体随机显示 List<Font> fontList = new ArrayList<Font>(); fontList.add(new Font("Courier", Font.BOLD, 40)); DefaultWordRenderer dwr = new DefaultWordRenderer(Color.green, fontList); WordRenderer wr = dwr; // 增加文本,默认为5个随机字符. if ("1".equals(_cal)) { char[] numbers = new char[] {'0','1', '2', '3', '4', '5', '6','7', '8' }; builder.addText(new DefaultTextProducer(1,numbers), wr); char[] operators = new char[] {'+','-'}; builder.addText(new DefaultTextProducer(1,operators), wr); builder.addText(new DefaultTextProducer(1,numbers), wr); }else if (_text != null){ String[] ts = _text.split(","); for (int i = 0; i < ts.length; i++) { String[] ts1 = ts[i].split(":"); if ("chinese".equals(ts1[0])) { builder.addText( new ChineseTextProducer(Integer.parseInt(ts1[1])), wr); } else if ("number".equals(ts1[0])) { // 这里没有0和1是为了避免歧义 和字母I和O char[] numberChar = new char[] {'0','1', '2', '3', '4', '5', '6', '7', '8' }; builder.addText( new DefaultTextProducer(Integer.parseInt(ts1[1]), numberChar), wr); } else if ("word".equals(ts1[0])) { // 原理同上 char[] numberChar = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'k', 'm', 'n', 'p', 'r', 'w', 'x', 'y' }; builder.addText( new DefaultTextProducer(Integer.parseInt(ts1[1]), numberChar), wr); }else { builder.addText( new DefaultTextProducer(Integer.parseInt(ts1[1])), wr); } } }else{ builder.addText(); } // 设置背景渐进效果 以及颜色 form为开始颜色,to为结束颜色 GradiatedBackgroundProducer gbp = new GradiatedBackgroundProducer(); gbp.setFromColor(Color.yellow); gbp.setToColor(Color.red); // 无渐进效果,只是填充背景颜色 builder.addBackground(gbp); builder.gimp(new BlockGimpyRenderer(1)); OcjCaptcha captcha = builder.build(); CaptchaServletUtil.writeImage(resp, captcha.getImage()); //如果算数支持. if("1".equals(_cal)){ String anstr=captcha.getAnswer(); String oper=anstr.indexOf('+')!=-1?"+":"-"; String anstrs[]=anstr.split(oper); Integer result =0; switch(oper){ case "+": result=Integer.parseInt(anstrs[0])+Integer.parseInt(anstrs[1]); break; case "-": result=Integer.parseInt(anstrs[0])-Integer.parseInt(anstrs[1]); break; } captcha.setAnswer(String.valueOf(result)); } req.getSession().setAttribute(OcjCaptcha.NAME, captcha); } }
配置文件web.xml
引用
<servlet>
<servlet-name>StickyCaptcha</servlet-name>
<servlet-class>util.CalculateCaptcha</servlet-class>
<init-param>
<param-name>width</param-name>
<param-value>100</param-value>
</init-param>
<init-param>
<param-name>height</param-name>
<param-value>35</param-value>
</init-param>
<init-param>
<param-name>text</param-name>
<param-value>word:0,number:0</param-value>
</init-param>
<init-param>
<param-name>calculate</param-name>
<param-value>1</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>StickyCaptcha</servlet-name>
<url-pattern>/stickyImg</url-pattern>
</servlet-mapping>
<servlet-name>StickyCaptcha</servlet-name>
<servlet-class>util.CalculateCaptcha</servlet-class>
<init-param>
<param-name>width</param-name>
<param-value>100</param-value>
</init-param>
<init-param>
<param-name>height</param-name>
<param-value>35</param-value>
</init-param>
<init-param>
<param-name>text</param-name>
<param-value>word:0,number:0</param-value>
</init-param>
<init-param>
<param-name>calculate</param-name>
<param-value>1</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>StickyCaptcha</servlet-name>
<url-pattern>/stickyImg</url-pattern>
</servlet-mapping>
OcjCaptcha 为Captcha加了个
public void setAnswer(String answer) { this._builder._answer = answer; }
如果页面需要无提交页面就刷新验证码的话,可以使用更改src的方式来实现。不能用ajax实现。
- SimpleCaptcha-1.1.1.jar (234.3 KB)
- 下载次数: 4
发表评论
-
Your Uninstaller
2014-11-14 15:16 611用于非商业用途 Your Uninstall ... -
apache
2014-03-05 08:44 615apache ........................ ... -
jxl
2014-02-11 00:21 659public static void createCSVF ... -
ssh client.
2013-10-31 09:34 400ssh client..~~~ -
jd gui 反编译
2013-09-20 13:04 407反编译。~ -
spring mvc接受页面json对象,处理后传出json到页面并输出
2013-09-04 15:35 6496JSON.stringify 必须要用,否则页面的json被s ... -
araxis merger 下载带注册码
2013-08-26 18:40 839下载啊啊啊啊啊啊 -
pl sql
2013-08-23 09:33 701PLSQL Developer V9 注册码 License ... -
搜索引擎gosn jar
2013-08-22 10:35 680goole 用的 -
spring form tld
2013-08-13 21:08 800spring form tld. -
jquery ajax fileupload.js 下载
2013-08-03 15:29 4634<script> $.ajax ... -
ecplise 3.3 或以上版本的 jad插件
2013-07-25 10:13 538放在plugin目录下。 -
ibm interveiw
2013-06-24 23:05 0hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh ... -
interview1
2013-06-14 08:19 0infosys...... -
作文雅思写作
2013-06-02 20:19 725发生的的法师法师飞 -
JAD 反编译
2010-06-29 17:25 800JAD JAD JAD
相关推荐
asp.net 四则混合运算验证码 asp.net 四则混合运算验证码 asp.net 四则混合运算验证码 asp.net 四则混合运算验证码 asp.net 四则混合运算验证码
"线性表设计100位以内的长整数加减运算的程序" 知识点一:链表的基本结构和操作方法 在设计一个100位以内的长整数加减运算的程序时,使用链表来表示长整数是一个不错的选择。链表的基本结构包括节点和指针,节点中...
能够实现逻辑运算(逻辑非、逻辑加、逻辑乘、逻辑异)、定点整数的单符号位补码加减运算、定点整数的原码一位乘法运算和浮点数的加减运算。
本资源主要讲解计算机组成原理中的补码加减运算器,包括加法器原理、补码加减运算和无符号数的加减运算。 一、加法器原理 加法器是一种基本的数字电路,可以实现两个n位二进制数的相加运算。加法器的输入包括两个n...
由于提供的文件信息中标题和描述都是相同的,都表明了这是一份针对五年级下册学生的分数加减混合运算综合练习题。这份文件属于教学资源,对于学生掌握分数加减法以及混合运算的相关知识点具有重要作用。根据提供的...
用于汇编语言中的加法和减法。通过减法可以得到正负值,及绝对值。
加减法验证码通常包含两个或更多的数字,通过加法或减法运算得出一个答案,用户需要填写这个答案以验证其身份。在自动化或机器学习的场景下,我们需要编写程序自动识别这些数字并计算结果。 首先,我们需要加载...
6. 加减混合运算口算题的类型:加减混合运算口算题可以分为不同的类型,例如加减混合运算口算题、加减混合运算口算题、加减混合运算口算题等等。 7. 一年级加减混合运算口算题的练习方法:一年级学生学习加减混合...
"一年级100以内加减混合运算练习600题-1年级加减法混合运算.pdf" 通过分析给定的文件信息,我们可以总结出以下知识点: 1. 加减混合运算:文件标题和描述中都提到了“加减混合运算”,表明该文件的主要内容是关于...
《小学加减乘除运算测试》是一个基于JavaScript开发的在线教育工具,主要针对小学生进行数学基础知识的练习,尤其是加减乘除的运算。这个应用程序旨在通过互动的方式帮助孩子们巩固数学运算技能,提升学习兴趣。 ...
本项目主要关注大整数的加减乘除运算的实现,这涉及到数据结构和算法的设计。以下是对这个课程设计项目的详细解读。 首先,我们要理解大整数的概念。在常规的计算机编程中,整数的大小受到数据类型限制,例如,int...
标题和描述中提到的“二年级100以内加减混合运算练习1000题.pdf”指的是一份面向二年级学生的数学练习册,涵盖了100以内的加法和减法混合运算。尽管描述中提到的“技术”标签可能暗示这份文件是通过某种技术手段生成...
新人教七年级数学有理数的加减乘除乘方混合运算PPT课件 以下是关于新人教七年级数学有理数的加减乘除乘方混合运算PPT课件的详细知识点: 一、有理数的混合运算顺序 在进行有理数的混合运算时,需要遵守一定的顺序...
实现任意大整数的加减运算! input(&num1, &num2); num3= sum(&num1, &num2); output(&num1); if(num2.flag==0) printf("%c", '+'); else printf("%c", '-'); output(&num2); printf("= "); if(num3....
在加减运算中,需要对齐尾数的小数点,处理阶码的差异,并考虑下溢(underflow)和上溢(overflow)。下溢发生在两个非常接近的负数相加得到一个较小的负数,但超出了可表示的最小值;上溢则发生在两个较大数值相加...
这些题目涵盖了多个数学知识点,主要涉及有理数的混合运算和整式的加减运算,以及代数式的化简和求值。以下是对这些知识点的详细解释: 1. **有理数混合运算**:包括加、减、乘、除以及括号的使用。例如题目中的...
"五年级小数加减乘除混合运算计算题练习题集" 本资源是五年级小学生混合运算计算题练习题集,旨在帮助学生巩固小数的加减乘除混合运算能力。该练习题集涵盖了小数的加减乘除混合运算、解方程和使用简便方法计算的...
3. **运算逻辑**:实现基本的加减乘除运算,对于加减法,可以逐位进行;乘法和除法则需要更复杂的算法,例如二进制移位和逐位相加/减。 4. **显示驱动**:将运算结果显示在数码管上,需要配置P0、P1等端口作为数码管...