HttpServletResponse简单应用之生成随机数验证码图片
作者:互联网
声明
本文部分内容参考自其他作者原创文章,仅供个人学习留档,特此声明
参考文章链接
(1条消息) B站---【狂神说Java】JavaWeb入门到实战---笔记_夜里的雨的博客-CSDN博客_狂神说java笔记
生成随机数验证码图片
一定要看代码注释加深理解!
思考一个问题,网页中的验证码功能是如何实现的?
1.之前已经学过了前端相关技术,可以使用前端的知识来生成验证码
2.后端实现:需要用到Java的图片类来生产一张验证码图片
接下来我们用java图片类来生成一张随机的验证码图片
1、代码
1.用于生成随机验证码图片的ImageServlet代码
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
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;
public class ImageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//让浏览器每隔一段时间刷新一次以实现验证码的自动刷新功能
resp.setHeader("refresh","3");//让浏览器每3s刷新一次
//创建一张图片
BufferedImage image = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);
//得到2D图片返回给g
Graphics2D g = (Graphics2D) image.getGraphics();
//设置图片的背景颜色
g.setColor(Color.white);
g.fillRect(0,0,80,20);//填充起始点为(0,0)也就是2D图片的左上角
//给图片写数据
g.setColor(Color.BLUE);//验证码字体为蓝色
g.setFont(new Font(null,Font.BOLD,20));//设置字体粗细和大小
g.drawString(makeNum(),0,20);//在2D图片的(0,20)坐标位置画出生成的随机数
//告诉浏览器,这个请求用图片的方式打开
resp.setContentType("image/jpeg");
//网站存在缓存功能,我们不让浏览器缓存该2D图片
resp.setDateHeader("expires",-1);//Expires:响应过期的日期和时间
resp.setHeader("Cache-Control","no-cache");//Cache-Control:告诉所有的缓存机制是否可以缓存及缓存类型
resp.setHeader("Pragma","no-cache");//Pragma:包括实现特定的指令,它可应用到响应链上的任何接收方
//把图片写给浏览器
ImageIO.write(image,"jpg", resp.getOutputStream());
}
//生成随机数
private String makeNum(){
Random random = new Random();
String num = random.nextInt(9999999) + "";//带参的nextInt(int x)会生成一个范围在0~x(不包含x)内的任意正整数
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 7-num.length() ; i++) {
sb.append("0");
}
num = sb.toString() + num;
return num;
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
2.用于注册映射路径的web.xml代码
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>com.xy.servlet.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/img</url-pattern>
</servlet-mapping>
2、代码测试
如下图所示,生成的随机数验证码图片每过3s刷新一次,每次都是随机的
标签:java,resp,HttpServletResponse,验证码,随机数,import,生成,图片 来源: https://www.cnblogs.com/xypersonal/p/16310306.html