前言
学习过程中遇到的小模块,总结细化了一下思维逻辑,供小白练习使用。
思维导图
代码
直接上代码:
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
/**
* @author :LiuYihong
* @Description :随机生成验证码图片
* @date : 2022/5/5 16:31
* @Version 1.0
*/
@WebServlet("/random")
public class RandomServlet extends HttpServlet {
private static final String TYPE = "image/jpeg";
/**
* 创建一个随机生成颜色的方法
* @param bc
* @param fc
* @return
*/
public static Color RandomColors(int bc,int fc){
Random r = new Random();
if(bc>255)bc=255;
if(fc>255)fc=255;
int red = fc+r.nextInt(bc-fc);
int green = fc+r.nextInt(bc-fc);
int blue = fc+r.nextInt(bc-fc);
return new Color(red,green,blue);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置页面格式
response.setContentType(TYPE);
Random r = new Random();
//2.设置页面不缓存
response.setHeader( "Pragma", "no-cache" );
response.addHeader( "Cache-Control", "no-cache" );
response.setDateHeader("Expires", 0);
//3.设置图片缓存
BufferedImage pic = new BufferedImage(60, 20, BufferedImage.TYPE_INT_RGB);
//4.获取上下文环境
Graphics gc = pic.getGraphics();
//5.设置颜色
gc.setColor(RandomColors(125,60));
//6.设置矩形
gc.fillRect(0,0,60,20);
//7.设置字体(字体名称,样式,字号)
gc.setFont(new Font("Times New Roma",Font.PLAIN,20));
//8.设置干扰线
for (int i=0;i<200;i++){
int x1=r.nextInt(60);
int x2=r.nextInt(30);
int y1=r.nextInt(20);
int y2=r.nextInt(10);
gc.setColor(RandomColors(125,60));
gc.drawLine(x1,y1,x2,y2);
}
//9.设置干扰点
for (int i=0;i<100;i++){
int x=r.nextInt(60);
int y=r.nextInt(20);
gc.setColor(RandomColors(125,60));
gc.drawOval(x,y,0,0);
}
//10.设置随机四位数
String z=r.nextInt(9000)+1000+"";
gc.setColor(RandomColors(125,60));
gc.drawString(z,10,16);//还有起始的坐标为参数
gc.dispose();//释放环境
//11.存session
HttpSession session = request.getSession();
session.setAttribute("",z);
//12.输出到页面上
ImageIO.write(pic,"JPEG",response.getOutputStream());
}
}