注意了, 这里是Spring MVC是通过注解的方式实现的, 如果想知道如何使用Spring注解,自己去别的地方看看, 或者之后我会再写一篇新的文章!
前提: 需要jar包 kaptcha-2.3.2.jar 下载地址如下:
http://code.google.com/p/kaptcha/downloads/list
1. Servlet实现方式
1.1web.xml如下:
<!--Kaptcha 验证码 -->
<servlet>
<!-- 生成验证码和刷新的Servlet -->
<servlet-name>kaptcha</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
<init-param>
<!-- 验证码图片的边框 yes和no -->
<param-name>kaptcha.border</param-name>
<param-value>yes</param-value>
</init-param>
<init-param>
<!-- 验证码图片的边框的颜色 -->
<param-name>kaptcha.border.color</param-name>
<param-value>105,179,90</param-value>
</init-param>
<init-param>
<!-- 验证码的颜色 -->
<param-name>kaptcha.textproducer.font.color</param-name>
<param-value>red</param-value>
</init-param>
<init-param>
<!-- 整个验证码在图片中的宽度 -->
<param-name>kaptcha.image.width</param-name>
<param-value>250</param-value>
</init-param>
<init-param>
<!-- 整个验证码在图片中的高度 -->
<param-name>kaptcha.image.height</param-name>
<param-value>90</param-value>
</init-param>
<init-param>
<!-- 验证码在图片中的大小 -->
<param-name>kaptcha.textproducer.font.size</param-name>
<param-value>70</param-value>
</init-param>
<init-param>
<!-- 获取验证码的名字SESSION -->
<param-name>kaptcha.session.key</param-name>
<param-value>code</param-value>
</init-param>
<init-param>
<!-- 显示几个验证码 -->
<param-name>kaptcha.textproducer.char.length</param-name>
<param-value>4</param-value>
</init-param>
<init-param>
<!-- 验证码的字体和式样 -->
<param-name>kaptcha.textproducer.font.names</param-name>
<param-value>宋体,楷体,微软雅黑</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>kaptcha</servlet-name>
<url-pattern>/kaptcha/kaptcha.jpg</url-pattern>
</servlet-mapping>
1.2 JSP代码如下:
<table>
<tr>
<td><img src="/kaptcha/kaptcha.jpg"></td>
<td valign="top">
<form method="POST">
<br>sec code:<input type="text" name="kaptchafield"><br />
<input type="submit" name="submit">
</form>
</td>
</tr>
</table>
<br /><br /><br /><br />
<%
String c = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
String parm = (String) request.getParameter("kaptchafield");
out.println("Parameter: " + parm + " ? Session Key: " + c + " : ");
if (c != null && parm != null) {
if (c.equals(parm)) {
out.println("<b>true</b>");
} else {
out.println("<b>false</b>");
}
%>
二. Spring Mvc的实现
2.1 spring配置文件
<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
<property name="config">
<bean class="com.google.code.kaptcha.util.Config">
<constructor-arg>
<props>
<prop key="kaptcha.border">yes</prop>
<prop key="kaptcha.border.color">105,179,90</prop>
<prop key="kaptcha.textproducer.font.color">blue</prop>
<prop key="kaptcha.image.width">125</prop>
<prop key="kaptcha.image.height">45</prop>
<prop key="kaptcha.textproducer.font.size">45</prop>
<prop key="kaptcha.session.key">code</prop>
<prop key="kaptcha.textproducer.char.length">4</prop>
<prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>
</props>
</constructor-arg>
</bean>
</property>
</bean>
2.2 Controller的实现
package com.vopzoon.app.base.captcha;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
/**
* 防止Captcha机器人登陆
* @author liuwang
*
*/
@Controller
@RequestMapping("/kaptcha/*")
public class CaptchaController {
@Autowired
private Producer captchaProducer = null;
@RequestMapping
public ModelAndView getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
String code = (String)session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
System.out.println("******************验证码是: " + code + "******************");
response.setDateHeader("Expires", 0);
// Set standard HTTP/1.1 no-cache headers.
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
// Set standard HTTP/1.0 no-cache header.
response.setHeader("Pragma", "no-cache");
// return a jpeg
response.setContentType("image/jpeg");
// create the text for the image
String capText = captchaProducer.createText();
// store the text in the session
session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
// create the image with the text
BufferedImage bi = captchaProducer.createImage(capText);
ServletOutputStream out = response.getOutputStream();
// write the data out
ImageIO.write(bi, "jpg", out);
try {
out.flush();
} finally {
out.close();
}
return null;
}
}
2.3 JSP代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/functions.js"></script>
<title>测试页面</title>
<script type="text/javascript">
$(function(){
$('#kaptchaImage').click(function () {//生成验证码
$(this).hide().attr('src', './kaptcha/getKaptchaImage.do?' + Math.floor(Math.random()*100) ).fadeIn();
event.cancelBubble=true;
});
});
window.onbeforeunload = function(){
//关闭窗口时自动退出
if(event.clientX>360&&event.clientY<0||event.altKey){
alert(parent.document.location);
}
};
function changeCode() {
$('#kaptchaImage').hide().attr('src', './kaptcha/getKaptchaImage.do?' + Math.floor(Math.random()*100) ).fadeIn();
event.cancelBubble=true;
}
</script>
</head>
<body>
<div class="chknumber">
<label>验证码:
<input name="kaptcha" type="text" id="kaptcha" maxlength="4" class="chknumber_input" />
</label>
<br />
<img src="./kaptcha/getKaptchaImage.do" id="kaptchaImage" style="margin-bottom: -3px"/>
<a href="#" οnclick="changeCode()">看不清?换一张</a>
</div>
</body>
</html>
哦, 差点忘记了, 不好意思, 这个东西我是抄袭他的, 地址如下:
http://ttaale.iteye.com/blog/808719