jsp验证码

一.jsp页面

<script language="javascript" type="text/javascript">
            //刷新验证码
            function showRand(){
                document.getElementById("random").src = "<%=path%>/common/image.jsp?date=" + new date();
            }

</script>

<body>

           <p class="test" id="p_randCode" style="display:none">
                 <b>验证码</b>
                 <input type="text" value="" class="txt_change" id="confirmCode" name="confirmCode">
                 <img align="middle" border=0 src="image.jsp" id="random" height="20">
                 <a style="cursor: pointer;align:left" onclick="showRand();" >换一张</a>
                 <input type="hidden" id="confirmRand" name="confirmRand" />
             </p>

</body>

 

二.显示验证码图片的image.jsp

<%@ page contentType="image/jpeg" import="com.sun.image.codec.jpeg.*,java.awt.image.*,java.awt.*,java.util.*"%>
<%
    request.setCharacterEncoding("GBK");
    response.setContentType("text/html; charset=GBK");


    String rand = "0000";//随机生成验证码


    if(request.getParameter("rand") != null){
        rand = (String)request.getParameter("rand");
        request.getSession().setAttribute("rand",rand);
    }
    try{
        out.clear();
        response.setContentType("image/jpeg");
        response.addHeader("pragma", "NO-cache");
        response.addHeader("Cache-Control", "no-cache");
        response.addDateHeader("Expries", 0);
        int width = 60, height = 20;
        BufferedImage image = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        Random random = new Random();
        int fc = 200, bc = 255;
        if (fc > 255) {
            fc = 255;
        }
        if (bc > 255) {
            bc = 255;
        }
        int red = fc + random.nextInt(bc - fc);
        int green = fc + random.nextInt(bc - fc);
        int blue = fc + random.nextInt(bc - fc);
        Color color = new Color(red, green, blue);
        
        g.setColor(color);
        g.setFont(new Font("Times New Roman", Font.PLAIN, 18));    
        g.fillRect(0, 0, width, height);
        
        for (int i = 0; i < 100; i++) {
            int x = random.nextInt(width);
            int y = random.nextInt(height);
            int xl = random.nextInt(12);
            int yl = random.nextInt(12);
            g.drawLine(x, y, x + xl, y + yl);
        }
        
        int stringLength = 4;
        String sRand="";
        for (int i = 0; i < stringLength; i++) {
            String randStr = String.valueOf(rand.charAt(i));
            sRand+=randStr;
            g.setColor(new Color(20 + random.nextInt(110), 20 + random
                    .nextInt(110), 20 + random.nextInt(110)));
            g.drawString(randStr, 13 * i + 6, 16);
        }
        session.setAttribute("ccode",sRand);
        g.dispose();
        
        ServletOutputStream outStream = response.getOutputStream();
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outStream);
        encoder.encode(image);
        outStream.close();
        out.clear();
        out = pageContext.pushBody();
    } catch (Exception e){
    }
%>

posted @ 2015-07-13 09:17  songjinduo  阅读(196)  评论(0编辑  收藏  举报