今晚看到网上有关验证码的实现的代码,很早就想写一个了,感觉验证码挺有意思的,于是就写了一个,然而后来一直加载不出图片。尝试了很多方法,后来终于解决了,原来是我项目里面的 web.xml中没有部署servlet的映射,web.xml如下图:

运行效果如下:
代码如下:
package model;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
/**
* Created by Petty on 2017/5/4.
*/
public class VCode {
private int w; //图片宽
private int h;//图片高
private Color bgColor = new Color(240,240,240);//背景色
private Random random = new Random();//随机对象
//设置字体范围
private String[] fontNames = {"宋体","华文楷体","黑体","华文新魏","华文隶书","微软雅黑","楷体"};
//设置字体样式范围
private int[] fontstyle = {0,1,2,3};
//设置字号范围
private int[] fontSizes = {24,25,26,27,28};
//设置所有字符串范围
private String codes="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
//无参数构造函数
public VCode(){
}
//带宽和高的构造函数
public VCode(int w,int h){
this.w = w;
this.h = h;
}
//返回一张背景图片
private BufferedImage createImage(){
/**
* 1.创建图片 2.设置背景色
*/
//创建图片
BufferedImage img = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
//设置背景色
Graphics g = img.getGraphics();
g.setColor(bgColor);
g.fillRect(0,0,w,h);
return img;
}
// 随机返回字体颜色
private Color randomColor() {
int r = random.nextInt(256);
int g = random.nextInt(256);
int b = random.nextInt(256);
return new Color(r, g, b);
}
//随机返回字体样式
private Font randomFont(){
//随机生成字体下标,随机从给定的范围内获取一个字体
int index = random.nextInt(fontNames.length);
String name = fontNames[index];
//随机生成字体样式下标,随即从给定的范围内获取一个字体样式
index = random.nextInt(fontstyle.length);
int style = fontstyle[index];
//随机生成字体大小下标,随机从给定的范围内获取一个字体大小
index = random.nextInt(fontSizes.length);
int size = fontSizes[index];
return new Font(name,style,size);
}
//随机返回字体内容
private String randomChar(){
int index = random.nextInt(codes.length());
return codes.charAt(index)+"";
}
//随机返回几条干扰线
private void getLine(BufferedImage img){
//设置干扰线的宽度为1.5倍宽,随机画五条
Graphics2D g =(Graphics2D) img.getGraphics();
g.setColor(Color.BLACK);
g.setStroke(new BasicStroke(1.5f));
for(int i=0;i<5;i++){
int x1 = random.nextInt(w);
int y1 = random.nextInt(h);
int x2 = random.nextInt(w);
int y2 = random.nextInt(h);
g.drawLine(x1,y1,x2,y2);
}
}
//用户调用该方法获取图片
public BufferedImage getImage(){
/**
* 随机生成字符0-9A-Za-z,设置字体,字号,是否粗体,字符颜色,都是随机的
*/
BufferedImage img = createImage();
this.getLine(img);
//获取画笔
Graphics g = img.getGraphics();
//画内容
for(int i=0;i<4;i++){
g.setColor(this.randomColor());//获取随机颜色
g.setFont(this.randomFont());//获取随机字体
g.drawString(this.randomChar(),w/4*i,h-5);//获取字符串随机内容
}
return img;
}
//用户调用该方法保存图片到本地
public void saveImage(BufferedImage img, OutputStream ous){
try {
ImageIO.write(img,"JPEG",ous);
} catch (IOException e) {
e.printStackTrace();
}
}
}
package model;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
/**
* Created by Petty on 2017/5/4.
*/
@WebServlet(name = "BServlet")
public class BServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
VCode v = new VCode(70,35);
BufferedImage img = v.getImage();
v.saveImage(img,response.getOutputStream());
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
VCode v = new VCode(70,35 );
BufferedImage img = v.getImage();
v.saveImage(img,response.getOutputStream());
}
}
<%--
Created by IntelliJ IDEA.
User: Petty
Date: 2017/5/4
Time: 22:28
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>一次性验证码</title>
</head>
<body>
<form action="" method="get">
<table align="center">
<tr>
<td><img id="img" alt="" src="servlet/BServlet" onclick="changeNext()"></td>
</tr>
</table>
</form>
</body>
</html>
<script type="text/javascript">
function changeNext(){
var a=document.getElementById("img");
a.src="servlet/BServlet?a="+new Date().getTime();
}
</script>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Java
# 验证码
# java登录验证码实现代码
# java 图片验证码的实现代码
# Java实现验证码具体代码
# Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例
# Java随机生成手机短信验证码的方法
# java实现验证码类生成中文验证码
# java生成图片验证码示例程序
# Java Web开发之图形验证码的生成与使用方法
# Java实现仿淘宝滑动验证码研究代码详解
# 解析Java实现随机验证码功能的方法详解
# 背景色
# 都是
# 不出
# 微软
# 写了
# 很早
# 几条
# 大家多多
# 如下图
# 宋体
# 五条
# 想写
# 粗体
# 挺有意思
# 加载
# 今晚
# 解决了
# 网上
# 华文新
相关文章:
建站之星伪静态规则如何设置?
购物网站制作公司有哪些,哪个购物网站比较好?
存储型VPS适合搭建中小型网站吗?
如何基于云服务器快速搭建网站及云盘系统?
装修招标网站设计制作流程,装修招标流程?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
如何挑选高效建站主机与优质域名?
如何通过商城免费建站系统源码自定义网站主题?
如何在服务器上三步完成建站并提升流量?
如何设置并定期更换建站之星安全管理员密码?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何使用Golang安装API文档生成工具_快速生成接口文档
零服务器AI建站解决方案:快速部署与云端平台低成本实践
中山网站推广排名,中山信息港登录入口?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
如何在搬瓦工VPS快速搭建网站?
如何在阿里云域名上完成建站全流程?
盘锦网站制作公司,盘锦大洼有多少5G网站?
建站之星安装提示数据库无法连接如何解决?
如何快速生成高效建站系统源代码?
,制作一个手机app网站要多少钱?
如何用AWS免费套餐快速搭建高效网站?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
大连 网站制作,大连天途有线官网?
如何通过宝塔面板实现本地网站访问?
临沂网站制作企业,临沂第三中学官方网站?
如何通过NAT技术实现内网高效建站?
,网页ppt怎么弄成自己的ppt?
设计网站制作公司有哪些,制作网页教程?
如何在局域网内绑定自建网站域名?
高端建站如何打造兼具美学与转化的品牌官网?
如何通过.red域名打造高辨识度品牌网站?
如何高效配置IIS服务器搭建网站?
建站主机默认首页配置指南:核心功能与访问路径优化
如何通过wdcp面板快速创建网站?
建站主机空间推荐 高性价比配置与快速部署方案解析
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
测试制作网站有哪些,测试性取向的权威测试或者网站?
定制建站方案优化指南:企业官网开发与建站费用解析
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
学校为何禁止电信移动建设网站?
网站制作服务平台,有什么网站可以发布本地服务信息?
如何在Tomcat中配置并部署网站项目?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
湖北网站制作公司有哪些,湖北清能集团官网?
如何彻底删除建站之星生成的Banner?
建站主机类型有哪些?如何正确选型
*请认真填写需求信息,我们会在24小时内与您取得联系。