1、在用戶登錄界面如何加入驗證碼,以及實現功能:
首先在myeclipse10中建立web應用程序結構如下:
在WebRoot下面導入Random.jsp文件,其代碼如下:
- <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
- <html>
- <body>
- <%!
- Color getRandColor(int fc,int bc){
- Random r=new Random();
- if(fc>255) fc=255;
- if(bc>255) bc=255;
- int red=fc+r.nextInt(bc-fc);
- int green=fc+r.nextInt(bc-fc);
- int blue=fc+r.nextInt(bc-fc);
- return new Color(red,green,blue);
- }
- %>
- <%
- response.setHeader("Pragma","No-cache");
- response.setHeader("Cache-Control","No-cache");
- response.setHeader("Expires","0");
- Random r=new Random();
- int width=60,height=20;
- BufferedImage pic=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
- Graphics gc=pic.getGraphics();
- gc.setColor(getRandColor(200,250));
- gc.fillRect(0,0,width,height);
- gc.setFont(new Font("Times New Roman",Font.PLAIN,18));
- gc.setColor(getRandColor(160,200));
- for(int i=0;i<200;i++){
- int x1=r.nextInt(width);
- int x2=r.nextInt(height);
- int x3=r.nextInt(15);
- int x4=r.nextInt(15);
- gc.drawLine(x1,x2,x1+x3,x2+x4);
- }
- gc.setColor(getRandColor(120,240));
- for(int j=0;j<100;j++){
- int x=r.nextInt(width);
- int y=r.nextInt(height);
- gc.drawOval(x,y,0,0);
- }
- String rs="";
- String rn="";
- for(int k=0;k<4;k++){
- rn=String.valueOf(r.nextInt(10));
- rs+=rn;
- gc.setColor(new Color(20+r.nextInt(110),r.nextInt(110),20+r.nextInt(110)));
- gc.drawString(rn,13*k+6,16);
- }
- gc.dispose();
- session.setAttribute("random",rs);
- ImageIO.write(pic,"JPEG",response.getOutputStream());
- out.clear();
- out=pageContext.pushBody();
- %>
- </body>
- </html>
然後建立登錄文件login.jsp,在其中加入如下代碼:
- <input type="text" name="random" />
- <img name="randImage" id="randImage" src="Random.jsp" border="2" />
- <a href="javascript:loadimage();"><font size=3>換一張</font></a>
- <%-- 調用js,中的loadimage()方法,實現驗證碼,隨即換。 --%>
所調用的js代碼如下:
- <script language="javascript">
- function loadimage(){
- document.getElementById("randImage").src = "Random.jsp?"+Math.random();
- }
- </script>
這是實現單擊--->換一張,驗證碼自動調換,如下圖所示:
其次:在登錄的LoginServlet.java中,接收並判斷驗證碼是否正確,相關代碼顯示如下:
- //檢驗驗證碼
- try{
- random=request.getParameter("random");//自己輸入的隨機驗證碼
- String ran=(String)session.getAttribute("random");//得到Random.jsp中的隨機驗證碼
- if(!random.equals(ran)){
- String s="<script language='javascript'>alert('驗證碼輸入錯誤!!');window.location.href='login.jsp'</script>";
- out.print(s);
- return;
- }
- }catch(Exception e){
- System.out.println("LoginServlet.java中,檢驗驗證碼拋出異常!");
- e.printStackTrace();
- }
第一個得到的random是自己從文本框中輸入的隨機驗證碼,第二個ran是從Random.jsp頁面中 得到的,可以從Random.jsp代碼看出來
- gc.dispose();
- session.setAttribute("random",rs);
- ImageIO.write(pic,"JPEG",response.getOutputStream());
- out.clear();
- out=pageContext.pushBody();
至此,在寫下相關登錄驗證代碼,即可完成相應的驗證碼登錄操作,感覺灰爽,可以試下哦!