Java 验证码


下面的例子是用Servlet生成的一个验证码,例子是模拟登陆。

login.jsp

  1. <%@pagelanguage="java"contentType="text/html;charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
  7. <title>验证码</title>
  8. </head>
  9. <body>
  10. <formaction="${pageContext.request.contextPath}/servlet/LoginServlet">
  11. <tableborder="0"cellspacing="0"cellpadding="0"width="50%">
  12. <tr>
  13. <tdwidth="20%"align="right">用户名:</td><tdcolspan="2"><inputtype="text"name="username"value=""size="34"/></td>
  14. </tr>
  15. <tr>
  16. <tdwidth="20%"align="right">密码:</td><tdcolspan="2"><inputtype="password"name="password"value=""size="35"/></td>
  17. </tr>
  18. <tr>
  19. <tdwidth="20%"align="right">验证码:</td><tdwidth="21%"><inputtype="text"name="code"value=""size="15"/></td><tdalign="left"><imgsrc="${pageContext.request.contextPath}/servlet/ImageCodeMakerServlet"width="100px"height="30"/></td>
  20. </tr>
  21. </table>
  22. </form>
  23. </body>
  24. </html>

在web.xml中

  1. <servlet>
  2. <servlet-name>login</servlet-name>
  3. <servlet-class>com.web.LoginServlet</servlet-class>
  4. </servlet>
  5. <servlet>
  6. <servlet-name>imageCodeMakerServlet</servlet-name>
  7. <servlet-class>com.web.ImageCodeMakerServlet</servlet-class>
  8. </servlet>
  9. <servlet-mapping>
  10. <servlet-name>login</servlet-name>
  11. <url-pattern>/servlet/LoginServlet</url-pattern>
  12. </servlet-mapping>
  13. <servlet-mapping>
  14. <servlet-name>imageCodeMakerServlet</servlet-name>
  15. <url-pattern>/servlet/ImageCodeMakerServlet</url-pattern>
  16. </servlet-mapping>


在后台Servlet里

  1. importjava.io.IOException;
  2. importjavax.servlet.ServletException;
  3. importjavax.servlet.http.HttpServlet;
  4. importjavax.servlet.http.HttpServletRequest;
  5. importjavax.servlet.http.HttpServletResponse;
  6. importjavax.servlet.http.HttpSession;
  7. publicclassLoginServletextendsHttpServlet{
  8. @Override
  9. protectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)
  10. throwsServletException,IOException{
  11. Stringusername=request.getParameter("username");
  12. Stringpassword=request.getParameter("password");
  13. Stringcode=request.getParameter("code");//页面,用户输入的验证码
  14. HttpSessionsession=request.getSession();
  15. StringrandCode=(String)session.getAttribute("randCode");//得到系统生成的验证码
  16. if(randCode.equals(code)){//验证码输入正确
  17. System.out.println("验证码输入正确");
  18. }else{
  19. System.out.println("验证码不正确");
  20. }
  21. }
  22. }


ImageCodeMakerServlet如下

  1. importjava.awt.Color;
  2. importjava.awt.Font;
  3. importjava.awt.Graphics;
  4. importjava.awt.image.BufferedImage;
  5. importjava.io.IOException;
  6. importjava.util.Random;
  7. importjavax.imageio.ImageIO;
  8. importjavax.servlet.ServletException;
  9. importjavax.servlet.http.HttpServlet;
  10. importjavax.servlet.http.HttpServletRequest;
  11. importjavax.servlet.http.HttpServletResponse;
  12. publicclassImageCodeMakerServletextendsHttpServlet{
  13. publicImageCodeMakerServlet(){
  14. super();
  15. }
  16. publicvoiddestroy(){
  17. super.destroy();
  18. }
  19. publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)
  20. throwsServletException,IOException{
  21. //首先设置页面不缓存
  22. response.setHeader("Pragma","No-cache");
  23. response.setHeader("Cache-Control","no-cache");
  24. response.setDateHeader("Expires",0);
  25. //定义图片的宽度和高度
  26. intwidth=90,height=40;
  27. //创建一个图像对象
  28. BufferedImageimage=newBufferedImage(width,height,
  29. BufferedImage.TYPE_INT_RGB);
  30. //得到图像的环境对象
  31. Graphicsg=image.createGraphics();
  32. Randomrandom=newRandom();
  33. //用随机颜色填充图像背景
  34. g.setColor(getRandColor(180,250));
  35. g.fillRect(0,0,width,height);
  36. for(inti=0;i<5;i++){
  37. g.setColor(getRandColor(50,100));
  38. intx=random.nextInt(width);
  39. inty=random.nextInt(height);
  40. g.drawOval(x,y,4,4);
  41. }
  42. //设置字体,下面准备画随机数
  43. g.setFont(newFont("",Font.PLAIN,40));
  44. //随机数字符串
  45. StringsRand="";
  46. for(inti=0;i<4;i++){
  47. //生成四个数字字符
  48. Stringrand=String.valueOf(random.nextInt(10));
  49. sRand+=rand;
  50. //生成随机颜色
  51. g.setColor(newColor(20+random.nextInt(80),20+random
  52. .nextInt(100),20+random.nextInt(90)));
  53. //将随机数字画在图像上
  54. g.drawString(rand,(17+random.nextInt(3))*i+8,34);
  55. //生成干扰线
  56. for(intk=0;k<12;k++){
  57. intx=random.nextInt(width);
  58. inty=random.nextInt(height);
  59. intxl=random.nextInt(9);
  60. intyl=random.nextInt(9);
  61. g.drawLine(x,y,x+xl,y+yl);
  62. }
  63. }
  64. //将生成的随机数字字符串写入Session
  65. request.getSession(false).setAttribute("randcode",sRand);
  66. //使图像生效
  67. g.dispose();
  68. //输出图像到页面
  69. ImageIO.write(image,"JPEG",response.getOutputStream());
  70. }
  71. /**
  72. *Initializationoftheservlet.<br>
  73. *
  74. *@throwsServletException
  75. *ifanerroroccurs
  76. */
  77. publicvoidinit()throwsServletException{
  78. //Putyourcodehere
  79. }
  80. /**
  81. *产生一个随机的颜色
  82. *
  83. *@paramfc
  84. *颜色分量最小值
  85. *@parambc
  86. *颜色分量最大值
  87. *@return
  88. */
  89. publicColorgetRandColor(intfc,intbc){
  90. Randomrandom=newRandom();
  91. if(fc>255){
  92. fc=255;
  93. }
  94. if(bc>255){
  95. bc=255;
  96. }
  97. intr=fc+random.nextInt(bc-fc);
  98. intg=fc+random.nextInt(bc-fc);
  99. intb=fc+random.nextInt(bc-fc);
  100. returnnewColor(r,g,b);
  101. }
  102. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值