jsp验证码是怎么实现?

jsp验证码是怎么实现?,第1张

1 服务器端随机产生一串字符串,保存在缓存(session)中,
2 服务器端用程序自动生成一张,并把随机产生的字符串写在上,
3 把发送到浏览器端
4 浏览者把上看到的文字写到文本框里,
5 表单提交时,这些文字被发送到服务器端,
6 服务器端验证发送来的文字和保存在缓存(session)中的字符串是否一致,是则通过验证,否则为非法 *** 作

你用的是responseText肯下不行啊,你返回的是一个流。而不是一段文本,我觉得你不需要用ajax,你只要重新改变一下img对象的src属性就行了吧,还是指向这个servlet,相当于刷新一下这个。改变的src属性时,好像不刷新整个页面

ServletOutputStream sos = responsegetOutputStream();
:得到一个输出流对象
ImageIOwrite(image, "jpeg", sos);
:将给定的写入到sos这个指定的流中。
sosclose();
:关闭流,同时将流输出。如未加此句,则不可显示。
outclear();
out = pageContextpushBody();
以上两句是必加的。应为out对象是jsp中默认的输出流对象。当每次请求完成后都会调用这个对象。而out对象与在jsp页面中使用流相关的getOutputStream有冲突。所以上两句必加。否则会报异常。(但在servlet中可以不要以上处理)

这个功能通常一共3个页面:
indexjsp是用来登录用的,在其中显示验证码,即<img src="imagejsp"/>
imagejsp是用来生成验证码的,有注释,很详细,如再不行,你复制到百度就有详解了。
resultjsp 是用来判断输入是否正确的。
相信你一定能看明白别忘了采纳哦,谢谢。。。
1indexjsp
<%@ page language="java" import="javautil" pageEncoding="GBK"%>
<html><body>
<form method=post action="resultjsp">
<input type=text name=input maxlength=4>
<img border=0 src="imagejsp">
<input type="submit" value="submit">
</form></body></html>
2imagejsp
<%@ page contentType="image/JPEG"
import="javaawt,javaawtimage,javautil,javaximageio"
pageEncoding="GBK"%>
<%!Color getRandColor(int fc, int bc) {//给定范围获得随机颜色
Random random = new Random();
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + randomnextInt(bc - fc);
int g = fc + randomnextInt(bc - fc);
int b = fc + randomnextInt(bc - fc);
return new Color(r, g, b);
}%>
<%
//设置页面不缓存
responsesetHeader("Pragma", "No-cache");
responsesetHeader("Cache-Control", "no-cache");
responsesetDateHeader("Expires", 0);

// 在内存中创建图象
int width = 60, height = 20;
BufferedImage image = new BufferedImage(width, height,
BufferedImageTYPE_INT_RGB);

// 获取图形上下文
Graphics g = imagegetGraphics();

//生成随机类
Random random = new Random();

// 设定背景色
gsetColor(getRandColor(200, 250));
gfillRect(0, 0, width, height);

//设定字体
gsetFont(new Font("Times New Roman", FontPLAIN, 18));

//画边框
//gsetColor(new Color());
//gdrawRect(0,0,width-1,height-1);

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
gsetColor(getRandColor(160, 200));
for (int i = 0; i < 100; i++) {
int x = randomnextInt(width);
int y = randomnextInt(height);
int xl = randomnextInt(12);
int yl = randomnextInt(12);
gdrawLine(x, y, x + xl, y + yl);
}

// 取随机产生的认证码(4位数字)
String sRand = "";
for (int i = 0; i < 4; i++) {
String rand = StringvalueOf(randomnextInt(10));
sRand += rand;
// 将认证码显示到图象中
gsetColor(new Color(20 + randomnextInt(110), 20 + random
nextInt(110), 20 + randomnextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
gdrawString(rand, 13 i + 6, 16);
}

// 将认证码存入SESSION
sessionsetAttribute("code", sRand);

// 图象生效
gdispose();

// 输出图象到页面
ImageIOwrite(image, "JPEG", responsegetOutputStream());
%>

3resultjsp
<%@ page language="java" import="javautil" pageEncoding="GBK"%>
<html><body>
<%
String input=requestgetParameter("input");
String code=(String)sessiongetAttribute("code");
if(inputequals(code)){
outprintln("验证成功!");
}else{
outprintln("验证失败!");
}
%>
body>html>

验证码的实现可以通过servlet的动态生成一张流,在jsp上指向servlet的地址就可以了!再把验证码的文字保存在session中!用户根据jsp页面输入的信息传入后台进行判断就可以了!具体代码网上很多!请多百度!

<html>
<head>
<title>简单页面</title>
<script>
function yzm(){
var Num="";
for(var i=0;i<4;i++)
{
Num+=Mathfloor(Mathrandom()10);
}
documentgetElementById("yzphoto")value=Num;
documentgetElementById("yzm")value=Num;
}
function userLogin(){
var userName = documentgetElementById("userName")value;
var password = documentgetElementById("password")value;
var yztext = documentgetElementById("yztext")value;
var yzm = documentgetElementById("yzm")value;
if(userName != "jq"){
alert("用户名错误");
}else if(password != "123"){
alert("密码错误");
}else if(yztext != yzm){
alert("验证码错误");
}else{
alert("登陆成功");
}
locationreload();
}
</script>
</head>
<body onLoad="yzm()">
<div style="width:100%;text-align:center">
<h1>用户登录</h1>
<table>
<tr>
<td>用户名:</td>
<td><input id="userName" type="text" value=""/></td>
</tr>
<tr>
<td>密码:</td>
<td><input id="password" type="password" value=""/></td>
<tr>
<tr><td>
验证码:
</td>
<td><input id="yztext" type="text" value=""/><input style="width:50px;background-
color:red;color:blue" type="text" id="yzphoto" value=""/><input type="hidden" id="yzm"
value=""></td></tr>
<tr>
<td colspan="2" align="center"><input onclick="userLogin()" type="button" value="登陆"/></td>
</tr>
</table>
</div>
</body>
</html>


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13319660.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-14
下一篇 2023-07-14

发表评论

登录后才能评论

评论列表(0条)

保存