像这样简单的验证码如何生成并显示在页面上并能点击不断刷新验证码呢?

1.首先创建一个servlet包并创建一个VerificationCodeServlet

package codewen.bookcool.servlet;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.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** 验证码servlet* @author codewen* */@WebServlet("/VerificationCodeServlet")
public class VerificationCodeServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {int width = 100; //设置图片的宽度int height = 35; //设置图片的高度//在内存中生成一张图片BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//获取画笔Graphics g = image.getGraphics();g.setColor(Color.pink);g.fillRect(0, 0, width, height); //画出粉色的填充框g.setColor(Color.blue);g.drawRect(0, 0, width-1, height-1); //画出蓝色的外边框char a[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B','C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O','P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b','c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o','p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};Random random = new Random();g.setColor(Color.red);Font font = new Font("萝莉体 第二版", Font.BOLD, 16);g.setFont(font);String Vcode = "";//随机生成四个字母或数字for(int i=1; i<=4; i++) {//随机生成[0,a.length)的数int index = random.nextInt(a.length);Vcode+=a[index];g.drawString(a[index]+"", width/5*i-5, height/2+5);}//将生成的验证码放入session(供登录时检验验证码使用)request.getSession().setAttribute("Vcode", Vcode);//显示图片ImageIO.write(image, "jpg", response.getOutputStream());}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

2.jsp页面需要使用到验证码,直接调用即可

3.获取到验证码后,点击验证码能够不断刷新验证码也很重要
可以利用js获取图片对象并修改图片的src,给其src加时间戳

<!-- 这是一个图片链接,点击图片后执行refreshCode()函数更换图片 -->
<a href="javascript:refreshCode();"><img src="${pageContext.request.contextPath}/VerificationCodeServlet" title="看不清点击刷新" id="vcode_img"/></a>
<script type="text/javascript">//刷新验证码的函数function refreshCode() {//获取图片对象var vcode_img = document.getElementById("vcode_img");vcode_img.onclick = function() {//获取时间戳var time = new Date().getTime();vcode_img.src = "${pageContext.request.contextPath}/VerificationCodeServlet?time="+time;}}
</script>

需要注意的是在Linux下可能会出现图片加载不出来的情况,我查了很久在一篇博客找到了答案,大概的意思就是jwt包默认不被Linux识别,需要修改配置,详细可以参考Linux下验证码加载不出来
我还碰到过eclipse运行项目的时候,发现有时候验证码能加载,有时候加载不出来,可以试试清理项目和Tomcat服务器缓存

javaweb项目如何实现简单的验证码(以及eclipse和Linux下验证码加载不出来)相关推荐

  1. 【项目技术点总结之一】vue集成d3.js利用svg加载图片实现缩放拖拽功能

    [项目技术点总结之一]vue集成d3.js利用svg加载图片实现缩放拖拽功能 前言 概述 技术介绍 实现过程 插件安装 引用组件 初始化组件 实现效果 简单理解 使用d3创建一个svg 在svg中提添 ...

  2. 用vue-scroller做上拉刷新,下拉加载的模板(简单明了,通用)

    1.首先下插件,并在你的vue项目中引人 1 npm i vue-scroller -D 2 import VueScroller from 'vue-scroller 2.Vue.use(VueSc ...

  3. linux下验证码不显示问题解决

    情形:在tomcat下运行war包,widows下验证码显示正常,然后放到linux下验证码生成成功没有报错,但是页面访问报404. 修改tomcat下Catalina.sh下配置 -Djava.aw ...

  4. linux飞鸽传书项目实训,Linux_信使(iptux):Linux下的飞鸽传书,不知你是否使用过“飞鸽传书 - phpStudy...

    信使(iptux):Linux下的飞鸽传书 不知你是否使用过"飞鸽传书"这款Windows软件? "哇,对着Linux用户问这个问题,不是很无聊吗?" 嗯-今天 ...

