day84 json中实现简单验证码

news/2024/9/23 7:58:02/

项目中的问题:
        1 修改JS或CSS后,页面不能及时更新?
                把浏览器-->"开发者工具"-->"网络"-->选中"禁用缓存"
        2 如何把HTML页面转为JSP页面
 将jsp页面中的<%@ page contentType="text/html;charset=UTF-8" language="java" %>指令复制到html文件头

3 如何实现简单验证码操作:  

          生成验证码的RandomCodeController类

java">package com.xja.controller; /*** @author 赵淑娜* Date  2024/4/26 10:15*/import javax.imageio.ImageIO;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;@WebServlet(name = "randomCode.do", value = "/RandomCodeController")
public class RandomCodeController extends HttpServlet {private static final String CONTENT_TYPE = "image/jpeg";//Initialize global variablespublic void init() throws ServletException {}//产生随机颜色函数getRandColorColor getRandColor(int fc, int bc) {Random r = new Random();if (fc > 255) fc = 255;if (bc > 255) bc = 255;int red = fc + r.nextInt(bc - fc); //红int green = fc + r.nextInt(bc - fc); //绿int blue = fc + r.nextInt(bc - fc); //蓝return new Color(red, green, blue);}//Process the HTTP Get requestpublic void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {response.setContentType(CONTENT_TYPE);HttpSession session = request.getSession();//设置页面不缓存response.setHeader("Pragma", "No-cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);//创建随机类Random r = new Random();// 在内存中创建图像,宽度为width,高度为heightint width = 60, height = 20;BufferedImage pic = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 获取图形上下文环境Graphics gc = pic.getGraphics();// 设定背景色并进行填充gc.setColor(getRandColor(200, 250));gc.fillRect(0, 0, width, height);//设定图形上下文环境字体gc.setFont(new Font("Times New Roman", Font.PLAIN, 20));// 随机产生200条干扰直线,使图像中的认证码不易被其他分析程序探测到for (int i = 0; i < 200; i++) {int x1 = r.nextInt(width);int y1 = r.nextInt(height);int x2 = r.nextInt(15);int y2 = r.nextInt(15);gc.setColor(getRandColor(160, 200));gc.drawLine(x1, y1, x1 + x2, y1 + y2);}//随机产生100个干扰点,使图像中的验证码不易被其他分析程序探测到for (int i = 0; i < 100; i++) {int x = r.nextInt(width);int y = r.nextInt(height);gc.setColor(getRandColor(120, 240));gc.drawOval(x, y, 0, 0);}// 随机产生4位数字的验证码String RS = "";String rn = "";RS = r.nextInt(9000) + 1000 + "";/*for(int i=0;i<4;i++){//产生10以内随机数字rnrn=String.valueOf(r.nextInt(10));RS+=rn;//将认证码用drawString函数显示到图像里gc.setColor(new Color(20+r.nextInt(110),20+r.nextInt(110),20+r.nextInt(110)));gc.drawString(rn,13*i+6,16);}*/gc.setColor(new Color(20 + r.nextInt(110), 20 + r.nextInt(110),20 + r.nextInt(110)));gc.drawString(RS, 10, 16);// 释放图形上下文环境gc.dispose();// 将认证码RS存入SESSION中共享session.setAttribute("random", RS);// 输出生成后的验证码图像到页面ImageIO.write(pic, "JPEG", response.getOutputStream());}//Process the HTTP Post requestpublic void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {doGet(request, response);}//Clean up resourcespublic void destroy() {}
}

        显示生成的验证码:

                <img src="${pageContext.request.contextPath}/RandomCodeController" />

      

         生成的验证码在session对象中存储:

                  session.setAttribute("random", RS) ;       
         

         "看不清",点击事件相关操作: 重新给图片设置src属性值:
               

      $("#codeImg").attr("src",$("#path").val()+"/RandomCodeController?t="+Math.random())


http://www.ppmy.cn/news/1444590.html

相关文章

07_for循环返回值while循环

文章目录 1.循环返回值2.yield接收for返回值3.scala调用yield方法创建线程对象4.scala中的while循环5.scala中的流程控制 1.循环返回值 for循环返回值是Unit 原因是防止产生歧义&#xff1b; 2.yield接收for返回值 // 2.yield关键字打破循环&#xff0c;可以使for循环输出…

WEB攻防-PHP特性-metinfoCMS审计实例

前置知识&#xff1a;PHP函数缺陷 测试环境&#xff1a;MetInfo CMS 函数缺陷导致的任意文件读取 漏洞URL&#xff1a;/include/thumb.php?dir 漏洞文件位置&#xff1a;MetInfo6.0.0\app\system\include\module\old_thumb.class.php <?phpdefined(IN_MET) or exit(No…

Qt Designer入门

安装 PyQt5提供了一个可视化图形工具Qt Designer&#xff0c;文件名为designer.exe。如果在电脑上找不到&#xff0c;可以用如下命令进行安装&#xff1a; pip install PyQt5-tools 安装完毕后&#xff0c;可在如下目录找到此工具软件&#xff1a; D:\Python3.9\Lib\site-pa…

Go源码--Strconv库

简介 Strconv 库是一些跨类型的转换函数集合&#xff0c;大家应该很熟悉。源码没有什么难点&#xff0c;主要是面试题有可能会出这种类型的&#xff0c;所以简单介绍下&#xff0c;主要介绍 以下两种常用转换&#xff0c;其他的没细研究&#xff0c;感兴趣的可以看看。 Strco…

Baidu comate智能编程助手评测

Baidu comate智能编程助手评测 作者&#xff1a;知孤云出岫 目录 一&#xff0e; 关于comate产品 二&#xff0e; 关于comate产品体验 三&#xff0e; 关于实际案例. 四&#xff0e; 关于baidu comate编程助手的实测体验感悟 五&#xff0e; …

StatusBar,状态栏设置中文

在Qt的ui中&#xff0c; 菜单栏–View–Property Editor–statusBarVisible–勾选– 在C代码中&#xff0c; sloem1.h private://任意写一个函数void onStatusBarShow();sloem1.cpp void sloem1::onStatusBarShow() {QString strLabel;//显示文字来源this->setTextResour…

centos上网卡突然找不到了

问题 今天登录centos突然发现ssh连接不上&#xff0c;在虚拟机中输入ifconfig才发现没有找到对应的网卡ens33了 解决 只需要输入两行命令就可以解决 禁用NetworkManager systemctl stop NetworkManagersystemctl disable NetworkManager 然后重启网络systemctl start netwo…

nacos外接mysql的docker部署方式

文章目录 引言I 安装nacos(m1版本)1.1 镜像启动1.2 查看docker容器日志1.3 开启鉴权II 外接mysql的docker部署方式2.1 复制mysql-schema.sql2.2 导入mysql-schema.sqlIII 配置远程用户3.1 创建数据库远程用户3.2 案例: 创建nacos用户,用于nacos配置3.3 查看远程用户是否有密码…