Servlet 中实现验证码

本文介绍了一个使用Servlet实现验证码功能的示例,包括生成随机颜色、背景线条和4位随机码,将验证码存入Session中,并通过JSP进行展示。

Servlet 中实现验证码

package com.admincontrol;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;


import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


@SuppressWarnings("serial")
public class GetRandNum extends HttpServlet{
private final int width = 60;
private final int height = 18;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("image/jpeg");
HttpSession session = request.getSession();
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics gs = image.getGraphics();
Random random = new Random();
gs.setColor(getRandColor(200,250));
gs.fillRect(0, 0, width, height);
//定义字体形式
gs.setFont(new Font("Times New Roman",Font.PLAIN,18));
//用线条画背景
gs.setColor(getRandColor(160,200));
for(int i=0;i<155;i++) {
int i_x = random.nextInt(width);
int i_y = random.nextInt(height);
int i_xl = random.nextInt(12);
int i_yl = random.nextInt(12);
gs.drawLine(i_x,i_y,i_x+i_xl,i_y+i_yl);
}
//产生4位随机码 
String yzm_Rand="";
String str ="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWSYZ";
char[] ch = new char[4];
for(int i=0;i<4;i++) { 
int n = new Random().nextInt(62);
ch[i] = str.charAt(n);
yzm_Rand += String.valueOf(ch[i]);
gs.setColor(new Color(
20+random.nextInt(110),
20+random.nextInt(110),
20+random.nextInt(110)));
gs.drawString(String.valueOf(ch[i]),13*i+6,16);
}
//将验证码存入Session中
session.setAttribute("yanzhenma",yzm_Rand);
gs.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
}
//获取随机颜色
public Color getRandColor(int cc,int bb) {
Random random = new Random();
if(cc>255) cc=255;
if(bb>255) bb=255;
int r=cc+random.nextInt(bb-cc);
int g=cc+random.nextInt(bb-cc);
int b=cc+random.nextInt(bb-cc);
return new Color(r,g,b);

}
【源码免费下载链接】:https://renmaiwang.cn/s/anwse 在探索使用vue-cli和HBuilderx进行应用程序打包的过程中,我们可能会遇到许多常见的问题和陷阱。根据文件提供的内容,我们可以梳理出以下几点关键知识点:1. 微信授权登录问题:在使用vue-cli构建的HBuilderx应用中,微信授权登录时可能会遇到code:-2或code:-100的错误提示。这些问题通常指向几个方面:appid和appsecret必须针对移动应用设置,而不是网页应用;微信登录和分享功能在自定义基座环境中可能不可用;再次,开发者账号配置的应用签名应该是经过md5加密后的值,而不是原字符串。2. 生产环境配置问题:生产环境下,proxyTable可能不生效,从而导致接口访问出现500错误。解决这个问题有两条途径:一是使用网络地址作为入口文件,并确保入口文件和接口处于同一域名下;二是推荐在config/prod.env和config/dev.env中添加API_ROOT,并在main.js里通过axios设置正确的baseUrl,以解决接口路径问题。3. 资源路径问题:在打包过程中,背景图片使用相对路径可能导致测试时图片不显示。为避免这种情况,需要确保css文件中背景图片的路径设置正确,并调整config/index.js中关于资源路径的配置。4. 微博分享功能问题:微博分享功能在某些情况下可能会闪退,这是由于Dcloud的一个已知问题导致的。授权失败的原因可能有两个:网络问题或未安装新浪微博应用。在进行授权时需要加入判断逻辑,根据授权失败的具体情况给出提示。5. iPhoneX适配问题:在iPhoneX上由于底部安全区的存在,可能会导致导航栏不能正确地显示在最底部。为解决这一问题,在index.html的<meta>标签中添加viewport-fit=cover,以适
内容概要:本文为第七届全球校园人工智能算法精英大赛(算法创新赛)的赛题规则文件,详细介绍了六大开放式赛题的内容、作品要求、材料规范及评分标准。六大赛题分别为:算法模型创新(AC1)、智能软件创新(AC2)、智能硬件创新(AC3)、AI+应用创新(AC4)、AI+创新创业(AC5)和AI+未来场景(AC6),每项赛题均提供技术方案参考大纲与评分规则,涵盖项目背景、技术实现、创新性、应用价值等多个维度。文件强调作品的原创性、创新性、实用性与完整性,并对提交材料的形式与内容作出明确规范,如PDF文档格式、演示视频时长、答辩PPT要求等。此外,各赛题评分体系均设置总分100分及附加分,注重技术创新与落地潜力的综合评估。; 适合人群:高校在校学生,尤其是具备一定人工智能、软件开发、硬件设计或创新创业基础的本科生与研究生,适合跨学科团队参与不同赛题方向。; 使用场景及目标:①指导参赛团队根据所选赛题准备完整的技术方案或商业计划书;②帮助团队理解评审标准,提升作品在创新性、技术实现、应用价值等方面的竞争力;③促进人工智能技术在实际场景中的融合应用与成果转化。; 阅读建议:建议参赛者结合自身专业背景选择合适赛题,仔细研读对应的技术方案大纲与评分细则,注重方案的逻辑性、创新性和可实施性,同时严格按照材料规范准备提交内容,避免因格式或信息泄露等问题影响评审成绩。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值