zoukankan      html  css  js  c++  java
  • 网上图书商城项目学习笔记-006验证码功能

    一、使用方法

    1.jsp中

    1       <tr>
    2         <td>&nbsp;</td>
    3         <td>
    4           <span class="verifyCodeImg"><img id="vCode" width="100" src="<c:url value='/VerifyCodeServlet'/>" /></span>
    5         </td>
    6         <td><a href="javascript: _changeVerifyCode()">换一张</a></td>
    7       </tr>
    8       <tr>

    2.web.xml中配置servlet

    1   <!-- 生成验证码 -->
    2   <servlet>
    3       <servlet-name>VerifyCodeServlet</servlet-name>
    4       <servlet-class>cn.itcast.vcode.servlet.VerifyCodeServlet</servlet-class>
    5   </servlet>
    6   <servlet-mapping>
    7       <servlet-name>VerifyCodeServlet</servlet-name>
    8       <url-pattern>/VerifyCodeServlet</url-pattern>
    9   </servlet-mapping>

    二、码代码

    1.VerifyCodeServlet.java

     1 package cn.itcast.vcode.servlet;
     2 
     3 import java.awt.image.BufferedImage;
     4 import java.io.IOException;
     5 
     6 import javax.servlet.ServletException;
     7 import javax.servlet.http.HttpServlet;
     8 import javax.servlet.http.HttpServletRequest;
     9 import javax.servlet.http.HttpServletResponse;
    10 
    11 import cn.itcast.vcode.utils.VerifyCode;
    12 
    13 @SuppressWarnings("serial")
    14 public class VerifyCodeServlet extends HttpServlet {
    15     public void doGet(HttpServletRequest request, HttpServletResponse response)
    16             throws ServletException, IOException {
    17         VerifyCode vc = new VerifyCode();
    18         BufferedImage image = vc.getImage();//获取一次性验证码图片
    19         // 该方法必须在getImage()方法之后来调用
    20 //        System.out.println(vc.getText());//获取图片上的文本
    21         VerifyCode.output(image, response.getOutputStream());//把图片写到指定流中
    22         
    23         // 把文本保存到session中,为LoginServlet验证做准备
    24         request.getSession().setAttribute("vCode", vc.getText());
    25     }
    26 }

    2.VerifyCode.java

     1 package cn.itcast.vcode.utils;
     2 
     3 import java.awt.BasicStroke;
     4 import java.awt.Color;
     5 import java.awt.Font;
     6 import java.awt.Graphics2D;
     7 import java.awt.image.BufferedImage;
     8 import java.io.IOException;
     9 import java.io.OutputStream;
    10 import java.util.Random;
    11 
    12 import javax.imageio.ImageIO;
    13 
    14 public class VerifyCode {
    15     private int w = 70;
    16     private int h = 35;
    17      private Random r = new Random();
    18      // {"宋体", "华文楷体", "黑体", "华文新魏", "华文隶书", "微软雅黑", "楷体_GB2312"}
    19     private String[] fontNames  = {"宋体", "华文楷体", "黑体", "微软雅黑", "楷体_GB2312"};
    20     private String codes  = "23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ";
    21     private Color bgColor  = new Color(255, 255, 255);
    22     private String text ;
    23     
    24     private Color randomColor () {
    25         int red = r.nextInt(150);
    26         int green = r.nextInt(150);
    27         int blue = r.nextInt(150);
    28         return new Color(red, green, blue);
    29     }
    30     
    31     private Font randomFont () {
    32         int index = r.nextInt(fontNames.length);
    33         String fontName = fontNames[index];
    34         int style = r.nextInt(4);
    35         int size = r.nextInt(5) + 24; 
    36         return new Font(fontName, style, size);
    37     }
    38     
    39     private void drawLine (BufferedImage image) {
    40         int num  = 3;
    41         Graphics2D g2 = (Graphics2D)image.getGraphics();
    42         for(int i = 0; i < num; i++) {
    43             int x1 = r.nextInt(w);
    44             int y1 = r.nextInt(h);
    45             int x2 = r.nextInt(w);
    46             int y2 = r.nextInt(h); 
    47             g2.setStroke(new BasicStroke(1.5F)); 
    48             g2.setColor(Color.BLUE); 
    49             g2.drawLine(x1, y1, x2, y2);
    50         }
    51     }
    52     
    53     private char randomChar () {
    54         int index = r.nextInt(codes.length());
    55         return codes.charAt(index);
    56     }
    57     
    58     private BufferedImage createImage () {
    59         BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
    60         Graphics2D g2 = (Graphics2D)image.getGraphics(); 
    61         g2.setColor(this.bgColor);
    62         g2.fillRect(0, 0, w, h);
    63          return image;
    64     }
    65     
    66     public BufferedImage getImage () {
    67         BufferedImage image = createImage(); 
    68         Graphics2D g2 = (Graphics2D)image.getGraphics();
    69         StringBuilder sb = new StringBuilder();
    70         // 向图片中画4个字符
    71         for(int i = 0; i < 4; i++)  {
    72             String s = randomChar() + ""; 
    73             sb.append(s); 
    74             float x = i * 1.0F * w / 4; 
    75             g2.setFont(randomFont()); 
    76             g2.setColor(randomColor()); 
    77             g2.drawString(s, x, h-5); 
    78         }
    79         this.text = sb.toString(); 
    80         drawLine(image); 
    81         return image;        
    82     }
    83     
    84     public String getText () {
    85         return text;
    86     }
    87     
    88     public static void output (BufferedImage image, OutputStream out) 
    89                 throws IOException {
    90         ImageIO.write(image, "JPEG", out);
    91     }
    92 }
  • 相关阅读:
    通过field:global给子元素添加css样式
    TP5 调用邮箱接口
    php数组使用json_encode函数中文被编码成null的原因和解决办法
    UNIX系统上的抓包工具tcpdump常用命令说明
    快速搭建ELK7.5版本的日志分析系统--搭建篇
    Kubernetes实战之部署ELK Stack收集平台日志
    k8s实战之部署Prometheus+Grafana可视化监控告警平台
    Linux防火墙firewalld安全设置
    在zabbix中实现发送带有图片的邮件和微信告警
    用Dockerfile部署zabbix
  • 原文地址:https://www.cnblogs.com/shamgod/p/5157193.html
Copyright © 2011-2022 走看看