调用语音验证码的接口
语音验证码就是以打电话的方式,通过电话语音播报的方式把验证码告诉给用户,语音验证码使用的不多。
因为第三方的接口价格相对于短信验证码来说比较贵,并且效果一般,只能发送纯数字的语音,而且还没有干扰音,这种语音很容易就被识别了,安全性上也比较低。
如果想要做好一个语音验证码,就得自己单独去做这个模块的开发,需要花费的成本比较大,一般大部分的应用都没有这个必要去开发这个模块,所以语音验证码就不怎么有人使用。本文也是演示简单的调用一下第三方的接口,作为示例。
准备工作:
1. 先申请一个语言验证码的API(我这里申请的是聚合的),首次申请有3次免费的调用机会:
然后会让你认证,如果只是临时做个试验的话,可以选择不认证:
申请之后,查看一下接口的说明文档:
需要按照文档里的说明规则去调用这个接口:
完成以上步骤准备好接口后,在编写代码之前先导入一个JSON的jar包,因为API调用后返回结果的形式是JSON格式,所以需要JSON的jar包来解析JSON的数据:
完成准备工作后,就可以开始编写具体的代码了,因为调用次数只有3次,我就只写一个简单的类作为演示:
发送成功:
发送失败:
图形验证码组件
所谓验证码组件就是拿别人写好的第三方jar包来用,我这里演示的是jcaptcha的组件。
JCaptcha 简介:
CAPTCHA 全称 Completely Automated Public Turing Test to Tell Computers and Humans Apart,最早作为卡内基梅隆大学的一个科研项目,用于生成一个人类容易通过而计算机难以通过的测试,目前广泛应用于网络应用,用于阻止机器人发布垃圾信息。JCaptcha 即为 Java 版本的 CAPTCHA 项目,其是一个开源项目,支持生成图形和声音版的验证码,在生成声音版的验证码时,需要使用到 FreeTTS。目前,JCaptcha 官方网站显示有 2.0 版本,但二进制版只有 1.0 版可供下载,本文亦是基于 1.0 版本展开。
一个简单的图形验证码:
JCaptcha 提供了一定的可扩展能力,用于开发人员创建出复杂的图形验证码。下面,首先利用 JCaptcha 提供的 API 来快速开发一个简单示例。本文的示例为 Web 应用,可以运行在 Tomcat 和 WebSphere 上,除了准备 Web 服务器外,我们还需要准备好 JCaptcha 运行时所必须的 Jar 包。
以下是需要用到的jar包,这些jar包都可以在maven的中央仓库中下载到:
创建一个web工程,把jar导入到lib目录下,然后配置web.xml文件,配置语法如下:
配置完web.xml之后实际上,直接访问这个jcaptcha.jpg就可以看到验证码的效果了:
这是默认的效果,实际上如果你不需要有变动的话,就可以直接这样使用。
如果你需要去自定义这个图片验证码样式的话,就得自己专门写一个类来进行调整,代码示例:
运行结果:
ServletConfig和ServletContext对象
ServletConfig可以用于得到web.xml中配置的参数信息,例如配置数据库参数、系统参数信息等等。因为我们可以把一些参数信息配置在web.xml的servlet标签内,通过ServletConfig对象和init方法就可以在Servlet启动的时候就可以获得这些配置信息。
简单的配置语法:
在 <init-param> 标签内配置初始化参数信息,<param-name> 标签配置参数信息的名称,<param-value> 则是这个名称的值。
Servlet代码:
ServletConfig对象中没有什么方法,这个对象主要就是用于获得参数信息而已。
运行结果:
配置多个参数信息:
运行结果:
ServletContext对象是一个全局对象,在任何情况下获得的对象都是同一个,服务器开始,这个对象就会存在,服务器关闭,ServletContext才会被释放。ServletContext可以像session对象一样用来存储一些数据信息,与session不同的是ServletContext存储时间是永久的,而session则是默认有30分钟的过期时间。
关于Servlet中的三个可以存储用户数据的对象:
request对象一个用户可有多个,其生命周期在请求结束时结束;session对象一个用户一个,其生命周期在默认的情况下,只会存在30分钟;而servletContext,则是所有用户共用一个,其生命周期直到服务器关闭才结束。所以为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息,不然只会徒增服务器压力。
获得ServletContext对象的方式:
request.getServletContext() // 通过request对象获得
request.getSession().getServletContext() // 通过Session对象获得
this.getServletContext() // 通过Servlet对象获得
this.getServletConfig().getServletContext() // 通过ServletConfig对象获得
一般情况下,常用的方式是// 通过Servlet对象获得。
ServletContext对象中的一些常见的方法:
context.getAttribute(arg0); // 得到属性
context.setAttribute(arg0, arg1); // 添加属性
context.removeAttribute(arg0); // 删除属性
context.getServlets(); //得到服务器中的所有Servlet
context.addServlet("", ""); // 添加Servlet
context.addFilter("", ""); // 添加过滤器
context.addListener(arg0); // 添加监听器
getServerInfo() // 得到web服务器的信息
getContextPath() // 得到web工程的路径
getRealPath("WEB-INF") // 得到指定文件或目录的路径
getSessionTimeout() // 得到Session的过期时间
代码示例:
运行结果:
如果文中图片失效,请点击以下链接查看: