JSP/JAVA

          JAVA SERVER PAGES

          Java生成圖片驗證碼

           

          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();
                  
          // 在內存中創建圖象
                  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(
          00, 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);
              }

              
          // <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>
              }



          ---------------使用驗證碼圖片的文件---------index.jsp------------------------------------

          <%@ page contentType="text/html;charset=gb2312" %>
              
          <!DOCTYPE HTML PUBLIC "-//W 3C//DTD HTML 4.01 Transitional//EN">
              
          <html>
              
          <head>
              
          <title>認證碼輸入頁面</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>系統產生的認證碼:</td>
              
          <td><img border=0 src="http://www.zhmy.com/image"></td>
              
          </tr>
              
          <tr>
              
          <td align=left>輸入上面的認證碼:</td>
              
          <td><input type=text name=rand maxlength=4 value=""></td>
              
          </tr>
              
          <tr>
              
          <td colspan=2 align=center><input type=submit value="提交檢測"></td>
              
          </tr>
              
          </form>
              
          </body>
              
          </html>

          -----------------驗證的頁面----------check.jsp------------------------------
          <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
              
          <html>
              
          <head>
              
          <title>認證碼驗證頁面</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");
              
          %>
              系統產生的認證碼為: 
          <%= rand %><br/>
              您輸入的認證碼為: 
          <%= input %><br/>
              
          <br/>
              
          <%
                
          if (rand.equals(input)) {
              
          %>
              
          <font color=green>輸入相同,認證成功!</font>
              
          <%
                } 
          else {
              
          %>
              
          <font color=red>輸入不同,認證失敗!</font>
              
          <%
                }
              
          %>
              
          </body>
              
          </html>

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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          My Links

          Blog Stats

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          友情鏈接

          學習網站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 句容市| 延安市| 湘乡市| 临湘市| 荔浦县| 浦江县| 娱乐| 峡江县| 镇安县| 眉山市| 滦平县| 枣阳市| 东乡族自治县| 玉林市| 苍溪县| 怀仁县| 抚松县| 垫江县| 北碚区| 大新县| 沈阳市| 大石桥市| 阳信县| 青海省| 沅陵县| 奉新县| 黄山市| 登封市| 榆树市| 巍山| 浮山县| 定安县| 和龙市| 永寿县| 岳阳市| 高台县| 庆云县| 东兰县| 探索| 盖州市| 樟树市|