使用Servlet实现验证码
	  没有验证码带来的问题
	  对特定用户不断登录破解密码。
	  对某个网站创建账户。
	  对某个网站提交垃圾数据。
	  对某个网站刷票。
	  通过验证码由用户肉眼识别其中的验证码信息,从而区分用户是人还是计算机。
	  定义:
	  验证码(CAPTCHA):是一种区分用户是计算机还是人的公共全自动程序。
	  作用:防止恶意破解密码、刷票、论坛灌水,防止黑客暴力破解。
	  使用Servlet实现验证码
	  实现图片验证码类GenerateImageCodeServlet.java
	  GenerateImageCodeServlet.java
	  importjava.awt.Color;
	  importjava.awt.Font;
	  importjava.awt.Graphics;
	  importjava.awt.image.BufferedImage;
	  importjava.io.IOException;
	  importjava.util.Date;
	  importjava.util.Random;
	  importjavax.imageio.ImageIO;
	  importjavax.servlet.ServletException;
	  importjavax.servlet.http.HttpServlet;
	  importjavax.servlet.http.HttpServletRequest;
	  importjavax.servlet.http.HttpServletResponse;
	  publicclassGenerateImageCodeServletextendsHttpServlet{
	  privatestaticfinallongserialVersionUID=1L;
	  privatestaticfinalchar[]CH="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".toCharArray();
	  privatestaticfinalintIMAGE_WIDTH=73;
	  privatestaticfinalintIMAGE_HEIGHT=28;
	  privatestaticfinalintLINE_NUM=30;
	  privatestaticfinalintRANDOM_NUM=4;
	  Randomrandom=newRandom();
	  @Override
	  protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
	  throwsServletException,IOException{
	  response.setContentType("image/jpg");//设置相应类型,告诉浏览器输出的内容为图片
	  response.setHeader("Pragma","No-cache");//设置响应头信息,告诉浏览器不要缓存此内容
	  response.setHeader("Cache-Control","no-cache");
	  response.setDateHeader("Expire",newDate().getTime());
	  BufferedImagebi=newBufferedImage(IMAGE_WIDTH,IMAGE_HEIGHT,BufferedImage.TYPE_INT_BGR);
	  Graphicsg=bi.getGraphics();
	  g.fillRect(0,0,IMAGE_WIDTH,IMAGE_HEIGHT);
	  g.setColor(getRandomColor(110,133));
	  g.setFont(newFont("TimesNewRoman",Font.ROMAN_BASELINE,18));
	  //绘制干扰线
	  for(inti=1;i<=LINE_NUM;i++){
	  intx=random.nextInt(IMAGE_WIDTH);
	  inty=random.nextInt(IMAGE_HEIGHT);
	  intxl=random.nextInt(13);
	  intyl=random.nextInt(15);
	  g.drawLine(x,y,x+xl,y+yl);
	  }
	  //绘制随机字符
	  StringBuildersb=newStringBuilder();
	  Stringstr=null;
	  for(inti=0;i<RANDOM_NUM;i++){
	  g.setFont(newFont("Fixedsys",Font.CENTER_BASELINE,18));
	  g.setColor(newColor(random.nextInt(101),random.nextInt(111),random.nextInt(121)));
	  str=CH[random.nextInt(CH.length)]+"";
	  g.drawString(str,13*i,16);
	  g.translate(random.nextInt(3),random.nextInt(3));
	  sb.append(str);
	  }
	  g.dispose();
	  request.getSession().setAttribute("safeCode",sb.toString());
	  ImageIO.write(bi,"JPG",response.getOutputStream());
	  }
	  /**
	  *获得颜色
	  */
	  privateColorgetRandomColor(intfc,intbc){
	  if(fc>255)
	  fc=255;
	  if(bc>255)
	  bc=255;
	  intr=fc+random.nextInt(bc-fc-16);
	  intg=fc+random.nextInt(bc-fc-14);
	  intb=fc+random.nextInt(bc-fc-18);
	  returnnewColor(r,g,b);
	  }
	  }
	  登录验证LoginServlet.java
	  importjava.io.IOException;
	  importjava.io.PrintWriter;
	  importjavax.servlet.ServletException;
	  importjavax.servlet.http.HttpServlet;
	  importjavax.servlet.http.HttpServletRequest;
	  importjavax.servlet.http.HttpServletResponse;
	  publicclassLoginServletextendsHttpServlet{
	  privatestaticfinallongserialVersionUID=1L;
	  @Override
	  protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{
	  resp.setContentType("text/html;charset=gbk");
	  StringsafeCode=(String)req.getSession().getAttribute("safeCode");
	  Stringcheckcode=req.getParameter("checkcode");
	  PrintWriterout=resp.getWriter();
	  if(safeCode.equalsIgnoreCase(checkcode)){
	  out.println("验证码正确");
	  }
	  else{
	  out.println("验证码错误");
	  }
	  out.flush();
	  out.close();
	  }
	  }
	  web.xml
	  <?xmlversion="1.0"encoding="UTF-8"?>
	  <web-appid="WebApp_ID"version="3.0"xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	  <servlet>
	  <servlet-name>ImageCodeServlet</servlet-name>
	  <servlet-class>com.lijy.servlet.GenerateImageCodeServlet</servlet-class>
	  </servlet>
	  <servlet>
	  <servlet-name>LoginServlet</servlet-name>
	  <servlet-class>com.lijy.servlet.LoginServlet</servlet-class>
	  </servlet>
	  <servlet-mapping>
	  <servlet-name>ImageCodeServlet</servlet-name>
	  <url-pattern>/safe_code</url-pattern>
	  </servlet-mapping>
	  <servlet-mapping>
	  <servlet-name>LoginServlet</servlet-name>
	  <url-pattern>/login</url-pattern>
	  </servlet-mapping>
	  <welcome-file-list>
	  <welcome-file>index.jsp</welcome-file>
	  </welcome-file-list>
	  </web-app>
	  index.jsp
	  <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
	  <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
	  <html>
	  <head>
	  <metahttp-equiv="Content-Type"content="text/html;charset=ISO-8859-1">
	  <title>checkcodes</title>
	  <scripttype="text/javascript">
	  functionreloadCode(){
	  vartime=newDate().getTime();
	  document.getElementById("imagecode").src="<%=request.getContextPath()%>/safe_code?d="+time;
	  }
	  </script>
	  </head>
	  <body>
	  <formaction="<%=request.getContextPath()%>/login"method="get">
	  验证码:<inputtype="text"name="checkcode"/>
	  <imgalt="验证码"id="imagecode"src="<%=request.getContextPath()%>/safe_code">
	  <ahref="javascript:reloadCode();">看不清楚</a><br/>
	  <inputtype="submit"value="提交"/>
	  <hr>
	  </form>
	  </body>
	  </html>
                    	
                    	
                    	  
                    	    
                    	    
                    	    
                    	 
    如果您觉得本文的内容对您的学习有所帮助:
     
                    	
                    	   
                    	   关键字:
jquery