动态生成图片(验证码)

    用 servlet 生成图片(输出的不是文本,而是图片)

 

    应用:验证码 —— 防止客户端恶意发信息,如:写一个 for 循环不停发帖。

 

    public class ImageServlet extends HttpServlet {

 

        public void doGet (HttpServletRequest request, HtttpServletResponse response) throws  ServletException, IOException {

 

             response.setContentType ("image/jpeg");  // 设置响应类型

 

             BufferedImage image = new BufferedImage (600, 200, BufferedImage.TYPE_INT_RGB); 

              // 图片的内存映像,点阵信息

 

             Random r = new Random();

 

             Graphics g = image.getGraphics();  // 获得画笔对象

 

             g.setColor (new Color (r.nextInt(255), r.nextInt(255), r.nextInt(255)));  // setColor 设置当前画笔的颜色

 

             g.fillRect (0,0,600,200);

 

             g.setColor (new Color(255,255,255));

 

             g.fillOval (30,50,200,200);

 

             g.setColor (new Color(0,0,0));

 

             String number = String.valueOf(r.nextInt(99999));

 

             g.drawString (number,200,150);

 

             OutputStream os = response.getOutputStream();

 

             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);  // 压缩成 jpeg 格式

            

             encoder.encode(image); // 把 BufferedImage 对象中的图像信息编码后,向创建该对象(encoder)时指定的输出流输出

 

        }

 

    }

 

    浏览器向服务器发送请求,获得 html,当遇到<img ... />标签时,浏览器则会再向服务器发送请求(向获得图片,因此请求时给的是图片的地址(src="...")),但是浏览器也不知道该图片是原先就有的还是动态生成的,因此该图片的地址 src 可以是一个图片的位置,也可以是动态生成该图片的 servlet 。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值