jsp使用servlet實現驗證碼

來源:互聯網
上載者:User

標籤:

在進行表單設計中,驗證碼的增加恰恰可以實現是否為“人為”操作,增加驗證碼可以防止網站資料庫資訊的冗雜等...

現在,小編將講述通過servlet實現驗證碼:

驗證碼作為一個圖片,在頁面中為“畫”出來的,它是如何畫出來的呢?

<產生圖片>

{

  產生圖片的類:

  1.BufferedImage映像資料緩衝區

  2.Graphics繪製圖片

  3.color擷取顏色

  4.Random擷取隨機數

  5.ImageIO輸出圖片

}

///////////////////////////////////////////////////////////////////////////

<產生驗證碼圖片>

1.在index.jsp中寫入以下代碼

  <form action="<%= request.getContextPath()%>/servlet/LoginServlet" method="get" >    驗證碼:<input  type="text" name="checkCode"/>    <img alt="驗證碼" id="imagecode" src="<%= request.getContextPath()%>/servlet/ImageServlet"/>    <a href="javascript:reloadCode();">看不清楚</a><br>    <input type="submit" value="提交">    </form>

2.在src中建立ImageServlet類

 1 public class ImageServlet  extends HttpServlet{ 2     public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{ 3         //這個方法實現驗證碼的產生 4         BufferedImage bi=new BufferedImage(68, 22,BufferedImage.TYPE_INT_RGB);//建立映像緩衝區 5          Graphics g=bi.getGraphics(); //通過緩衝區建立一個畫布 6          Color c=new Color(200,150,255); //建立顏色 7          /*根據背景畫了一個矩形框 8           */ 9          g.setColor(c);//為畫布建立背景顏色10          g.fillRect(0, 0, 68,22); //fillRect:填充指定的矩形11          12          char[] ch="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();//轉化為字元型的數組13          Random r=new Random();14          int len=ch.length;15          int index; //index用於存放隨機數字16          StringBuffer sb=new StringBuffer();17          for(int i=0;i<4;i++)18          {19              index=r.nextInt(len);//產生隨機數字20              g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));  //設定顏色21              g.drawString(ch[index]+"",(i*15)+3, 18);//畫數字以及數位位置22              sb.append(ch[index]);23          }24          request.getSession().setAttribute("piccode",sb.toString()); //將數字保留在session中,便於後續的使用25          ImageIO.write(bi, "JPG", response.getOutputStream()); 26     }

3.在WEB-INF進行設定檔

1 <servlet>2         <servlet-name>ImageServlet</servlet-name>3         <servlet-class>code.sam.ImageServlet</servlet-class>4 </servlet>5 6 <servlet-mapping>7         <servlet-name>ImageServlet</servlet-name>8         <url-pattern>/servlet/ImageServlet</url-pattern>9 </servlet-mapping>

------華麗分割線-------

<輸入資訊與圖片中的數字進行校正>

1.建立LoginServlet類

 1 public class LoginServlet extends HttpServlet { 2     public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException 3     //用於驗證驗證碼 4     { 5         String piccode=(String) request.getSession().getAttribute("piccode"); 6         String checkCode=request.getParameter("checkCode");  //取值 7         //checkCode=checkCode.toUpperCase();  //把字元全部轉換為大寫的(此語句可以用於驗證碼不區分大小寫) 8         response.setContentType("text/html;charset=gbk");//解決亂碼問題 9         PrintWriter out=response.getWriter();10         if(checkCode.equals(piccode))11         {12             out.println("驗證碼輸入正確!");13         }14         else15         {16             out.println("驗證碼輸入錯誤!!!");17         }18         out.flush();//將流重新整理19         out.close();//將流關閉20     }

2.配置WEB-INF

1     <servlet>2         <servlet-name>LoginServlet</servlet-name>3         <servlet-class>code.sam.LoginServlet</servlet-class>4     </servlet>5 6     <servlet-mapping>7         <servlet-name>LoginServlet</servlet-name>8         <url-pattern>/servlet/LoginServlet</url-pattern>9     </servlet-mapping>

------華麗分割線-----

在點擊頁面中的看不清楚時,需要進行重新整理,在頁面中書寫一段JS代碼

1     function reloadCode()2     {3         var time=new Date().getTime();4         document.getElementById("imagecode").src="<%= request.getContextPath()%>/servlet/ImageServlet?d="+time;5     }

****************************************************

代碼全部完成

結果如***

 

jsp使用servlet實現驗證碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.