- 浏览: 290160 次
- 性别:
- 来自: 兰州
文章分类
- 全部博客 (116)
- 给网友答疑 (1)
- J2EE (16)
- DesignPattern (14)
- OtherArchive (5)
- lucene and compass (1)
- JasperReport (2)
- FusionCharts (2)
- Classical algorithm (2)
- JS (5)
- ZK Ajax (1)
- ubuntu-linux (4)
- Weka (0)
- IDE Config (6)
- JAVA 底层 (3)
- C\C++ (4)
- Android (15)
- 项目展示 (1)
- 娱乐生活 (16)
- 电驴资源 (1)
- 网络转载 (1)
- 程序员 毛病 (1)
- Android,开发日志 (2)
- java (1)
- openGL es (2)
- MAC (1)
最新评论
-
洋葱pp奥特曼:
求大神再发一次资源,万分感激!!小弟邮箱:173992660@ ...
使用JQuery-Week-Calendar做日程 -
xbliu564:
请问版本号
fusionchart 破解文件SWF -
xue_lang:
看了半天,有点坑爹的赶脚,哎
状态模式(State) -
teacup_madman:
我只能说。这个程序可以去掉的地方太多了。这个真的是State模 ...
状态模式(State) -
冬日的阳光:
TrafficLight这个类的change方法可以改一下,如 ...
状态模式(State)
首先看看效果图:
如上图,点击验证码可以异步的刷新,借助了一个Jquery插件——jquery.qtip插件,和jcaptcha 配置生成验证码。
1.先配置好,能生成jcaptcha的环境,
在web.xml中添加如下内容:
<servlet>
<servlet-name>jcaptcha2</servlet-name> <servlet-class>com.jxs.sys.core.global.jcaptcha.ImageCaptchaServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jcaptcha2</servlet-name> <url-pattern>/jcaptcha</url-pattern> </servlet-mapping>
2.设置Servlet和regx,
package com.jxs.sys.core.global.jcaptcha; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import com.octo.captcha.service.CaptchaServiceException; import com.octo.captcha.service.image.ImageCaptchaService; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; @SuppressWarnings("serial") public class ImageCaptchaServlet extends HttpServlet { private ImageCaptchaService imageCaptchaService; private String beanName = "imageCaptchaService"; public void init(ServletConfig servletConfig) throws ServletException { super.init(servletConfig); WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletConfig.getServletContext()); imageCaptchaService = (ImageCaptchaService) wac.getBean(beanName, ImageCaptchaService.class); } protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { byte[] captchaChallengeAsJpeg = null; ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream(); try { String captchaId = httpServletRequest.getSession().getId(); BufferedImage challenge = imageCaptchaService.getImageChallengeForID(captchaId, httpServletRequest.getLocale()); JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(jpegOutputStream); jpegEncoder.encode(challenge); } catch (IllegalArgumentException e) { httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND); return; } catch (CaptchaServiceException e) { httpServletResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } captchaChallengeAsJpeg = jpegOutputStream.toByteArray(); httpServletResponse.setHeader("Cache-Control", "no-store"); httpServletResponse.setHeader("Pragma", "no-cache"); httpServletResponse.setDateHeader("Expires", 0); httpServletResponse.setContentType("image/jpeg"); ServletOutputStream responseOutputStream = httpServletResponse.getOutputStream(); responseOutputStream.write(captchaChallengeAsJpeg); responseOutputStream.flush(); responseOutputStream.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } }
其他的代码,参见下载:jcaptcha_src.rar,
2.借助jquery去完成核心的代码。
首先设置logo.jsp
<script type="text/javascript" src="js/jquery-1.3.2.js"></script> <script type="text/javascript" src="js/jquery.qtip-1.0.0-rc3.min.js"></script> <script type="text/javascript"> var contextPath = '${pageContext.request.contextPath}'; </script> <script type="text/javascript" src="js/jcaptcha.js"></script>
接下来就是要完成jcaptcha.js文件。
代码先给出,在解释:
var $j = jQuery.noConflict(); var realoadRandom = Math.random(); function refreshLoadRandom(obj, src){ realoadRandom = Math.random(); obj.src = src + "&ran=" + realoadRandom; } $j(document).ready(function(){ var i, styles, tooltipCount; tooltipCount = 0; styles = ['blue']; function createTooltip(){ if (++tooltipCount == styles.length + 1) return; this.elements.tooltip.qtip({ content: '<img align=\"middle\" style=\"text-align: center; cursor: pointer;\" src=\"' + contextPath + '/jcaptcha\" onclick=\"this.src=\'' + contextPath + '/jcaptcha?now=' + realoadRandom + '\';refreshLoadRandom(this,\'' + contextPath + '/jcaptcha?nowa=nk\');\" alt=\"看不清,点击换一张\"/>', position: { corner: { tooltip: 'leftMiddle', target: 'rightMiddle' }, adjust: { resize: true, scroll: true } }, show: { ready: true }, hide: false, style: { name: styles[tooltipCount - 1], width: 107, height: 30, size: { x: 12, y: 12 }, tip: true }, api: { onRender: createTooltip } }); } createTooltip.call({ elements: { tooltip: $j('#j_captcha_response') } }); $j('#j_username').qtip({ position: { corner: { target: 'topMiddle', tooltip: 'bottomMiddle' } }, content: "请在此输入您的用户名!", style: { name: 'blue', padding: '7px 13px', width: 250, tip: true } }); $j('#j_password').qtip({ position: { corner: { target: 'topMiddle', tooltip: 'bottomMiddle' } }, content: "请在此输入您的密码!", style: { name: 'blue', padding: '7px 13px', width: 250, tip: true } }); $j('#j_captcha_response').qtip({ position: { corner: { target: 'topMiddle', tooltip: 'bottomMiddle' } }, content: "请在此输入左边验证码!", style: { name: 'blue', padding: '7px 13px', width: 200, tip: true } }); $j('#j_button_submit').qtip({ position: { corner: { target: 'topMiddle', tooltip: 'bottomMiddle' } }, content: "点击此处提交登录信息!", style: { name: 'blue', padding: '7px 13px', width: 250, tip: true } }); });
这里有一个小小的技巧,那就是不让浏览器缓存验证码图片,var realoadRandom = Math.random();在外面设置了
这个变量,做随机变量。
function refreshLoadRandom(obj, src){
realoadRandom = Math.random();
obj.src = src + "&ran=" + realoadRandom;
}
目的还是清楚缓存的辅助方法。
content: '<img align=\"middle\" style=\"text-align: center; cursor: pointer;\" src=\"' + contextPath + '/jcaptcha\" onclick=\"this.src=\'' + contextPath + '/jcaptcha?now=' + realoadRandom + '\';refreshLoadRandom(this,\'' + contextPath + '/jcaptcha?nowa=nk\');\" alt=\"看不清,点击换一张\"/>',
这个才是真正的生成验证码图片提示框的,src就是servlet地址,onclick是一部调用的关键,采用this.src重新赋值的
形式清楚浏览器的缓存,后面跟着一个无用的参数,名字随便起,之后realoadRandom是改变值了,要是不在此修改src的话,浏览器会缓存下来,所以要改变realoadRandom的,并且在此切换src的地址,保证不被缓存,点击的时候一次是
切换这两个地址,改变其src获取不同的图片。
- jcaptcha_src.rar (4.4 KB)
- 描述: JCaptcha-Src
- 下载次数: 298
- 客户端-login.rar (244 KB)
- 描述: login
- 下载次数: 258
评论
6 楼
ldsjdy
2011-09-24
不错,刚好需要用到,参考一下
5 楼
binge520
2011-05-11
能不能简单点 挺麻烦的
4 楼
TESZLX
2010-11-02
BestUpon 写道
笑我痴狂 写道
nighthawk 写道
我说啊,就一个验证码怎么搞的这么复杂
同意
各有所见:正所谓,同样是饼子,为什么还会有烧饼,不就是饼子么?调味品不一样而已。
3 楼
BestUpon
2010-09-13
笑我痴狂 写道
nighthawk 写道
我说啊,就一个验证码怎么搞的这么复杂
同意
各有所见:正所谓,同样是饼子,为什么还会有烧饼,不就是饼子么?调味品不一样而已。
2 楼
笑我痴狂
2010-09-13
nighthawk 写道
我说啊,就一个验证码怎么搞的这么复杂
同意
1 楼
nighthawk
2010-08-18
我说啊,就一个验证码怎么搞的这么复杂
发表评论
-
Spring MVC 和 Struts2 比较
2011-02-28 16:55 20311.struts2框架是类级别的拦截,每次来了请求就创建一个A ... -
写点程序的那些糗事(2)
2010-12-16 14:29 1206昨天给商学院做的专家品审系统正式的运行了,来的全部是一些大领导 ... -
Spring3 mvc 国际化时的一点注意
2010-12-13 09:37 1747Spring3 MVC 中:如果使用国际化的形式,如 ... -
MySQLIntegrityConstraintViolationException 解决办法
2010-10-19 16:51 18852使用JPA做映射: /** * 指标 * ... -
写点程序的那些糗事(1)
2010-09-27 19:31 1280写点程序就要认真点,为什么呢?会有效率问题的!引例: ... -
编程语言结构图
2010-09-23 12:22 1197编程语言就是这么个样子的!还要讨论什么是“排名战”么? ... -
在线试听(播放器)防止盗链下载实现讨论_障眼法实现
2010-09-06 12:10 6285《读者》电子出版平台有个附属项目,需求描述是这样的: ... -
JavaMail、Commons Email发送邮件 出现结果后到的文件是Base64的问题的解决办法
2010-08-19 23:09 5231今天折腾了一天,有个业务需要写个简单的邮件发送,但是测试了。从 ... -
Eclipse 3.6 插件资源-持续更新ing-更新15次--欢迎有好用插件的朋友推荐
2010-08-17 11:00 7765欢迎有好用插件的朋友推荐! 注:没有提示说明安装的,直 ... -
Jpa 时间段间的查询问题解决办法
2010-05-27 22:13 22642最近在做法院的一个档案管理项目,一直做的的查询是基于compa ... -
dhtmlXTree 与后台交互数据
2009-11-06 14:44 1901今天要写一个获得dhtmlXTree 节点值的,大量的Id节点 ... -
Struts2 OGNL中的投影(过滤)与软件工程
2009-11-05 11:54 1896Struts2 OGNL中的投影(过滤) <s: ... -
Struts2 doubleSelect
2009-10-30 14:17 1542今天要用到一个二级联动,以前都是使用JavaScript编写, ... -
Struts2 的三种接受参数的方式
2009-10-28 16:59 20411、通过普通参数的getter and setter方式 ... -
JDBC CRUD操作的粗略封装DEMO
2009-10-15 12:19 4606暮然回首,看看jDBC的操作,原来很多的东西都忘记了, ...
相关推荐
**jQuery Tip 插件使用详解** 在Web开发中,提示框(Tip)是常见的交互元素,用于向用户提供信息、警告或指示。jQuery Tip插件是一款轻量级且易于使用的工具,能够帮助开发者快速实现各种提示功能。本文将详细介绍...
在音频功率放大器中,TIP42c和TIP41的搭配使用可以提供较大的输出功率和较好的线性度。 除了上述参数之外,TIP42c三极管还具有一些其他的电气特性,如集电极-发射极击穿电压、集电极最大直流电流、集电极最大功耗等...
1. 开发工具:开发者可以使用诸如Apache Axis、wsimport(Java)、Visual Studio(.NET)等工具自动生成客户端代码,简化调用Web Service的过程。 2. 测试:接口开发完成后,需进行单元测试和集成测试,确保服务能...
5. **异步通知**:如果希望在程序运行时的某个特定时刻显示提示,可以使用异步方法,如在一个单独的线程中处理消息提示,避免阻塞主线程。 6. **事件响应**:确保正确处理用户对消息提示的响应,例如点击按钮后的...
在Android开发中,"Tip类demo"通常指的是创建和使用提示信息类的示例。Tip类是用来显示一些临时性或辅助性的信息,如警告、提示、帮助等,它可以帮助用户更好地理解和操作应用。这里我们将详细探讨如何在Android中...
最近定制开发了一套适合企业的条码扫码平台,支持鼎捷Tiptop T100、Tiptop GP平台二次开发,已经在五六家企业磨炼成品,欢迎咨询交流。具有以下功能: 1)根据原来企业规则生成二维码 2)通过PDA扫描条码完成出...
使用Visual Studio(如VS2017或VS2008)新建项目,选择"MFC AppWizard",然后按照向导的提示配置你的应用程序。 2. **添加控件** 在资源视图中,你可以添加所需的控件,例如按钮(CButton)、复选框(CButton,...
在TIPTOPGP中实现DM码打印,打包文件中有详细步骤,手把手教你怎么配置。粘贴实现代码,清晰了然。支持jdk1.6的zxing包(下载以后4gl里面游标改一下别名)
TIPTOP对接通达OA工作流是一个旨在整合两个不同系统——TIPTOP和通达OA(Kingdee Office Automation)——的程序,目的是实现工作流的无缝交互。在企业信息化管理中,工作流自动化是一个关键部分,它能提高效率,...
9. **进阶学习资源**:推荐进一步学习"tiptop"的书籍、网站、论坛或者社区,鼓励用户持续学习和探索。 为了全面了解"tiptop",我们需要解压文件并逐一研究,以获取每个部分的详细信息。同时,如果有相关的文档或...
此套操作手册详细介绍了GP5.X版本的各项功能与操作流程,帮助用户更好地理解和使用该系统。 首先,"流通零售系统.pdf"涵盖了关于零售业的运营流程和管理功能。这个模块可能包括库存管理、POS(销售点)系统操作、...
D3 Tip的使用主要涉及以下几个关键步骤: 1. **引入资源**:首先,你需要在HTML文件中引入D3.js和D3 Tip的库。D3.js通常是通过CDN链接或者本地文件引入,而D3 Tip可以通过npm安装后本地引用,或者直接在页面中使用...
《鼎捷易拓TIPTOP开发视频详细讲解》是一份专为鼎捷易拓TIPTOP GP/T100系统运维者设计的教育资源。该压缩包包含了一系列的视频教程,旨在帮助用户深入理解和掌握该系统的开发与维护技能。 1. **水晶报表(Crystal ...
为了使用jQuery.tip插件,你需要在项目中引入jQuery库和插件的JavaScript及CSS文件。然后,通过简单的jQuery选择器和方法调用来绑定元素并设置提示信息。例如: ```javascript $(document).ready(function() { $('...
在tiptop系统中使用TextEdit来显示HTML网页涉及一系列的步骤和组件。首先,需要了解tiptop是什么,它是一种在多种操作系统上运行的集成开发环境和事务处理系统,尤其在一些旧式商业应用中较为常见。接着,我们来详细...
5. **报表与分析**:介绍如何利用TIPTOP GP生成各种业务报表,进行数据分析,支持决策制定。 6. **安全与权限管理**:讨论如何设置用户角色、权限控制,确保数据的安全性和访问控制。 7. **集成与API**:如果TIP...
在网页设计和开发中,`div` 和 `tip` 是两个非常重要的概念,尤其是在构建用户界面时。`div` 是HTML中的一个通用容器元素,全称为 "division",用于组合HTML文档中的其他元素,以便更好地组织和布局内容。而 `tip` ...
在添加图形元素时,使用`tip.show`和`tip.hide`方法来控制提示框的显示和隐藏。例如,当鼠标进入元素范围时显示提示,离开时隐藏提示: ```javascript svg.selectAll("circle") .data(data) .enter().append(...
Optimal Tip-To-Tip Efficiency(弟高值d2f算法).pdf Optimal Tip-To-Tip Efficiency(弟高值d2f算法).pdf Optimal Tip-To-Tip Efficiency(弟高值d2f算法).pdf Optimal Tip-To-Tip Efficiency(弟高值d2f算法).pdf ...
### TIP122与TIP120/TIP121:大功率达林顿晶体管解析 #### 概述 TIP120、TIP121和TIP122是一系列高性能的大功率达林顿NPN型晶体管,封装于Jedec TO-220塑料封装中,广泛应用于功率线性和开关应用中。它们是单片...