java程序实现画图

public static void main(String[] args)throws Exception {String message="3456789abcdefghjkmnpqstuvwxy";//通过java生成图片//现实:画画//1 准备画板-//2 铺上画布//3 准备笔//4 画背景//5 画主题//6 撤画布//1 在内存中开辟空间 用于画画BufferedImage bin=new BufferedImage(200, 50, BufferedImage.TYPE_INT_RGB);//2 获取画笔Graphics2D g=(Graphics2D)bin.getGraphics();//3 涂染料 画背景g.setColor(Color.WHITE);//4 画背景:长方形g.fillRect(2, 2, 195, 45);//5 画主题//随机四五个字符String str="";for (int i = 0; i <4; i++) {str+=message.charAt((int)(Math.random()*message.length()));}//给字符设置文字样式Font font=new Font(null, Font.BOLD, 34);g.setFont(font);//把字符串中的所有字符画到画布上for (int i = 0; i < str.length(); i++) {//笔蘸墨g.setColor(new Color((int)(Math.random()*100+120), (int)(Math.random()*100+120), (int)(Math.random()*100+120)));//写字g.drawString(str.charAt(i)+"", i*45+10, 40);}//画干扰线for (int i = 0; i < (int)(Math.random()*5+5); i++) {g.setColor(new Color((int)(Math.random()*50+120), (int)(Math.random()*50+120), (int)(Math.random()*50+120)));g.drawLine(2, (int)(Math.random()*43+2), 195, (int)(Math.random()*43+2));}//6 创建流与目的文件关联File muDiFile=new File("E:\\imgs\\"+(int)(Math.random()*100+120)+".jpg");FileOutputStream fout=new FileOutputStream(muDiFile);//把内存中BufferedImage中的信息通过输出流写道目的文件中ImageIO.write(bin, "JPEG", fout);fout.close();}

web实现验证码

页面的img的src请求servlet生成验证码图片

servlet需要把验证码保存到session中用于登录判断输入的验证码是否正确

比较session域中的验证码和用户输入的验证码,如果相同则登录成功

login.jsp

<h1>用户登录表单</h1>
<c:if test="${not empty requestScope.message}"><h3>${requestScope.message}</h3>
</c:if>
<form method="get" action="<c:url value='/user/login'/>"><table><tr><th>用户名称:</th><td><input type="text" name="uname"/></td></tr><tr><th>用户密码:</th><td><input type="password" name="upwd"/></td></tr><tr><th><img src="<c:url value='/user/yzm'/>" id="img_yzm"/></th><td><input type="text" name="uyzm"/></td></tr><tr><th colspan="2"><INPUT type="reset" value="重置"/>&nbsp;&nbsp;&nbsp;&nbsp;<INPUT type="submit" value="登录"/></th></tr></table>
</form><!-- 添加js事件  点击图片 图片更新 -->
<script type="text/javascript">//文档加载完毕 给img_yzm注册点击事件window.onload=function(){//获取img_yzmvar oimg=document.getElementById("img_yzm");oimg.onclick=function(){//请求时 为了不使用缓存  添加一个无用的参数  参数值每次不同即可this.src="<c:url value='/user/yzm?n='/>"+Math.random();}}
</script>

servlet:生成验证码

String message="3456789abcdefghjkmnpqstuvwxy";
//1 在内存中开辟空间 用于画画
BufferedImage bin=new BufferedImage(200, 50, BufferedImage.TYPE_INT_RGB);
//2 获取画笔
Graphics2D g=(Graphics2D)bin.getGraphics();
//3 涂染料 画背景
g.setColor(Color.WHITE);
//4 画背景:长方形
g.fillRect(2, 2, 195, 45);
//5 画主题
//随机四五个字符
String str="";
for (int i = 0; i <4; i++) {str+=message.charAt((int)(Math.random()*message.length()));
}
//给字符设置文字样式
Font font=new Font(null, Font.BOLD, 34);
g.setFont(font);
//把字符串中的所有字符画到画布上
for (int i = 0; i < str.length(); i++) {//笔蘸墨g.setColor(new Color((int)(Math.random()*100+120), (int)(Math.random()*100+120), (int)(Math.random()*100+120)));//写字g.drawString(str.charAt(i)+"", i*45+10, 40);
}
//画干扰线
for (int i = 0; i < (int)(Math.random()*5+5); i++) {g.setColor(new Color((int)(Math.random()*50+120), (int)(Math.random()*50+120), (int)(Math.random()*50+120)));g.drawLine(2, (int)(Math.random()*43+2), 195, (int)(Math.random()*43+2));
}
//把验证码的信息装入session
request.getSession().setAttribute("yzm", str);
//把内存中图片的信息通过response的输出流 响应给客户端
ImageIO.write(bin, "JPEG", response.getOutputStream());

servlet:判断登录

request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取请求参数
String uname=request.getParameter("uname");
String upwd=request.getParameter("upwd");
String uyzm=request.getParameter("uyzm");
String message="";
//判断参数的正确
if(!uname.equals("韩梅梅")){message="用户名错误!";
}else if(!upwd.equals("123")){message="用户密码错误!";
}else {String yzm=request.getSession().getAttribute("yzm")+"";if(!uyzm.equals(yzm)){message="验证码错误!";}
}
//如果message有值 登录失败 回到登录页面
if(!message.isEmpty()){request.setAttribute("message", message);request.getRequestDispatcher("/login.jsp").forward(request, response);return;
}
response.getWriter().print("<font color='red'>"+uname+"登录成功!</font>");

javaWeb实现图片验证码功能相关推荐

  1. 用Java实现图片验证码功能

    一.什么是图片验证码? 可以参考下面这张图: 我们在一些网站注册的时候,经常需要填写以上图片的信息. 1.图片生成实体类: 1 package com.hexianwei.graphic; 2 3 i ...

  2. canvas——实现图片验证码(功能实现)

    canvas实现图片验证码--效果图如下: 1.html部分代码 <div class="wrapper"><div class="inputBox&q ...

  3. drf实现图片验证码功能

    一.背景 在之前实现过django的图片验证码,有自己实现过的,也有基于django-simple-captcha的,都是基于form表单验证,若自己实现,可以获取相应的标签name便可以获取判断,若 ...

  4. 后台图片验证码功能是什么实现的

    一.导包,1)check_code.py文件:2)Monaco.ttf字体: 二.通过session机制,来实现此功能,部分代码如下: 1 f = BytesIO() 2 img, code = cr ...

  5. JavaWeb实现登录验证码功能

    先在Web目录下的lib目录中导入jar包:ValidateCode.jar 然后创建一个Servlet类来创建验证码:ValidateCodeServlet.java 创建验证码 将验证码存储到se ...

  6. 登录功能图片验证码的实现

    首先从网上下载一个生成验证码的Servlet: package com.train.controller;import java.awt.Color; import java.awt.Font; im ...

  7. Spring Boot整合Shiro + JSP教程(用户认证,权限管理,图片验证码)

    在此首先感谢**编程不良人**up主提供的视频教程 代码都是跟着up的视频敲的,遇到的一些问题也是通过CSDN博主提供的教程解决的,在此也感谢那些提供bug解决方案的前辈们~ 项目完整代码已经发布到g ...

  8. 点击图片验证码更换验证码图片

    做登录注册等功能的时候一般都有图片验证码功能,点击看不清,换一张的时候更换一张验证码,但是又不想整个页面跟着刷新,只刷新一个验证码,因为我的项目是react项目,所以就直接上react的代码了,原理就 ...

  9. javaweb实现验证码功能

    在javaweb的用户注册与登陆功能时,有时为了防止漏洞或者大量注册,可以使用验证码功能,下面是验证码的一个简单实现 验证码类 public class ValiImg extends HttpSer ...

