您现在的位置: 365建站网 > 365学习 > 动态生成图片(验证码)

动态生成图片(验证码)

文章来源:365jz.com     点击数:229    更新时间:2009-10-23 08:49   参与评论

    用 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 。

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛


发表评论 (229人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片
最新评论
------分隔线----------------------------