Java版纯字母、纯数字、字母数字组合验证码的生成 (一)

2014-11-24 09:56:15 · 作者: · 浏览: 2

所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰,例如随机画数条直线或者画一些点,由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。验证码中之所以加上凌乱的直线是为了防止某些人使用OCR软件识别随机产生的数字或符号,从而达到恶意破解密码、刷票、论坛灌水、刷页等恶意行为。下面就开始直接上代码吧:


下面是Demo的文件组织结构




下面就是index.jsp的代码。主要功能是单击浏览器上的验证码图片,实现验证码的更换。


[java]
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>






验证码





验证码
<script type="text/java script">
function refresh(obj) {
obj.src = "${pageContext.request.contextPath}/RandomValidateCodeServlet "+Math.random();
}








<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>






验证码





验证码
<script type="text/java script">
function refresh(obj) {
obj.src = "${pageContext.request.contextPath}/RandomValidateCodeServlet "+Math.random();
}









Web.xml中的servlet配置信息如下

[java]
< xml version="1.0" encoding="UTF-8" >
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">


RandomValidateCodeServlet
com.web.RandomValidateCodeServlet



RandomValidateCodeServlet
/RandomValidateCodeServlet



index.jsp

< xml version="1.0" encoding="UTF-8" >
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">


RandomValidateCodeServlet
com.web.RandomValidateCodeServlet


RandomValidateCodeServlet
/RandomValidateCodeServlet



index.jsp

下面是servlet中的代码,这里只是为了演示所以就只做了doGet方法,对于doPost方法就没有在这里考虑

[java]
public class RandomValidateCodeServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("image/jpeg");//设置相应类型,告诉浏览器输出的内容为图片
response.setHeader("Pragma", "No-cache");//设置响应头信息,告诉浏览器不要缓存此内容
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expire", 0);
RandomValidateCode randomValidateCode = new RandomValidateCode();
try {
randomValidateCode.getRandcode(request, response);//输出图片方法
} catch (Exception e) {
e.printStackTrace();
}
}
}

public class RandomValidateCodeServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("image/jpeg");//设置相应类型,告诉浏览器输出的内容为图片
response.setHeader("Pragma", "No-cache");//设置响应头信息,告诉浏览器不要缓存此内容
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expire", 0);
RandomValidateCode randomValidateCode = new RandomValidateCode();
try {
randomValidateCode.getRandcode(request, response)