亲啊嘴金,发布于:2009-09-01 13:41:38 | 2379 浏览

JSF超精简UUID验证码图片

事无巨细,网上看了下人家写的验证码,起码用到了2~3个循环,并且实现在Tomcat服务器下,看上去没什么大问题,但是每秒的并发数太高了,连最好的安腾处理器恐怕都难以应付,我们这边是企业宏观应用,几十个子站点都靠这一个验证码,最简单的办法当然是每个子站写一个,但是实际情况是有出入的,所以我还得在一张小小的验证码下花点功夫。除开考虑性能外,并且还要缩减代码量。提高效率、降低服务器负载,设法支持企业级服务器容器,经过研究和前端架构师的磨合,让验证码透明并且取消自己生成干扰码减少了一个循环和随机组让验证码背景干扰码用静态图片前端自动变换,最后得出一个能有效降低服务器负载的写法,既然我构建于javaEE,数字问题就UUID解决好了(又少了个循环),因此这个验证码当中完全没有循环原创代码。servlet和JSP通用还确保支持weblogic、glassfish、geronimo、resin、JBoss等企业级服务器
  <%@ page contentType="image/PNG" import="java.util.*,java.awt.*,java.io.*,java.awt.image.*,javax.imageio.*" pageEncoding="utf-8"%>
<%
         response.setContentType("image/png");
         response.setHeader("Pragma","no-cache");
         response.setHeader("Cache-Control","no-cache");
         response.setDateHeader ("Expires", -1);
//透明的背景88*31
        BufferedImage buffImg = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().createCompatibleImage(88, 31, Transparency.TRANSLUCENT);
        Graphics2D g2d = buffImg.createGraphics();
        g2d.setColor(Color.red);
         g2d.setFont(new Font("Times New Roman",Font.PLAIN,18));
         String uuid4 = UUID.randomUUID().toString();
         uuid4 = uuid4.substring(0,4);
           g2d.drawString(uuid4, 4, 29);

        ImageIO.write(buffImg, "PNG", response.getOutputStream());

        response.getOutputStream().close();
        out.clear();
        out = pageContext.pushBody();
%>

  1. 上一篇:JSP截取服务器桌面