1.在java文件夹中创建一个CaptcheController的java类。
2.在CaptcheController中重写service方法,再创建generatePic的BufferedImage类。
3.代码部分。
@WebServlet("/captche")
public class CaptcheControlle extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletOutputStream sos= resp.getOutputStream();
ImageIO.write(generatePic(200,200),"JPEG",sos);
sos.flush();;
sos.close();
}
private BufferedImage generatePic(int width,int height){
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
g.setColor(Color.WHITE);
g.fillRect(0,130,width,height);
g.setColor(Color.BLACK);
g.setFont(new Font("宋体",Font.BOLD,25));
Random rnd =new Random();
//验证码字符
String nr = "ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@!#$%&";
// g.drawString("1234",10,20);
int x=50,y=50;
//随机生成五位验证码
for (int i=0;i<5;i++){
int b = rnd.nextInt(nr.length());
char ch = nr.charAt(b);
Color color = new Color(rnd.nextInt(255), rnd.nextInt(255), rnd.nextInt(255));
g.setColor(color);
g.drawString(""+ch,x,y);
int xz= rnd.nextInt(20);
x+=xz+8;
int yz= rnd.nextInt(10);
y+=yz+8;
}
//加入干扰线
int a1,a2,a3,a4;
for(int i = 0;i<4;i++){
Color color1 = new Color(rnd.nextInt(255), rnd.nextInt(255), rnd.nextInt(255));
g.setColor(color1);
a1 = rnd.nextInt(x);
a2 = rnd.nextInt(x);
a3 = rnd.nextInt(y);
a4 = rnd.nextInt(y);
g.drawLine(a1,a2,a3,a4);
}
//加入白色噪点
for(int i=0,n=rnd.nextInt(100);i<n;i++) {
g.setColor(Color.white);
g.fillRect(rnd.nextInt(x), rnd.nextInt(100), 2, 2);
}
g.dispose();
// Random rnd=new Random();
rnd.nextInt(100);
return image;
}
}
4.头文件部分
package cn.edu.mju.project13zjl.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;
5.完成代码后,我访问http://localhost:2900/Project13/captche测试(2900端口,Project13是自定义的Context path,而captche是自定义映射)。完成。