  5. 启动java服务时刷新缓存_Spring java项目对外提供服务和java进程启动时bean,内部缓存加载的先后关系?...

    Spring java项目对外提供服务有这么几种,一种是web服务,譬如tomcat,一种是RPC服务,譬如dubbo,thrift.总的来说就是对外开放某个/些端口,接收请求. Spring工程项目 ...

  6. linux按照mysql为何如此简单_手把手教你在Linux下安装MySQL

    在Linux操作系统下,安装MYSQL有两种方式:一种tar安装方式,另外一种是rpm安装方式.这两种安装方式有什么区别呢?尽管我们在Linux下常用tar来压缩/解压缩文件,但MYSQL的tar格式 ...

  7. Vue3+TypeScript项目构建之实现自定义指令v-loading, axios请求时的加载动画

    最终实现效果 可以实现提示文字和背景颜色的自定义 xzw-loading-text='别急嘛~' // 默认为加载中 xzw-loading-background='rgba(0, 0, 0, .4) ...

  8. linux hadoop eclipse 安装,linux下安装Hadoopeclipse插件以及编写第一个简单的MapReduce程序...

    linux下安装Hadoopeclipse插件以及编写第一个简单的MapReduce程序 Hadoop 安装eclipse这个不难.网上太多的教程,一找一大把.熟悉了之后也不再需要看教程就可以自己安装 ...

  9. vue项目中设置全局loading时 遇到多个请求时loading加载显示问题

    问题详细描述 项目设置全局loading动画加载,如果页面一次加载了多个请求 ,当其中有一个接口请求成功后 loading加载动画会消失,但是其实 此时还有一个接口还未 请求成功 那么其实加载动画不应 ...

最新文章

  1. 6个例子让你彻底明白,什么是纳什均衡
  2. hdu 4923 Room and Moor (单调栈+思维)
  3. R语言 scorecard包 评分卡
  4. 服务器性能 平均磁盘写入,磁盘系统IO性能测试
  5. 文件服务器存储,文件服务器存储
  6. atitit. orm框架的hibernate 使用SQLQuery createSQLQuery addEntity
  7. quartz.net隔一天执行一次_你知多少年的轮回,中秋和国庆在同一天吗?喜相逢必备“蟹”逅礼...
  8. cst自学教材_CST Microwave Studio入门与应用基础课程
  9. 英文论文评审意见_sci英文论文审稿意见怎么写(7)
  10. php识别名片,名片识别接口
  11. CAD能打开PDF格式吗?这样做可以快速实现
  12. html 中圆角怎么写,html中的圆角
  13. matlab怎么生成三维等值线图,matlab画三维等值线图
  14. P问题,NP问题,NP难问题
  15. 【附白皮书下载】制造业数字化转型专家黄正杰:设备健康如何管理?
  16. ffmpeg 视频裁剪格式问题
  17. 一个网站广告位的极致使用
  18. 微信小程序 video 视频播放卡顿
  19. 关于 安装Qt5.15.2启动QtCreator后“应用程序无法正常启动0xc0000022” 的解决方法
  20. python图片显示中文_解决Python pandas plot输出图形中显示中文乱码问题

热门文章

  1. 003--【工具】groovy之基础语法
  2. 正方体最快最简单画,正方体的画法一定要掌握好啊!绘画初学者最重要的基础绘画知识点...
  3. Apollo Docker 空间分析与清理
  4. Auto CAD:CAD软件简介、使用技巧经验总结、基础案例应用之详细攻略
  5. 几个比较好的微信图文编辑器和二维码图片生成工具网站介绍给你!
  6. 手机修改域名服务器,手机修改域名服务器ip地址
  7. word打开慢的解决办法
  8. 关于fi dd ler 手机抓包 网卡地址地址_网络抓包的高级手段:ARP欺骗工具的应用...
  9. php实现微信公众号分享,php版微信公众号自定义分享内容实现方法
  10. [xenomai驱动] 字符设备测试