`
lysvanilla
  • 浏览: 78783 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

彩色验证码

阅读更多

MakePicture.java产生图片的类:

package com.strongit.zwjc.util;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import javax.imageio.*;


public class MakePicture extends HttpServlet { 

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("image/jpeg");
        response.setHeader("Pragma","No-cache");
        response.setHeader("Cache-Control","no-cache");
        response.setDateHeader("Expires", 0);       
        HttpSession session=request.getSession();
        // 在内存中创建图象
        int width=60, height=20;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        // 获取图形上下文
        Graphics g = image.getGraphics();

        //生成随机类
        Random random = new Random();

        // 设定背景色
        g.setColor(getRandColor(200,250));
        g.fillRect(0, 0, width, height);

        //设定字体
        g.setFont(new Font("Times New Roman",Font.PLAIN,18));

        //画边框
        //g.setColor(new Color());
        //g.drawRect(0,0,width-1,height-1);


        // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
        g.setColor(getRandColor(160,200));
        for (int i=0;i<155;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);
        }

        // 取随机产生的认证码(4位数字)
        String sRand="";
        for (int i=0;i<4;i++){
            String rand=String.valueOf(random.nextInt(10));
            sRand+=rand;
            // 将认证码显示到图象中
            g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
            g.drawString(rand,13*i+6,16);
        }

        // 将认证码存入SESSION
        session.setAttribute("rand",sRand);
        // 图象生效
        g.dispose();
        ServletOutputStream responseOutputStream =response.getOutputStream();
        // 输出图象到页面
        ImageIO.write(image, "JPEG", responseOutputStream);

        //以下关闭输入流!
        responseOutputStream.flush();
        responseOutputStream.close();
    }
    Color getRandColor(int fc,int bc){//给定范围获得随机颜色
        Random random = new Random();
        if(fc>255) fc=255;
        if(bc>255) bc=255;
        int r=fc+random.nextInt(bc-fc);
        int g=fc+random.nextInt(bc-fc);
        int b=fc+random.nextInt(bc-fc);
        return new Color(r,g,b);
    }
   
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    public String getServletInfo() {
        return "Short description";
    }

}

 页面代码:

<%@ page language="java" pageEncoding="UTF-8"%>
<html>
    <head>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
        <link href="css/datagather_login.css" rel="stylesheet" type="text/css">
        <title>个性化门户登陆页面</title>
        <script type="text/javascript">
            var request = false;
            function refresh(){
                  document.getElementById("makePicture").src="makePicture?now="+ new Date();
              }
        </script>
    </head>
    <body>
        <form action="" method="post" id="form1" name="form1">
            <table width="100%" height="100%" border="0" cellspacing="0"
                cellpadding="0">
                <tr>
                    <td align="center">
                        <table width="607" align="center" border="0" cellspacing="0"
                            cellpadding="0">
                            <tr>
                                <td valign="bottom">
                                    <img src="images/portlettools/login/titleportal.jpg"
                                        width="682" height="103" />
                                </td>
                            </tr>
                            <tr>
                                <td valign="top" align="right"
                                    background="images/portlettools/login/bg.jpg" width="607"
                                    height="288">
                                    <table width="38%" border="0" cellspacing="0" cellpadding="0">
                                        <tr>
                                            <td height="30">
                                                &nbsp;
                                            </td>
                                        </tr>
                                        <tr>
                                            <td height="100">
                                                <table width="100%" height="100" border="0" cellspacing="0"
                                                    cellpadding="0">
                                                    <tr>
                                                        <td width="52" class="tt">
                                                            用户名:
                                                        </td>
                                                        <td colspan="2" class="lo_input">
                                                            <input name="username" height="40" type="text"
                                                                style="width:132" onfocus="true" class="lo_input"
                                                                size="18" />
                                                        </td>
                                                    </tr>
                                                    <tr>
                                                        <td width="52" class="tt">
                                                            密 码:
                                                        </td>
                                                        <td colspan="2" class="lo_input">
                                                            <input id="password" name="password" type="password"
                                                                style="width:132"
                                                                onkeydown="if(event.keyCode==13) gotoSubmit();"
                                                                size="18" />
                                                        </td>
                                                    </tr>
                                                    <tr>
                                                        <td width="52" class="tt">
                                                            验证码:
                                                        </td>
                                                        <td width="70">
                                                            <input type="text" name="checkCode" size="4"
                                                                maxlength="4"
                                                                onkeydown="if(event.keyCode==13) gotoSubmit();">
                                                        </td>
                                                        <td>
                                                            <img src="makePicture" id="makePicture">
                                                        </td>
                                                    </tr>
                                                    <tr>
                                                        <td width="52"></td>
                                                        <td>
                                                        <td>
                                                            <font color="blue"><a href="#" onclick="refresh()">看不清</a>
                                                            </font>
                                                        </td>
                                                    </tr>
                                                </table>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <table width="210" align="left" border="0" cellspacing="0"
                                                    cellpadding="0" height="80">
                                                    <tr>
                                                        <td align="left">
                                                            <img src="images/portlettools/login/login.jpg" width="76"
                                                                height="35" onclick="gotoSubmit();" style="cursor:hand;" />
                                                        </td>
                                                        <td>
                                                            <img src="images/portlettools/login/cancle.jpg"
                                                                width="76" height="35" style="cursor:hand;"
                                                                onclick="gotoReset()" />
                                                        </td>
                                                    </tr>
                                                </table>
                                            </td>
                                        </tr>
                                    </table>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
        </form>
    </body>
</html>

 

WEB.XML中设置:

<servlet>
        <servlet-name>makePicture</servlet-name>
        <servlet-class>
            com.strongit.zwjc.util.MakePicture
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>makePicture</servlet-name>
        <url-pattern>/makePicture</url-pattern>
    </servlet-mapping>

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics