注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

中华神鸟

QQ:935658701

 
 
 

日志

 
 

Jsp+Servlet实现网页验证码及其刷新功能(不用任何控件)  

2013-05-07 22:43:59|  分类: JSP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1.写一个用来生成图形验证码的Servlet,参考代码如下:

package com.dzl.servlet;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
* 生成图形验证码
*
* @author zhilin
*
*/
public class CaptchaServlet extends HttpServlet {

// 随机码字符表
private static final char[] code = { 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9' };
private static final int code_length = 6;

/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}

/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to
* post.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
StringBuffer captcha = new StringBuffer();

// 生成验证码
for (int i = 0; i < code_length; i++) {
int generated = (new Random()).nextInt(62);
captcha.append(code[generated]);
}

// 把生成的代码保存在session中
HttpSession session = request.getSession(true);
session.setAttribute("captcha", captcha.toString());

// 生成图片
// 创建内存图片,参数为图片的大小及类型
BufferedImage image = new BufferedImage(79, 34,
BufferedImage.TYPE_INT_RGB);

// 得到Graphics句柄
Graphics g = image.getGraphics();

// 设置画笔颜色
g.setColor(Color.yellow);

// 画背景
g.fillRect(0, 1, 79, 32);

// 把随机码显示在图片上
// 设置字体颜色
g.setColor(Color.black);

// 画验证码
g.drawString(captcha.toString(), 20, 20);

// 图像生效
g.dispose();

// 把生成的图片发送到客户端
ImageIO.write(image, "JPEG", response.getOutputStream());
}

}


2.编辑要显示图形验证码的Jsp页面(为了简便起见,只写了显示图片的内容)

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>图形验证码</title>
<script type="text/javascript">
//实现验证码的“看不清楚,换一张”功能
/**
* 使img标签重新载入一个新的图片。但要保证两点:
* 1.服务器端收到请求会重新生成一个新的验证码,而不是调用缓存
* 2.浏览器端会向后台发出一个新的请求,而不是从浏览器缓存里面取出。
* 同时满足这两个条件也很简单:在请求的url中加入一个随机的数据
*/
function changeImage(){
document.getElementById('captcha').src='CaptchaServlet?rnd='+Math.random();
return false;//防止页面跳转
}
</script>
</head>
<body>
<!-- 点击链接文字刷新图片 -->
<img alt="验证码" border="0" id="captcha" src="CaptchaServlet">
<a href="javascript:void(0);" onclick="return changeImage()">看不清楚,换一张</a>
</body>
</html>



把这两个文件加入项目中,然后访问该Jsp页面就可以看到验证码图片了!
  评论这张
 
阅读(505)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017