jsp生成好看的验证码
这是一个Servlet,名字是ImageServlet
package a; 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;
public class ImageServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8"); BufferedImage bfi = new BufferedImage(80,25,BufferedImage.TYPE_INT_RGB);
Graphics g = bfi.getGraphics();
g.fillRect(0, 0, 80, 25); //验证码字符范围
char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
Random r = new Random();
int index;
StringBuffer sb = new StringBuffer(); //保存字符串
for(int i=0; i<4; i++){
index = r.nextInt(ch.length);
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
Font font = new Font("宋体", 30, 20);
g.setFont(font);
g.drawString(ch[index]+"", (i*20)+2, 23);
sb.append(ch[index]);
} // 添加噪点
int area = (int) (0.02 * 80 * 25);
for(int i=0; i<area; ++i){
int x = (int)(Math.random() * 80);
int y = (int)(Math.random() * 25);
bfi.setRGB(x, y, (int)(Math.random() * 255));
} //设置验证码中的干扰线
for (int i = 0; i < 6; i++) {
//随机获取干扰线的起点和终点
int xstart = (int)(Math.random() * 80);
int ystart = (int)(Math.random() * 25);
int xend = (int)(Math.random() * 80);
int yend = (int)(Math.random() * 25);
g.setColor(interLine(1, 255));
g.drawLine(xstart, ystart, xend, yend);
}
HttpSession session = request.getSession(); //保存到session
session.setAttribute("verificationCode", sb.toString());
ImageIO.write(bfi, "JPG", response.getOutputStream()); //写到输出流
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} private static Color interLine(int Low, int High){
if(Low > 255)
Low = 255;
if(High > 255)
High = 255;
if(Low < 0)
Low = 0;
if(High < 0)
High = 0;
int interval = High - Low;
int r = Low + (int)(Math.random() * interval);
int g = Low + (int)(Math.random() * interval);
int b = Low + (int)(Math.random() * interval);
return new Color(r, g, b);
}
}
接下来是一个jsp文件,先访问jsp文件。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<script type="text/javascript">
function reload(){
document.getElementById("image").src="<%=request.getContextPath() %>/imageServlet?date="+new Date().getTime();
$("#checkcode").val(""); // 将验证码清空
} function verificationcode(){
var text=$.trim($("#checkcode").val());
$.post("${pageContext.request.contextPath}/verificationServlet",{op:text},function(data){
data=parseInt($.trim(data));
if(data>0){
$("#span").text("验证成功!").css("color","green");
}else{
$("#span").text("验证失败!").css("color","red");
reload(); //验证失败后需要更换验证码
}
});
$("#checkcode").val(""); // 将验证码清空
}
</script> <body>
验证码:<input type="text" name="checkcode" id="checkcode"/>
<img src="<%=request.getContextPath() %>/ImageServlet" alt="验证码" id="image" />
<a href="reload();"><label>换一张</label></a><br>
<input type="button" value="提交" onclick="verificationcode();">
<span id="span"></span>
</body>
</html>
jsp生成好看的验证码的更多相关文章
- 使用jsp生成验证码
在开发中验证码是比较常用到有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试的方式. 此演示程序包括三个文件: 1.index.jsp:登录页面 2.image.jsp:生成 ...
- 学习笔记:利用GDI+生成简单的验证码图片
学习笔记:利用GDI+生成简单的验证码图片 /// <summary> /// 单击图片时切换图片 /// </summary> /// <param name=&quo ...
- jsp生成html
这几天公司需要生成静态的HTML页面以减小数据库与服务器的压力和负担,于是在网络上一阵狂搜,找到几篇相当不错的文章和一些相当有用的资料.为了方便,我整理在自己的BLOG,以供参考! 在接下来的应用中, ...
- JSP生成word文件
1.jsp生成word文件,直接改动jsp格式: <%@ page contentType="application/vnd.ms-word;charset=GB2312"% ...
- 【代码实现】PHP生成各种随机验证码
原文地址:http://www.phpthinking.com/archives/531 验证码在WEB应用中很重要,通经常使用来防止用户恶意提交表单,如恶意注冊和登录.论坛恶意灌水等.本文将通过实例 ...
- python随机生成6位数验证码
#随机生成6位数验证码 import randomcode = []for i in range(6): if i == str(random.randint(1,5)): cod ...
- JSP生成静态Html页面
[转载]JSP生成静态Html页面 在网站项目中,为了访问速度加快,为了方便百度爬虫抓取网页的内容,需要把jsp的动态页面转为html静态页面.通常有2种常用的方式: 1.伪静态,使用URL Rewr ...
- Linux服务器 java生成的图片验证码乱码问题
问题:如图所示项目中生成的图形验证码不能正常显示出需要的字体 原因: linux下没有对应的字体 查找项目中使用到系统字体的地方,如下: 解决: 1. 在本地 路径 C:\Windows\Fonts ...
- JSP生成WORD文档,EXCEL文档及PDF文档的方法
转自:https://www.jb51.net/article/73528.htm 本文实例讲述了JSP生成WORD文档,EXCEL文档及PDF文档的方法.分享给大家供大家参考,具体如下: 在web- ...
随机推荐
- Thunder7.2.13.3884 JayXon
更新日志: 更新迅雷7. 更新VipService 2.7 更新SQLite 更新zlib 不再精简msvcr71.dll.msvcp71.dll 不再精简64位BHO 破解了本地离线重命名30个字符 ...
- css3动画的原理 及 各种效果制作
1. 制作小球弹动效果 在这篇文章中,我们将会去探究一下浏览器是如何去处理CSS Animations和CSS Transitions的, c 以便使你在写一些动画效果之前就可以对该动画在浏览器中 ...
- @InitBinder装配自定义编辑器
@InitBinder装配自定义编辑器 第一步:BaseController.java,标注@InitBinder public class BaseController { @InitBinder ...
- 常用SQL语句积累
--批量设置表中某字段为固定值 update dbo.LampList set LampGroupAddress=ISNULL(LampGroupAddress,'')+1 --批量设置表中某字段为N ...
- Django的认证系统 auth模块
Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...
- php常量的实现
1.php的常量 就是一个简单的标识符,脚本执行期间不会改变,大小写敏感,默认大写. 常量的存储结构 typedef struct _zend_constant { zval value; //常量值 ...
- 2019第十届蓝桥杯C/C++
这是我第一次参加蓝桥杯比赛,比完后,有点低于预期,自己的发挥低于预期,赛事水准也低于预期. 教室里面很多同学的电脑出现问题,举办学校也没有完善的应急方案,有一部分同学11点钟才可以做题. 附题目pdf ...
- C++ 构造函数_初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: class Student { public: //构造函数初始化列表 Stude ...
- Bootstrap-CL:警告
ylbtech-Bootstrap-CL:警告 1.返回顶部 1. Bootstrap 警告(Alerts) 本章将讲解警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警 ...
- Codeforces Round #486-F.Rain and Umbrellas题解
一.题目链接:http://codeforces.com/contest/988/problem/F 二.题面 三.思路 很明显而且比较能想到的$dp$. 四.代码实现 #include<bit ...