【Servlet笔记】servlet 代码生成验证码

servlet生成验证码和点击刷新验证码 javaweb项目,有两个文件,一个java文件,用来生成验证码并输出到servlet输出流中。一个html文件,用来写组件和点击事件,刷新验证码。 CodeServlet.java文件 package net.test.servlet; import javax.imageio.ImageIO; import javax.servlet.ServletException; import jav... 阅读详情

package com.saicent.servlet;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;

@SuppressWarnings("deprecation")
@WebServlet(
		name = "MyServlet",
		urlPatterns = {"/saicent"},
		loadOnStartup = 1,
		initParams = { 
				@WebInitParam(name="width", value="120"),
				@WebInitParam(name="height", value="40"),
				@WebInitParam(name="number_word", value="4"),
				@WebInitParam(name="max_angle_of_character", value="45")
		}
)
public class Saicent extends HttpServlet implements SingleThreadModel{
	
	private static final long serialVersionUID = 1L;
	
	//设定验证码图片的尺寸大小
	private final int WIDTH = 120;
	private final int HEIGHT = 40;
	private final int NUMBER_WORD = 4;
	private final int MAX_ANGLE_OF_CHARACTER = 45;
	private final String BUFFER_STRING = "实打实的考虑房价来看我服你忘记烦恼我付款了无法看到苏发热分别就看你空间的考虑将覅来得及个人敏感快乐毛利率的私家车老师的那个人公开课";
	
	private int yCoordinateOfWorld;
	private int wordSpace;
	private int sizeOfWord;
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
	
		//计算验证码图片的各种参数
		initParamOfVerificationCode(HEIGHT, WIDTH, NUMBER_WORD);
		
		System.out.println("yCoordinateOfWorld  " + yCoordinateOfWorld);
		System.out.println("wordSpace  " + wordSpace);
		System.out.println("sizeOfWord  " + sizeOfWord);
		
		//创建一个 BufferImage 的对象,他的父类是 Image.
		BufferedImage bufferImage = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
		//获得 BufferImage 的图形,以操作并绘制这张图片.
		Graphics graphic = bufferImage.getGraphics();
		
		//注意:绘制图形,每次描绘图形前,都要设置画笔的颜色
		
		//设置背景颜色
		graphic.setColor(Color.WHITE);
		graphic.fillRect(0, 0, WIDTH, HEIGHT);

		//设置边框的颜色
		graphic.setColor(Color.GRAY);
		graphic.drawRect(1, 1, WIDTH - 2, HEIGHT - 2);
		
		//设置文字字体以及文字的样式
		graphic.setColor(Color.GRAY);
		graphic.setFont(new Font("宋体", Font.BOLD | Font.ITALIC, (int)sizeOfWord));
		
		//保存发送给客户端的实际字符串
		String keyString = new String();
		
		for(int i = 0; i < NUMBER_WORD; i++) {
			
			//随机获得一个字符
			char character = BUFFER_STRING.charAt( new Random().nextInt(BUFFER_STRING.length()) );
			
			//随机获得文字旋转的角度
			double characterAngle = (new Random().nextInt() % MAX_ANGLE_OF_CHARACTER) * Math.PI / 180;
			((Graphics2D)graphic).rotate(characterAngle, (wordSpace * (1 + i) + i * sizeOfWord + sizeOfWord / 2), yCoordinateOfWorld - sizeOfWord / 2);
			graphic.drawString(character + "", (wordSpace * (1 + i) + i * sizeOfWord), yCoordinateOfWorld);
			((Graphics2D)graphic).rotate(-characterAngle, (wordSpace * (1 + i) + i * sizeOfWord + sizeOfWord / 2), yCoordinateOfWorld - sizeOfWord / 2);

			keyString = keyString + character;
			
		}

		//设置干扰线的样式
		graphic.setColor(Color.GRAY);
		for(int i = 0; i < 7; i ++) {
		
			int x1 = new Random().nextInt(WIDTH);
			int x2 = new Random().nextInt(WIDTH);
			int y1 = new Random().nextInt(HEIGHT);
			int y2 = new Random().nextInt(HEIGHT);
			graphic.drawLine(x1, y1, x2, y2);
			
		}
		
