新建一个ImageServlet类,内容如下:
public class ImageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//通过设置Header的键值对来让浏览器五秒刷新一次
resp.setHeader("refresh","3");
//在内存中创建一个图片
BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
//得到图片,可以想象成一支笔
Graphics2D graphics2D = (Graphics2D) image.getGraphics();
//设置笔的颜色为白色
graphics2D.setColor(Color.white);
//用白色笔给框内从(0,0)到(80,20)点设置背景颜色
graphics2D.fillRect(0,0,80,20);
//给图片写数据
graphics2D.setColor(Color.BLUE);
graphics2D.setFont(new Font(null,Font.BOLD,20));
graphics2D.drawString(makeRandomNum(),0,20);
//告诉浏览器这个请求用图片的方式打开
resp.setContentType("image/jpeg");
//网站存在缓存,我们通过设置DateHeader和Header键值对来让浏览器缓存
resp.setDateHeader("expires",-1);
resp.setHeader("Cache-Control","no-cache");
resp.setHeader("pragma","no-cache");
//把图片写给浏览器
ImageIO.write(image,"jpg",resp.getOutputStream());
}
//生成随机数
private String makeRandomNum(){
Random random = new Random();
String num = random.nextInt(9999999)+"";//此处的精妙之处在于加一个为空的字符串,使数字自动变成字符串
StringBuffer stringBuffer =new StringBuffer();//
for (int i = 0; i < 7- num.length(); i++) {
stringBuffer.append("0");//确保哪怕生成的数字不够7位,也自动填充0补上
}
num = stringBuffer.toString() + num;
return num;
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
注册Servlet内容如下
<servlet>
<servlet-name>DownloadImage</servlet-name>
<servlet-class>com.sunsplanter.servlet.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownloadImage</servlet-name>
<url-pattern>/Image</url-pattern>
</servlet-mapping>
运行后能得到80x20宽的框,里面写入了7位数字验证码.