- 浏览: 177104 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (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 633用于非商业用途 Your Uninstall ... -
apache
2014-03-05 08:44 666apache ........................ ... -
jxl
2014-02-11 00:21 670public static void createCSVF ... -
ssh client.
2013-10-31 09:34 416ssh client..~~~ -
jd gui 反编译
2013-09-20 13:04 450反编译。~ -
spring mvc接受页面json对象,处理后传出json到页面并输出
2013-09-04 15:35 6507JSON.stringify 必须要用,否则页面的json被s ... -
araxis merger 下载带注册码
2013-08-26 18:40 850下载啊啊啊啊啊啊 -
pl sql
2013-08-23 09:33 758PLSQL Developer V9 注册码 License ... -
搜索引擎gosn jar
2013-08-22 10:35 719goole 用的 -
spring form tld
2013-08-13 21:08 851spring form tld. -
jquery ajax fileupload.js 下载
2013-08-03 15:29 4674<script> $.ajax ... -
ecplise 3.3 或以上版本的 jad插件
2013-07-25 10:13 568放在plugin目录下。 -
ibm interveiw
2013-06-24 23:05 0hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh ... -
interview1
2013-06-14 08:19 0infosys...... -
作文雅思写作
2013-06-02 20:19 743发生的的法师法师飞 -
JAD 反编译
2010-06-29 17:25 842JAD JAD JAD
相关推荐
"线性表设计100位以内的长整数加减运算的程序" 知识点一:链表的基本结构和操作方法 在设计一个100位以内的长整数加减运算的程序时,使用链表来表示长整数是一个不错的选择。链表的基本结构包括节点和指针,节点中...
能够实现逻辑运算(逻辑非、逻辑加、逻辑乘、逻辑异)、定点整数的单符号位补码加减运算、定点整数的原码一位乘法运算和浮点数的加减运算。
在探讨计算机组成原理时,补码加减运算器是一个不可忽视的重要组成部分。它不仅涉及基本的加法器原理,还包括了补码加减运算和无符号数的加减运算,这些知识是构建计算机数字电路设计的基础。在这篇文章中,我们将...
用于汇编语言中的加法和减法。通过减法可以得到正负值,及绝对值。
《小学加减乘除运算测试》是一个基于JavaScript开发的在线教育工具,主要针对小学生进行数学基础知识的练习,尤其是加减乘除的运算。这个应用程序旨在通过互动的方式帮助孩子们巩固数学运算技能,提升学习兴趣。 ...
标题和描述中提到的“二年级100以内加减混合运算练习1000题.pdf”指的是一份面向二年级学生的数学练习册,涵盖了100以内的加法和减法混合运算。尽管描述中提到的“技术”标签可能暗示这份文件是通过某种技术手段生成...
新人教七年级数学有理数的加减乘除乘方混合运算PPT课件 以下是关于新人教七年级数学有理数的加减乘除乘方混合运算PPT课件的详细知识点: 一、有理数的混合运算顺序 在进行有理数的混合运算时,需要遵守一定的顺序...
在加减运算中,需要对齐尾数的小数点,处理阶码的差异,并考虑下溢(underflow)和上溢(overflow)。下溢发生在两个非常接近的负数相加得到一个较小的负数,但超出了可表示的最小值;上溢则发生在两个较大数值相加...
实现任意大整数的加减运算! input(&num1, &num2); num3= sum(&num1, &num2); output(&num1); if(num2.flag==0) printf("%c", '+'); else printf("%c", '-'); output(&num2); printf("= "); if(num3....
这些题目涵盖了多个数学知识点,主要涉及有理数的混合运算和整式的加减运算,以及代数式的化简和求值。以下是对这些知识点的详细解释: 1. **有理数混合运算**:包括加、减、乘、除以及括号的使用。例如题目中的...
本项目“java实现10以内的加减乘验证码”是一个基于MyEclipse的Web应用,设计用于生成包含10以内数字的加减乘算术问题作为验证码。这样的验证码增加了破解的难度,因为机器人需要解决数学问题,而不仅仅是识别图像。...
3. **运算逻辑**:实现基本的加减乘除运算,对于加减法,可以逐位进行;乘法和除法则需要更复杂的算法,例如二进制移位和逐位相加/减。 4. **显示驱动**:将运算结果显示在数码管上,需要配置P0、P1等端口作为数码管...
学生在小学时期已经熟悉了整数的加减运算,并理解了正负数的基本概念。进入初中后,有理数的加减法对小学知识进行了延伸。这一阶段,学生不仅要学习有理数的概念,还要掌握正负数的加减。正负数的加减法是对小学数学...
以上就是大整数加减乘除运算的基本原理和实现方法,实际应用中还需结合特定的编程语言和库,例如Python的`decimal`模块、Java的`BigInteger`类等,它们提供了封装好的大整数操作接口,方便开发者使用。
"任意大数的加减运算器"是一个专门处理大数运算的程序或库,它能够处理超过普通整型变量所能表示的最大数值。下面将详细讨论大数运算的基本概念、实现方法以及相关技术。 首先,我们要理解什么是大数。在大多数编程...
4岁以前的幼儿一般还不能进行加减运算,4岁后开始借助动作操作实物,5岁后能用表象进行运算,5岁半以后,幼儿开始理解和运用数的组成,并能解决更复杂的加减问题。 幼儿学习加减运算的特点包括:减法相对于加法更难...
在中学数学教育中,整式的加减运算是数学教学的基础...通过“秋七上数学整式的加减运算教学PPT教案”的学习,学生能够在教师的指导下,逐步深入理解和掌握整式加减运算,从而提高自己的运算能力和解决实际问题的能力。
在本示例中,我们探讨的是一个特别设计的验证码,它结合了基本的加减法运算,增加了破解的难度,因为自动化程序需要能够理解并执行这些计算。 验证码的核心在于其随机性,确保每次请求时都会生成不同的验证码。在这...
本程序实现两个非负整数的加减乘除四则高精度运算; 有比较详细的注释,测试了10组随机数据并未出现运行时错误。 如果发现程序有bug,欢迎提出指正!