//输出验证码
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
@WebServlet("/check")
public class CheckCodeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int width = 100;
int height = 50;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
String code = CheckCodeImag.drawRandomText(width, height, image);
req.getSession().setAttribute("checkCode",code);
ServletOutputStream os = resp.getOutputStream();
ImageIO.write(image, "jpg", os);
}
}
//画验证码
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;
public class CheckCodeImag {
public static String drawRandomText(int width, int height, BufferedImage checkCodeImg){
Graphics2D g = (Graphics2D) checkCodeImg.getGraphics();
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
StringBuffer code = new StringBuffer();
int x=2;
Random random = new Random();
//画一个白色的验证码背景
g.setColor(Color.WHITE);
g.fillRect(0,0,width,height);
//画干扰线
for (int i = 0; i < 5; i++) {
g.setColor(getRandomColor());
g.drawLine(random.nextInt(width),random.nextInt(height),random.nextInt(width),random.nextInt(height));
}
//添加噪点
for (int i = 0; i < 10; i++) {
g.setColor(getRandomColor());
g.fillRect(random.nextInt(width),random.nextInt(width),2,2);
}
//画上数字和字母
g.setFont(new Font("Courier New Bold Italic",Font.BOLD,30));
String str="123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
for (int i = 1; i <=4; i++) {
char c=str.charAt(random.nextInt(str.length()));
code.append(c);
g.setColor(getRandomColor());
double angle= random.nextInt()%30*Math.PI/180;
g.rotate(angle,x,30);
g.drawString(c+"",x,30);
g.rotate(-angle,x,30);
x+=25;
}
return code.toString();
}
private static Color getRandomColor(){
Random random = new Random();
return new Color(random.nextInt(160),random.nextInt(160),random.nextInt(160));
}
}