验证码:
为什么使用验证码? 防止机器人恶意注册。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="java.io.PrintWriter"%>
<%@page import="java.io.OutputStream"%>
<%@page import="java.awt.image.BufferedImage"%>
<%@page import="javax.imageio.ImageIO"%>
<%@page import="com.sun.image.codec.jpeg.JPEGCodec"%>
<%@page import="com.sun.image.codec.jpeg.JPEGImageEncoder"%>
<%@page import="java.awt.Graphics"%>
<%@page import="java.awt.Color"%>
<%
// 强制让out失效!
out.clearBuffer();
out = pageContext.pushBody();
// 告诉浏览器,服务器给你发的是图片,别再查码表去解码了!
response.setHeader("content-type","image/jpeg");
// 创建一张在内存中的图片.
BufferedImage bi = new BufferedImage(100,20,BufferedImage.TYPE_INT_RGB);
// 涂鸦
// 获取画笔
Graphics g = bi.getGraphics();
// g.drawString("张三到此一游!",50,50);
// g.drawRect(10,10,100,100);
// g.setColor(new Color(255,255,0));
// g.fillRect(10,30,50,80);
// g.drawLine(100,60,30,60);
// g.drawArc(0,0,100,100,0,360);
String letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for(int i=1; i<=4; i++) {
int idx = (int)(Math.random()*62);
char c = letters.charAt(idx);
g.drawString(c+"", i*17,12);
}
for(int i = 1; i<=4; i++) {
// 干扰线
int x1 = (int)(Math.random()*101);
int y1 = (int)(Math.random()*21);
int x2 = (int)(Math.random()*101);
int y2 = (int)(Math.random()*21);
g.drawLine(x1,y1,x2,y2);
}
// 把图片发送给客户端
OutputStream os = response.getOutputStream();
JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);
en.encode(bi);
%>
在其它jsp页面上使用验证码: