HTML 验证码 前后台全过程

15 篇文章 0 订阅
8 篇文章 0 订阅

演示

演示代码字节流

在这里插入图片描述

在这里插入图片描述

定义图片对象

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

设置画笔

x y 设置位置

在这里插入图片描述

在这里插入图片描述

画边框

在这里插入图片描述

注意 右 和 下 没有边框 ,原因是矩形打了,变小一点就可以了
在这里插入图片描述

在这里插入图片描述

写文字

在这里插入图片描述

在这里插入图片描述

验证码随机

在这里插入图片描述

在这里插入图片描述

随机干扰线

在这里插入图片描述

在这里插入图片描述

让图片在指定的位置显示

在这里插入图片描述

点击换图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

让文字变大

在这里插入图片描述

在这里插入图片描述

实战

这个是验证码的servlet

package servlet;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

@WebServlet("/verifyCode")
public class VerifyCode extends HttpServlet {
    private Random random = new Random();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //获取字节输出流的对象
        ServletOutputStream outputStream = resp.getOutputStream();

        //获得一个图片对象
        int width = 100;
        int height = 50;
        BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);


        //图片背景
        Graphics graphics = bufferedImage.getGraphics();
        graphics.setColor(Color.BLUE);
        graphics.fillRect(0, 0, width, height);

        // 验证码内边框
        graphics.setColor(Color.RED);
        graphics.drawRect(0, 0, width - 1, height - 1);

        // 获取验证码内容
        String code = getCode();
        // 存到 session
        HttpSession session = req.getSession();
        session.setAttribute("code",code);

        // 文字变大了,y 坐标就要变
        int y = 30;
        graphics.setColor(Color.YELLOW);
        // 让文字变大
        graphics.setFont(new Font("simhei", Font.PLAIN, 24));
        for (int i = 0; i < code.length(); i++) {
            String c = code.charAt(i) + "";
            int n = i + 1;
            int x = n * 20;
            graphics.drawString(c, x, y);

        }

        // 干扰线
        graphics.setColor(Color.RED);
        for (int i = 0; i < 20; i++) {
            //生成坐标
            // 横坐标
            int x1 = random.nextInt(width);
            int x2 = random.nextInt(width);
            // 纵坐标
            int y1 = random.nextInt(height);
            int y2 = random.nextInt(height);
            //画线
            graphics.drawLine(x1, y1, x2, y2);
        }

        // 返回给游览器
        ImageIO.write(bufferedImage, "jpg", outputStream);
    }

    private String getCode() {
        // 内容池
        String content = "abcdABCDEFG123456789";


        String code = "";
        for (int i = 0; i < 4; i++) {
            int idx = random.nextInt(content.length());
            char c = content.charAt(idx);
            code += c;
        }

        return code;
    }
}

下面是页面

<%--
  Created by IntelliJ IDEA.
  User: SSOA
  Date: 2022/6/9
  Time: 13:48
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css"/>
    <!--[if IE 6]>
    <script src="${pageContext.request.contextPath}/js/iepng.js" type="text/javascript"></script>
    <script type="text/javascript">
        EvPNG.fix('div, ul, img, li, input, a');
    </script>
    <![endif]-->
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.11.1.min_044d0927.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.bxslider_e88acd1b.js"></script>

    <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.8.2.min.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/menu.js"></script>

    <script type="text/javascript" src="${pageContext.request.contextPath}/js/select.js"></script>

    <script type="text/javascript" src="${pageContext.request.contextPath}/js/lrscroll.js"></script>

    <script type="text/javascript" src="${pageContext.request.contextPath}/js/iban.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/fban.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/f_ban.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/mban.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/bban.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/hban.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/tban.js"></script>

    <script type="text/javascript" src="${pageContext.request.contextPath}/js/lrscroll_1.js"></script>

    <script src="${pageContext.request.contextPath}/js/jquery-1.8.2.min.js"></script>
    <script>
        // 验证码是否OK
        var myCode_is_ok = false;

        function form_submit() {
            // 定义一个开关
            var isOk = true;
            $("input:text").each(function (idx, item) {
                var len = $(item).val().trim().length;
                if (len === 0) {
                    isOk = false;
                    return false;
                }
            })

            // 判断开关
            if (!isOk) {
                alert("数据不完整请重新再试")
                return false;
            }


            // 返回结果
            return myCode_is_ok;

        }

        // 换一张图片
        function change_code() {
            // 获取时间戳
            let s = Date().valueOf();
            // 本质就是重新找服务器要一个新的验证码的图片
            $("img.code_img").prop("src", "${pageContext.request.contextPath}/verifyCode?a=" + s)
        }

        function check_my_code() {
            alert(111)
            // 验证码是否正确
            // 发 ajax 请求
            let userCode = $("input.l_ipt").val();
            var myData = {"userCode": userCode};

            $.ajax({
                url: "checkCode",
                data: myData,
                dataType: "json",
                type: "get",
                success: function (result) {
                    console.log(result);
                    console.log(result["isOK"])
                    // 把消息给内容区
                    if (result["isOK"] === "0") {
                        // {"isOk":"0","msg":"验证码有误"}
                        $("span.code_msg").text(result["msg"]);
                        myCode_is_ok = false;
                    } else {
                        // {"isOk":"1","msg":"验证通过"}
                        $("span.code_msg").text("");
                        myCode_is_ok = true;
                    }
                    console.log(myCode_is_ok)
                }
            })


        }

        $(function () {
            change_code();
            // 非空验证
            $("form").submit(form_submit);
            // 给 a 连接添加点击事件
            $("a.change_code").click(change_code);
            // 当验证码的按钮失去焦点的时候
            $("input.l_ipt").change(check_my_code);
        })
    </script>

    <title>尤洪</title>
</head>
<body>
<!--Begin Header Begin-->
<div class="soubg">
    <div class="sou">
        <span class="fr">
        	<span class="fl">你好,请<a href="Login.html">登录</a>&nbsp; <a href="Regist.html" style="color:#ff4e00;">免费注册</a>&nbsp;
			<a href="Regist.html" style="color:#ff4e00;">验证码登录</a>&nbsp;<a href="Regist.html" style="color:#ff4e00;">微信登录</a>&nbsp;
			|<a href="#">我的订单</a>&nbsp;|<a href="#">后台管理</a>&nbsp;|<a href="#">注销
        </span>
    </div>
</div>
<!--End Header End-->
<!--Begin Login Begin-->
<div class="log_bg">
    <div class="top">
        <div class="logo"><a href="Index.html"><img src="${pageContext.request.contextPath}/images/logo.png"/></a></div>
    </div>
    <div class="regist">
        <div class="log_img"><img src="${pageContext.request.contextPath}/images/l_img.png" width="611" height="425"/>
        </div>
        <div class="reg_c">
            <form action="user" method="post">
                <input type="hidden" name="action" value="regist">
                <table border="0" style="width:420px; font-size:14px; margin-top:20px;" cellspacing="0" cellpadding="0">
                    <tr height="50" valign="top">
                        <td width="95">&nbsp;</td>
                        <td>
                            <span class="fl" style="font-size:24px;">注册</span>
                            <span class="fr">已有商城账号,<a href="Login.html" style="color:#ff4e00;">我要登录</a></span>
                        </td>
                    </tr>
                    <tr height="50">
                        <td align="right"><font color="#ff4e00">*</font>&nbsp;用户名 &nbsp;</td>
                        <td><input type="text" name="loginName" value="" class="l_user"/></td>
                    </tr>
                    <tr height="50">
                        <td align="right"><font color="#ff4e00">*</font>&nbsp;密码 &nbsp;</td>
                        <td><input type="password" name="password1" value="" class="l_pwd"/></td>
                    </tr>
                    <tr height="50">
                        <td align="right"><font color="#ff4e00">*</font>&nbsp;确认密码 &nbsp;</td>
                        <td><input type="password" name="password2" value="" class="l_pwd"/></td>
                    </tr>
                    <tr height="50">
                        <td align="right"><font color="#ff4e00">*</font>&nbsp;邮箱 &nbsp;</td>
                        <td><input type="text" name="email" value="" class="l_email"/></td>
                    </tr>
                    <tr height="50">
                        <td align="right"><font color="#ff4e00">*</font>&nbsp;手机 &nbsp;</td>
                        <td><input type="text" name="mobile" value="" class="l_tel"/></td>
                    </tr>
                    <tr height="50">
                        <td align="right">昵称 &nbsp;</td>
                        <td><input type="text" name="userName" value="" class="l_mem"/></td>
                    </tr>
                    <tr height="50">
                        <td align="right">性别 &nbsp;</td>
                        <td>
                            <input type="radio" name="sex" value="1" checked><input type="radio" name="sex" value="0"></td>
                    </tr>
                    <tr height="50">
                        <td align="right"><font color="#ff4e00">*</font>&nbsp;验证码 &nbsp;</td>
                        <td>
                            <input type="text" value="" class="l_ipt"/>
                            <img class="code_img" src="${pageContext.request.contextPath}/verifyCode" alt="验证码">
                            <a class="change_code" href="javascript:;" style="font-size:12px; font-family:'宋体';">换一张</a>
                            <span class="code_msg" style="color: red"></span>
                        </td>
                    </tr>
                    <tr>
                        <td>&nbsp;</td>
                        <td style="font-size:12px; padding-top:20px;">
                	<span style="font-family:'宋体';" class="fl">
                    	<label class="r_rad"><input type="checkbox"/></label><label class="r_txt">我已阅读并接受《用户协议》</label>
                    </span>
                        </td>
                    </tr>
                    <tr height="60">
                        <td>&nbsp;</td>
                        <td><input type="submit" value="立即注册" class="log_btn"/></td>
                    </tr>
                </table>
            </form>
        </div>
    </div>
</div>
<!--End Login End-->
<!--Begin Footer Begin-->
<div class="btmbg">
    <div class="btm">
        备案/许可证编号:蜀ICP备12009302号-1-www.dingguagua.com Copyright © 2015-2018 尤洪商城网 All Rights Reserved. 复制必究 , Technical
        Support: Dgg Group <br/>
        <img src="${pageContext.request.contextPath}/images/b_1.gif" width="98" height="33"/><img
            src="${pageContext.request.contextPath}/images/b_2.gif" width="98" height="33"/><img
            src="${pageContext.request.contextPath}/images/b_3.gif" width="98" height="33"/><img
            src="${pageContext.request.contextPath}/images/b_4.gif" width="98" height="33"/><img
            src="${pageContext.request.contextPath}/images/b_5.gif" width="98" height="33"/><img
            src="${pageContext.request.contextPath}/images/b_6.gif" width="98" height="33"/>
    </div>
</div>
<!--End Footer End -->

</body>


<!--[if IE 6]>
<script src="//letskillie6.googlecode.com/svn/trunk/2/zh_CN.js"></script>
<![endif]-->
</html>

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
网趣网上购物系统HTML静态版 V2012介绍: 一、采用先进的AJAX与XML技术相融合全站静态生成! 网趣网上购物系统HTML静态版 V2012是一套最为先进的网上开店软件!系统采用先进的AJAX技术与XML技术相融生成静态,速度更快!软件代码多重过滤可以第一时间被搜索引擎收录,独特的静态生成算法可以大大减轻服务器的负担,无论在生成速度还是安全方面都达到国内领先水平。 二、生成过程更简单易用、更直观方便! 网趣HTML静态版V2012采用更为直观的静态生成模式!所有静态生成均在一个页面完成。系统生成静态统一采用百分比及进度条直观显示,全站静态生成显示动态进度,以及生成的百度比!生成过程随时掌控,使之更直观的呈现在人们面! 三、静态生成与动态跟踪技术。实时显示页面信息! 网趣HTML静态版V2012运用先进的技术手段,在生成HTM文件的基础上,准确的显示用户当的登陆状态、新闻的浏览率、用户的身份以及相应的价格级别等信息!完美解决了HTM文件不能实时显示动态信息的瓶颈。 四、多种智能HTM生成规则,方便用户管理! 系统在生成静态HTM的基础上,以用户为出发点,加入多种智能静态生成。静态生成页面实时显示未生成的数据。例如原来有500件商品并已生成静态,今天刚添加完一百件,系统实时显示未生成静态的数据,而且可以只生成这一百件商品而无须全部生成,大大节约了时间。同时还增加ID段生成功能,根据商品起始ID进行生成静态,非常方便! 五、独特的静态生成与强大的SEO优化于一体! 事实证明,HTML静态文件快速被搜索引擎收录,网趣HTML静态版V2012在采用先进的AJAX与XML技术生成的提下,同时兼备了强大的SEO优化于一体,使您的网店推广变的尤为轻松!从此让您的网店在搜索引擎脱颖而出! 总结HTML静态版的功能优势如下: √ 第一时间被搜索引擎收录,让客户第一时间找到您! √ 大大减轻服务器负担,同等环境下,HTML静态版浏览速度要比ASP高出近10倍!即使在服务器负载较重的情况下,也不会让您漏失客户! √ 更安全!HTML静态版不存在任何漏洞,让您高枕无忧。 √ 更易维护和管理,HTML静态页面后台只须轻轻一点,即可全部生成,方便快捷! √ 是电子商务时代所趋,目较为流行的购物站均采用静态化的HTML,采用HTML静态版已是大势所趋。 六、HTML静态版拥有6套风格独特的模板 Html静态版拥有6套不同色调的模板,后台只须轻轻一点,整站风格即可瞬间更换,从此摆脱风格单一、枯燥的界面,每天给客户以新的感觉、新的享受! 七、购物系统HTML版支持三级级分类设置 网趣网上购物系统支持的三级分类设置,后台可以轻松对商品进行分类的明细化设置,添加商品,可以方便得设置一、二、三级分类的属性,对于商品较少的购物站,用户也可以只用2级分类,使购物系统的适应人群弹性更强,网站的导航分类一目了然,是购物系统最好的明细分类地图,用户可以方便得查看整站所有的类别信息。 八、支持商品图片自动删除功能 率先支持商品图片自动清除功能,众所周知,随着商品不断的上架与删除,会有很多冗余的图片占留空间,Html静态版支持删除商品的同时商品图片也随之自动删除,更节约空间,如果您的空间够大,图片也可以进行保留,后台可以方便得控制 九、率先支持Excel批量导入商品 网趣HTML静态版率先支持Excel批量导入商品功能,只须下载Excel模板按要求进行添加商品即可,添加完后通过批量添加商品功能,上传Excel文件即可一次性批量添加完成,非常方便。特别适合经常在本地来完成Excel添加,然后集批量上传的用户。同时配合程序独有的批量修改功能,管理商品变的特别轻松与方便! 十、全屏幕设计的流行风格 采用目流行的全屏幕设计风格, 流行而时尚,独特且新颖!优美的外观设计、给用户以美的视觉冲击,这是您网店成功的第一步! 十一、强大的商品输出Excel 功能 网趣支持商品数据导出Excel 电子表格功能!所有商品数据可直接输出至Excel ,对于管理员进行帐务分析、数据备份有着举足轻重的使用! 十二、支持贝宝支付接口 贝宝是全球优秀的在线支付提供商,支持国内、国外银行卡支付,网趣系统现已整合贝宝支付接口,目程序已经支持7种在线支付接口,后台可自由切换使用。 十三、现已整合财付通支付接口 财付通是腾讯推出的一款功能强大的在线支付工具,应用户的强烈要求,现已整合。程序目拥有7种在线支付接口,后台自由切换使用,极其方便! 十四、订单自动通知功能! 有新订单产生,程序具有自动邮件通知功能,可以把订单信息发送到管理员邮箱,同时也会自动发送给客户信箱,可以直接登陆邮箱就可以查收订单!! 同时新用户

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSOA6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值