JSP/JAVA

          JAVA SERVER PAGES

          Java生成圖片驗(yàn)證碼

           

          import java.io.*;
              
          import java.net.*;
              
          import javax.servlet.*;
              
          import javax.servlet.http.*;
              
          import java.awt.*;
              
          import java.awt.image.*;
              
          import java.util.*;
              
          import javax.imageio.*;
              
          /**
               *
               * 
          @author http://www.tot.name
               * 
          @version
               
          */

              
          public class Image extends HttpServlet {

              
          /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
               * 
          @param request servlet request
               * 
          @param response servlet response
               
          */

              
          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();
                  
          // 在內(nèi)存中創(chuàng)建圖象
                  int width=60, height=20;
                  BufferedImage image 
          = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

                  
          // 獲取圖形上下文
                  Graphics g = image.getGraphics();

                  
          //生成隨機(jī)類
                  Random random = new Random();

                  
          // 設(shè)定背景色
                  g.setColor(getRandColor(200,250));
                  g.fillRect(
          00, width, height);

                  
          //設(shè)定字體
                  g.setFont(new Font("Times New Roman",Font.PLAIN,18));

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


                  
          // 隨機(jī)產(chǎn)生155條干擾線,使圖象中的認(rèn)證碼不易被其它程序探測(cè)到
                  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);
                  }


                  
          // 取隨機(jī)產(chǎn)生的認(rèn)證碼(4位數(shù)字)
                  String sRand="";
                  
          for (int i=0;i<4;i++){
                      String rand
          =String.valueOf(random.nextInt(10));
                      sRand
          +=rand;
                      
          // 將認(rèn)證碼顯示到圖象中
                      g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//調(diào)用函數(shù)出來的顏色相同,可能是因?yàn)榉N子太接近,所以只能直接生成
                      g.drawString(rand,13*i+6,16);
                  }


                  
          // 將認(rèn)證碼存入SESSION
                  session.setAttribute("rand",sRand);
                  
          // 圖象生效
                  g.dispose();
                  ServletOutputStream responseOutputStream 
          =response.getOutputStream();
                  
          // 輸出圖象到頁面
                  ImageIO.write(image, "JPEG", responseOutputStream);

                  
          //以下關(guān)閉輸入流!
                  responseOutputStream.flush();
                  responseOutputStream.close();
              }

              Color getRandColor(
          int fc,int bc){//給定范圍獲得隨機(jī)顏色
                  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);
              }

              
          // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
              /** Handles the HTTP <code>GET</code> method.
               * 
          @param request servlet request
               * 
          @param response servlet response
               
          */

              
          protected void doGet(HttpServletRequest request, HttpServletResponse response)
              
          throws ServletException, IOException {
                  processRequest(request, response);
              }


              
          /** Handles the HTTP <code>POST</code> method.
               * 
          @param request servlet request
               * 
          @param response servlet response
               
          */

              
          protected void doPost(HttpServletRequest request, HttpServletResponse response)
              
          throws ServletException, IOException {
                  processRequest(request, response);
              }


              
          /** Returns a short description of the servlet.
               
          */

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

              
          // </editor-fold>
              }



          ---------------使用驗(yàn)證碼圖片的文件---------index.jsp------------------------------------

          <%@ page contentType="text/html;charset=gb2312" %>
              
          <!DOCTYPE HTML PUBLIC "-//W 3C//DTD HTML 4.01 Transitional//EN">
              
          <html>
              
          <head>
              
          <title>認(rèn)證碼輸入頁面</title>
              
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
              
          <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
              
          <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
              
          <META HTTP-EQUIV="Expires" CONTENT="0">
              
          </head>
              
          <body>
              
          <form method=post action="check.jsp">
              
          <table>
              
          <tr>
              
          <td align=left>系統(tǒng)產(chǎn)生的認(rèn)證碼:</td>
              
          <td><img border=0 src="http://www.zhmy.com/image"></td>
              
          </tr>
              
          <tr>
              
          <td align=left>輸入上面的認(rèn)證碼:</td>
              
          <td><input type=text name=rand maxlength=4 value=""></td>
              
          </tr>
              
          <tr>
              
          <td colspan=2 align=center><input type=submit value="提交檢測(cè)"></td>
              
          </tr>
              
          </form>
              
          </body>
              
          </html>

          -----------------驗(yàn)證的頁面----------check.jsp------------------------------
          <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
              
          <html>
              
          <head>
              
          <title>認(rèn)證碼驗(yàn)證頁面</title>
              
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
              
          <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
              
          <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
              
          <META HTTP-EQUIV="Expires" CONTENT="0">
              
          </head>

              
          <body>
              
          <%
              
          String rand = (String)session.getAttribute("rand");
              
          String input = request.getParameter("rand");
              
          %>
              系統(tǒng)產(chǎn)生的認(rèn)證碼為: 
          <%= rand %><br/>
              您輸入的認(rèn)證碼為: 
          <%= input %><br/>
              
          <br/>
              
          <%
                
          if (rand.equals(input)) {
              
          %>
              
          <font color=green>輸入相同,認(rèn)證成功!</font>
              
          <%
                } 
          else {
              
          %>
              
          <font color=red>輸入不同,認(rèn)證失敗!</font>
              
          <%
                }
              
          %>
              
          </body>
              
          </html>

          posted on 2009-06-27 12:24 C雞雞 閱讀(154) 評(píng)論(0)  編輯  收藏 所屬分類: JSP


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          My Links

          Blog Stats

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          友情鏈接

          學(xué)習(xí)網(wǎng)站

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 乐亭县| 汉源县| 德令哈市| 米林县| 大埔县| 忻州市| 牙克石市| 陕西省| 宣化县| 金华市| 南昌市| 乌拉特后旗| 平邑县| 桐城市| 东光县| 富蕴县| 新化县| 老河口市| 扎赉特旗| 兴义市| 长治市| 天峨县| 东辽县| 黄梅县| 新河县| 无锡市| 瑞丽市| 融水| 高要市| 洱源县| 隆德县| 溧阳市| 湖州市| 黄冈市| 阳山县| 天门市| 东海县| 中阳县| 康乐县| 仲巴县| 江永县|