最新文章

  1. 一图看懂国外智能网联汽车传感器产业发展!
  2. 3D游戏编程入门(十五)索引缓存
  3. JavaEE Tutorials (24) - 资源适配器示例
  4. 你认识它们吗?2014十大科技流行词
  5. Linux基础知识(2)
  6. step1 . day8 C语言基础练习之指针和函数
  7. Linux常用命令(第二版) --系统开关机命令
  8. 函数局部有界性定理_数学分析第四章《函数连续性》备考指南
  9. Qt之tcp的简单使用
  10. win10家庭版 mysql_win10家庭版64位下mysql 8.0.15 安装配置方法图文教程
  11. spring纯注解+libreoffice
  12. Java Annotation 刷课笔记(二)
  13. Coil:为Kotlin而生的图片加载框架
  14. Revit二次开发--为管道添加标注
  15. OpenStack Cinder特性之Volume-backed image介绍与验证
  16. 焊接机器人编程c语言,机器人现场编程与调试(cnc上下料,弧焊,喷涂,点焊等),就是这么全!...
  17. SpinalNet: Deep Neural Network with Gradual Input
  18. 【毕业设计】电商产品评论数据分析可视化(情感分析) - python 大数据
  19. carplay_如何更改您的CarPlay壁纸
  20. MySQL 内连接、外连接、全连接

热门文章

  1. 论文学习——Tune-A-Video
  2. 2022-2028年中国消防机器人行业市场前瞻与投资战略规划分析报告
  3. 怎么关闭win10搜索框网页搜索功能
  4. Kotlin ExpandableListView可扩展二级列表,大厂安卓面试真题精选
  5. 消毒餐具配送管理系统
  6. 【Laravel3.0.0源码阅读分析】消息类型配置文件mime.phps
  7. ubuntu 开启伪静态
  8. android 剪贴板图文混编,Android剪贴板详解
  9. Linux发展史简介
  10. python匹配excel相同的数据_利用Python实现Excel的文件间的数据匹配功能