网上图书商城项目学习笔记-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 }
时间: 2024-11-07 02:02:28

网上图书商城项目学习笔记-006验证码功能的相关文章

网上图书商城项目学习笔记-009退出功能

一.退出功能流程分析 二.代码 1.view层 1)top.jsp 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3 4 5 <!DOCTYPE HT

网上图书商城项目学习笔记-007登录功能实现

一.功能流程分析 二.代码 1.view层 1)login.jsp 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3 4 5 <!DOCTYPE HT

网上图书商城项目学习笔记-003系统功能模块分析

1. itcastgoods文件夹介绍2. 项目导入演示 * 导入数据库 * 导入项目,发布,运行3. 项目原型导入演示 * 导入项目原型,发布,运行4. 小工具介绍5. jQuery介绍 6. 项目前台功能介绍 * User模块 > 注册 > 激活 > 登录 > 修改密码 > 退出 * Category模块 > 显示所有分类 * Book模块 > 按分类查询(分页) > 按图名查询(模糊)(分页) > 按作者查询(分页) > 按出版社查询(分页

网上图书商城项目学习笔记-031图书管理模块介绍及添加图书

一.流程分析 1.图书管理模块介绍 2. 3. 4.添加图书第一步 5.添加图书第二步 二.代码 1.view层 (1)body.jsp 1 <body> 2 <h1 align="center">图书管理</h1> 3 <p align="center"> 4 <a href="<c:url value='/admin/AdminBookServlet?method=addPre'/>&q

网上图书商城项目学习笔记-030删除二级分类

一.流程分析 二.代码 1.view层 和一相同 2.servlet层 (1)AdminCategoryServlet.java 1 /** 2 * 删除二级分类 3 * @param req 4 * @param resp 5 * @return 6 * @throws ServletException 7 * @throws IOException 8 */ 9 public String deleteChild(HttpServletRequest req, HttpServletResp

网上图书商城项目学习笔记-004注册页面前后台的验证

一.功能分析 二.代码实现 1.前端验证 1 $(function() { 2 /* 3 * 1. 得到所有的错误信息,循环遍历之.调用一个方法来确定是否显示错误信息! 4 */ 5 $(".labelError").each(function() { 6 showError($(this));//遍历每个元素,使用每个元素来调用showError方法 7 }); 8 9 /* 10 * 2. 切换注册按钮的图片 11 */ 12 $("#submitBtn").h

网上图书商城项目学习笔记-017结算,跳转结算页面

一.流程分析 二.代码 1.view层 (1)list.jsp <tr> <td colspan="7" align="right"> <a href="javascript:jiesuan();" id="jiesuan" class="jiesuan"></a> </td> </tr> </table> <form

网上图书商城项目学习笔记-018生成订单

一.流程分析 1.订单模块介绍 2.生成订单流程 二.代码 1.view层 (1)showitem.jsp 1 <form id="form1" action="<c:url value='/OrderServlet'/>" method="post"> 2 <input type="hidden" name="cartItemIds" value="${cartIt

网上图书商城项目学习笔记-012BOOK模块查询2

一.分析 > 按图名查询(模糊)(分页)> 按作者查询(分页)> 按出版社查询(分页)> 按id查询> 多条件组合查询(分页) 二.代码 1.view层 (1)gj.jsp等 1 <form action="<c:url value='/BookServlet'/>" method="get"> 2 <input type="hidden" name="method"