编写一个验证码Servlet:生成图像,将值存入JSP的session。
package com.gpengtao.servlet;
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;
public class ImageServlet extends HttpServlet {
private void process(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.setHeader("Pragma", "No-cache");
resp.setHeader("Cache", "no-cache");
resp.setDateHeader("Expires", 0);
BufferedImage image = new BufferedImage(60, 20,
BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(new Color(200, 203, 240));
g.fillRect(0, 0, 60, 20);
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
Random random = new Random();
for (int i = 0; i < 200; ++i) {
int x = random.nextInt();
int y = random.nextInt();
int x1 = random.nextInt();
int y1 = random.nextInt();
g.drawLine(x, y, x1, y1);
}
String s = "";
for (int i = 0; i < 4; ++i) {
int x = random.nextInt()%10;
if(x < 0){
x = -x;
}
String rand = String.valueOf(x);
g.setColor(Color.BLUE);
g.drawString(rand, 13 * i + 6, 16);
s = s + rand;
}
req.getSession().setAttribute("authcode", s);
System.out.println(s);
g.dispose();
ImageIO.write(image, "png", resp.getOutputStream());
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
process(req, resp);
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
process(req, resp);
}
}