验证码效果如下:
一、首先创建一个类CaptcheController并继承HttpServlet
package cn.edu.mju.project1.controller;
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.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
@WebServlet("/captche")
public class CaptcheController extends HttpServlet {
private final int width = 200;
private final int height = 100;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
BufferedImage img=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics();
Font font= new Font("Algerian", Font.ITALIC, 40);//字体设置
g.setFont(font);
g.setColor(Color.WHITE);
g.fillRect(0,0,width,height);
g.setColor(Color.RED);
String code =randString(4);
g.drawString(code,40,65);
g.setColor(Color.blue);
for (int i = 0; i < 15; i++) {//生成干扰线
Random random = new Random();
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(width);
int y1 = random.nextInt(height);
g.drawLine(x,y,xl,y1);
}
g.setColor(Color.black);
for(int i = 0;i<500;i++) {//生成噪点
Random ran = new Random();
int x = ran.nextInt(width);
int y = ran.nextInt(width);
g.drawOval(x, y, 1, 1);
}
g.dispose();
ServletOutputStream out = resp.getOutputStream();
ImageIO.write(img,"jpg",out);
try{
out.flush();
}finally {
out.close();
}
}
public String randString(int count){
StringBuilder builder=new StringBuilder();
String str="abcdefghijklmpqrstuvwxy0123456789";
Random rnd = new Random();
for (int i=0;i<count;i++){//随机生成验证码
int pos = rnd.nextInt(str.length());
String s = str.substring(pos,pos+1);
builder.append(s);
}
return builder.toString();
}
}
二、创建测试类TextCaptche
import cn.edu.mju.project1.controller.CaptcheController;
import org.junit.Test;
public class TextCaptche {
@Test
public void testRandomString(){
CaptcheController c =new CaptcheController();
System.out.println(c.randString(4));
}
}
三、运行该测试类
四、运行整个项目,打开浏览器输入localhost:8081/captche
最后效果如下: