package com.homework.image;
import java.awt.Color;
import java.awt.Font;
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;
public class imagef extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
//生成随机类
Random random = new Random();
//设置验证码的位数
int length = 5;
//产生验证码
String checkcode="";
char code;
int number;
for(int i=0; i<length; i++)
{
number = random.nextInt(26);
//System.out.println(number);
if(number % 2 == 0) //0-9数字
code = (char)('0' + (char)(number % 10));
else // A-Z
code = (char)('A' + (char)(number % 26));
checkcode += code+"";
}
// 在内存中创建图象
int width = (int)Math.ceil(length * 12.5), height = 22;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
// 设定背景色
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
//画边框
g.setColor(Color.GRAY);
g.drawRect(0,0,width-1,height-1);
// 随机产生25条干扰线,使图象中的认证码不易被其它程序探测到
for (int i = 0; i < 25; i++) {
int x1 = random.nextInt(width);
int y1 = random.nextInt(height);
int x2 = random.nextInt(width);
int y2 = random.nextInt(height);
g.setColor(Color.GRAY);
g.drawLine(x1, y1, x2,y2);
}
//设定字体,画验证码
g.setColor(Color.BLUE);
g.setFont(new Font("Arial", Font.BOLD|Font.ITALIC, 16));
g.drawString(checkcode,5,18);
// 将认证码存入SESSION=================
HttpSession session = request.getSession();
session.setAttribute("rand", checkcode);
// 图象生效
g.dispose();
// 输出图象到页面
//response.getOutputStream() 响应所对应的输出流
//图像显示在页面上
ImageIO.write(image, "JPEG", response.getOutputStream());
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
注意:因为上面的这些代码为纯java代码要将其显示在网页上所以新建的这个imagef是一个serverlet最终效果是一张图片所以在jsp页使用时标记为<img src="">要换一张使用onclick属性