		//输出图片
		HttpSession session = request.getSession();
		session.setAttribute("key", keyString);
		ImageIO.write(bufferImage, "jpg", response.getOutputStream());
		response.setContentType("image/jpeg");
		System.out.println(keyString);
		System.out.println(session.getAttribute("key"));
	}
	
	protected void initParamOfVerificationCode(int height, int width, int numberOfWord) {
	/*
	 * 						方法摘要
	 * 需要计算的数据:
	 * 	1. 文字的 y 坐标
	 *  2. 文字的间距
	 *  3. 文字的尺寸
	 *  
	 * 设计方案:
	 *  1. 文字的高度要占整张图片的上下边距占文字的 1/3
	 *  2. 文字的间距要是文字的 1/3
	 *  
	 * 需要注意的细节:
	 *  1. 坐标系 x, y 的零点在左上角。向下 y 增大; 向右 x 增大。
	 *  2. 文字的重心在左下角。
	 *  
	 */
		sizeOfWord = (int)Math.rint(3* width / (4 * numberOfWord + 1));
		wordSpace  = (int)Math.rint(width / (4 * numberOfWord + 1));
		yCoordinateOfWorld = (int)Math.rint((HEIGHT - sizeOfWord) / 2 + sizeOfWord);
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		HttpSession session = request.getSession();
		response.setContentType("text/html; utf-8");
		response.setCharacterEncoding("utf-8");
		request.setCharacterEncoding("utf-8");
		
		if(session.getAttribute("key") != null && session.getAttribute("key").equals(request.getParameter("key")))
		{
			response.getWriter().println(  "WELCOME!" );
		}
		else
		{
			response.getWriter().println(  "验证码出错!" );
		}
	
		
	}

	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		super.service(arg0, arg1);
		System.out.println("Method of service is called!");
	}
	
	
}


Servlet实现验证码功能 作为一个学习编程的小白,在学习的过程中对于项目中注册界面的验证码功能一直怀有芥蒂,今天借助servlet终于实现了一个简陋的图片验证码功能。 首先在servlet包中建立一个子包commons 阅读详情

相关推荐

使用Servlet+JSP实现验证码

功能简述:设计一个验证码,验证的颜色、里面的字符都可随机生成,比较JSP页面输入框的字符与验证码是否匹配。 首页:index.jsp &lt;%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"%&gt; &lt;% String path = request.getConte...

black 1554

Servlet方式实现验证码--Javaweb

动手实践:Servlet方式实验验证码 首先,我们先用常量字符串来作为验证码来测试程序,其次将常量字符串变为变量来实现一个动态验证码的生成。 1.常量字符串来作为验证码 这是一个生成常量字符串验证码的Servlet package random.code; import sun.net.www.content.text.Generic; <%-- Created by IntelliJ IDEA. User: 86130 Date: 2022/4/24 Time: 17.

孙宇航的博客 5484

数字验证码生成与验证的Servlet实现

验证码(Completely Automated Public Turing test to tell Computers and Humans Apart),即全自动区分计算机和人类的图灵测试,是用来防止恶意软件(如自动化的计算机脚本)自动地提交表单或访问资源的机制。验证码通常出现在互联网上的注册、登录、发表评论、下载资源等场景中,能够有效减少机器人的滥用行为,保护网站或应用的安全。Servlet技术是Java语言提供的用于扩展Web服务器功能的一种技术。

weixin_32389853的博客 2004

java验证码

package cn.itcast.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import j...

public_sbw的博客 310

实现验证码校验的Servlet技术教程

本文还有配套的精品资源,点击获取 简介:验证码是防止自动化操作的Web安全措施。本项目通过Java Servlet技术实现验证码的生成与校验,包括随机字符串生成、验证码保存到Session、生成图片,并通过Servlet生命周期处理用户请求。学习者将掌握如何在Java中操作图像和理解HTTP协议,为深入Web安全和服务器端编程打下基础。 1. 验证码原理与应用 ...

weixin_29041443的博客 1540

servlet实现验证码

servlet实现验证码

servlet实现验证码登陆功能

验证码登陆还是很常用的功能。今天用servelt实现了一下,验证码的实现代码是我综合了网上和学习视频的代码整合而成。先看一下效果图。 测试效果: 使用模板后的效果: 前端的登陆页面如下: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> &l...

远行的博客 1万+

java 实现验证码(servlet+jsp)

java 实现验证码(servlet+jsp),详情请看:

Servlet的方式实现验证码

生成验证码的servlet:CodeServlet //这个生成验证码的servlet已经将随机数(也就是这里的验证码)放入session中,以便于校验时获取 req.getSession().setAttribute(“scode”, randomString); System.out.println(randomString); package com.web.servlet; import...

qq_35367566的博客 3540

servlet验证码代码

java web基础之servlet中验证码代码

Avalonia 项目结构说明

Avalonia UI

bjxingch的博客 1271

servlet生成验证码

验证码? 1、为什么要使用验证码??           相信很多网站,淘宝,网易博客,以及我们现在的csdn都设置了在注册或登陆的时候,需要我们输入验证码,为什么要设置填写验证码这以项呢?是这样的,如果不设置验证码的话,我们在注册一个网站的时候,写一个外挂程序,每一分钟注册一个用户,不断注册,或者不断登录,这样去攻击网站。而验证码就解决了这个问题,验证码是混合的数字或者符号的图片,机器无法

Xinghf 4931

KAN神经网络实战:如何用Python快速搭建你的第一个可解释性模型

本文提供了使用Python和PyTorch快速搭建首个KAN(Kolmogorov-Arnold Networks)神经网络模型的实战指南。通过对比传统MLP,详细解析了KAN利用可学习的边函数实现更高可解释性的核心原理,并逐步演示了从环境配置、数据准备、核心模块实现到模型训练与可视化的完整流程,帮助开发者掌握这一新兴的可解释性AI模型构建方法。

convnet3designer的博客 473

通过servlet生成随机验证码实例

注,本代码引用来之张孝祥的最新力作,保留所有权利。此段servlet完整展示了动态验证码的生成过程,通俗易懂,不愧为张老师所写的代码,在此遇到一个问题,就是常说的javax.servlet包无法引入,我按要求都把servlet包放入了lib目录中,可还是一样找不到,因此实际调试效果还没看到。首先是一个简单的登录页面。 Check_login.htmhtml>head>    t

1246

别再为SCI论文配图发愁了!手把手教你用PS+AI搞定从数据图到模式图的全流程

本文详细解析了如何利用Photoshop(PS)和Illustrator(AI)高效完成SCI论文配图的全流程,涵盖数据可视化、模式图设计及期刊适配性输出。通过实战案例,帮助科研人员掌握位图与矢量图的处理技巧,提升论文配图质量,满足不同期刊的出版要求。

weixin_28630185的博客 382

统信UOS系统盘扩容保姆级教程:用GParten-分区编辑器5分钟搞定

本文提供统信UOS系统盘扩容的详细图形化教程。针对系统盘空间不足问题,重点介绍如何使用系统自带的GParten-分区编辑器,在5-10分钟内安全、直观地完成扩容操作,无需记忆复杂命令,适合所有用户快速解决存储空间告急的困扰。

e3f4g5的博客 640

javaweb中使用servlet实现验证码

1、jsp页面在jsp页面中,我们要有下面几部分: 1.输入框 2.验证码图片 3.看不清按钮 4.提交按钮 预期效果:思路:2、jsp页面代码:<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> <% String path = request.getContextPath()

jin's blog 6010

<IBM DB2>《DB2 官方监控脚本 2022版本》

DB2 监控脚本

Else 的博客 671

基于Servlet的验证码技术

基于Servlet的验证码技术 原理:验证码Servlet产生随机字符,保存到Session中,以后从Session中获取这个随机字符和用户输入进行比对。 第一步:产生随机验证码工具Servlet(要求能够看懂核心代码): @WebServlet(urlPatterns = "/verifyCodeController") public class VerifyCodeController ex...

哈 769

LangChain面试内容整理-知识点27:LangChain性能调优

LLM应用可能面临响应慢、成本高等性能问题。LangChain提供了一些优化方法和经验来提升性能和效率。

不务正业的猿 327

23 中望CAD二次开发(ZRX C++)-自定义实体(二)

本文详细介绍了自定义图形实体,如何实现几何变换、捕捉、节点编辑,并介绍了CAD代理的概念。

cilvsuanna的博客 437

用Servlet实现一个简单的验证码功能

案例4:验证码 1.本质:图片 2.目的:防止恶意表单注册 步骤: 1.创建一个web工程。 2.在src目录下创建cn.itcast.web.servlet包,在该包下创建一个CheckCodeServlet类,实现验证码在网页展示 package cn.itcast.web.servlet; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.a

weixin_44148646的博客 1314

机器翻译:一文掌握离线翻译库 Argos Translate 的详细使用

Argos Translate是一个开源的离线翻译库,支持多语言互译。它通过独立的翻译包(.argosmodel文件)实现翻译功能,每个包对应特定语言对的翻译任务。安装简单,只需pip安装argostranslate库,并通过命令行或Python API管理翻译包。支持批量处理和长期运行优化性能。对于不支持的语种,可采用桥接翻译或自行训练模型。该库提供CLI工具和Python API,适合集成到各种应用中,还可用于批量文件翻译。主要局限包括缺乏上下文理解、专业领域翻译不精准等。

数据知道的博客 3523

Servlet制作验证码

Servlet制作验证码 1.什么是验证码(CAPTCHA): 验证码(CAPTCHA):是一种区分用户是计算机还是人的公共全自动程序。它可以防止计算机执行一些操作。 验证码是很多网站通行的方式,本文利用简易的方式实现了这个功能。 2.为什么要使用验证码: 没使用验证码的问题:不断登陆破解密码,创建垃圾账户,刷票,提交垃圾信息。 通过验证

Running 388

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

使用Servlet实现验证码

使用Servlet实现验证码制作主要思路 /servlet/ImageServlet" /> 运用Servlet随机生成图片,用到的类: 1. BufferedImage图像数据缓冲区 2. Graphics绘制图片 3. Color获取颜色 4. Random生成随机数 5. ImageIO输出图片 Ima

868

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: 【Servlet笔记】Servlet的转发(其他servlet、静态页面、JSP)
下一篇: 【环境搭建】下载Spring 4的方法
林帅帅
博客等级 码龄12年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值