问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JAVA验证码生成问题

发布网友 发布时间:2022-04-23 22:41

我来回答

2个回答

热心网友 时间:2023-10-12 12:56

贴一点我找的代码吧
例程7-11 check_code.html

<h3>带有验证码的登录页面</h3>

<form action="servlet/LogonFormServlet" method="post">

用户名:<input type="text" name="name"><br>

密 码:<input type="password" name="pass"><br>

验证码:<input type="text" name="check_code">

<img src="servlet/CheckCodeServlet"><br>

<input type="submit" value="登录">

</form>

例程7-12 CheckCodeServlet.java

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

import java.awt.*;

import java.awt.image.*;

import javax.imageio.ImageIO;

public class CheckCodeServlet extends HttpServlet

{

private static int WIDTH = 60;

private static int HEIGHT = 20;

public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException,IOException

{

HttpSession session = request.getSession();

response.setContentType("image/jpeg");

ServletOutputStream sos = response.getOutputStream();

//设置浏览器不要缓存此图片

response.setHeader("Pragma","No-cache");

response.setHeader("Cache-Control","no-cache");

response.setDateHeader("Expires", 0);

//创建内存图象并获得其图形上下文

BufferedImage image =

new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);

Graphics g = image.getGraphics();

//产生随机的认证码

char [] rands = generateCheckCode();

//产生图像

drawBackground(g);

drawRands(g,rands);

//结束图像的绘制过程,完成图像

g.dispose();

//将图像输出到客户端

ByteArrayOutputStream bos = new ByteArrayOutputStream();

ImageIO.write(image, "JPEG", bos);

byte [] buf = bos.toByteArray();

response.setContentLength(buf.length);

//下面的语句也可写成:bos.writeTo(sos);

sos.write(buf);

bos.close();

sos.close();

//将当前验证码存入到Session中

session.setAttribute("check_code",new String(rands));

//直接使用下面的代码将有问题,Session对象必须在提交响应前获得

//request.getSession().setAttribute("check_code",new String(rands));

}

private char [] generateCheckCode()

{

//定义验证码的字符表

String chars = "0123456789abcdefghijklmnopqrstuvwxyz";

char [] rands = new char[4];

for(int i=0; i<4; i++)

{

int rand = (int)(Math.random() * 36);

rands[i] = chars.charAt(rand);

}

return rands;

}

private void drawRands(Graphics g , char [] rands)

{

g.setColor(Color.BLACK);

g.setFont(new Font(null,Font.ITALIC|Font.BOLD,18));

//在不同的高度上输出验证码的每个字符

g.drawString("" + rands[0],1,17);

g.drawString("" + rands[1],16,15);

g.drawString("" + rands[2],31,18);

g.drawString("" + rands[3],46,16);

System.out.println(rands);

}

private void drawBackground(Graphics g)

{

//画背景

g.setColor(new Color(0xDCDCDC));

g.fillRect(0, 0, WIDTH, HEIGHT);

//随机产生120个干扰点

for(int i=0; i<120; i++)

{

int x = (int)(Math.random() * WIDTH);

int y = (int)(Math.random() * HEIGHT);

int red = (int)(Math.random() * 255);

int green = (int)(Math.random() * 255);

int blue = (int)(Math.random() * 255);

g.setColor(new Color(red,green,blue));

g.drawOval(x,y,1,0);

}

}

}

例程7-13 LogonFormServlet.java

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class LogonFormServlet extends HttpServlet

{

public void service(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException

{

response.setContentType("text/html;charset=GB2312");

PrintWriter out = response.getWriter();

HttpSession session = request.getSession(false);

if(session == null)

{

out.println("验证码处理问题!");

return;

}

String savedCode = (String)session.getAttribute("check_code");

if(savedCode == null)

{

out.println("验证码处理问题!");

return;

}

String checkCode = request.getParameter("check_code");

if(!savedCode.equals(checkCode))

{

/*验证码未通过,不从Session中清除原来的验证码,

以便用户可以后退回登录页面继续使用原来的验证码进行登录*/

out.println("验证码无效!");

return;

}

/*验证码检查通过后,从Session中清除原来的验证码,

以防用户后退回登录页面继续使用原来的验证码进行登录*/

session.removeAttribute("check_code");

out.println("验证码通过,服务器正在校验用户名和密码!");

}

}
编译上面的两个Java源文件,确保编译后生成的class文件存放在了<tomcat安装目录>\webapps\it315\WEB-INF\classes目录中。将check_code.html文件保存在<tomcat安装目录>\webapps\it315目录中。

(2)在<tomcat安装目录>\webapps\it315\WEB-INF\web.xml文件中注册有关的Servlet,并设置其映射URL。在web.xml文件中的相应位置处增加如下两段内容:

<servlet>

<servlet-name>CheckCodeServlet</servlet-name>

<servlet-class>CheckCodeServlet</servlet-class>

</servlet>

<servlet>

<servlet-name>LogonFormServlet</servlet-name>

<servlet-class>LogonFormServlet</servlet-class>

</servlet>

……

<servlet-mapping>

<servlet-name>CheckCodeServlet</servlet-name>

<url-pattern>/servlet/CheckCodeServlet</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>LogonFormServlet</servlet-name>

<url-pattern>/servlet/LogonFormServlet</url-pattern>

</servlet-mapping>

保存web.xml文件后,重新启动Tomcat。

(3)在浏览器地址栏中输入如下地址:

http://localhost:8080/it315/check_code.html

浏览器中显示出如图7.25所示的效果,然后就可以对验证码的功能进行测试了

热心网友 时间:2023-10-12 12:56

你的肯定是没有图片输出
一般而言,可能原因为:
1、你的验证码图片生成的时候没有任何信息,是个“空”图片
2、你忘记了向页面输出图片输出流
3、你输出的页面和你本来想输的页面不是同一页面

最好的解决方式:上网搜成熟的代码 验证码图片生成也不是很复杂的事情
其次:按顺序好好检查下代码
最后:放弃吧~!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
64岁的老头感冒了,还喝一瓶啤酒,又喝3包感冒药,吃了3个阿莫西林消炎药... ...今天中午12点喝了一瓶啤酒,不会有反应死了吧? 喝一瓶啤酒吃药没事吧 养育孩子有哪些正确的方式? 联想电脑一开机就蓝屏怎么解决 光遇冥想任务怎么完成_冥想任务攻略 光遇 光遇云野的锦鲤池冥想怎么做? 光遇 光遇在滑冰场旁冥想的任务怎么做? 光遇在仙乡的金塔下冥想任务怎么做 任务达成方法介绍 光遇 光遇在禁阁的神坛旁冥想怎么做? 属兔,2011年4月27日,18点16分生的男孩想起名字叫丁浩然,帮忙测测这个名字好不好? Java有提供获取一个压缩文件的MD5验证码的API吗? 敬请高手看一下我儿子的名字怎么样:丁浩然,公历2012年10月31日,农历九月十七。 求一个Java语言编写的gif动态验证码 就是百度注册用户的那种 丁浩然生辰2013年阳历11月27出生名字好吗 求JAVA 程序破解该类验证码的源码??有没有大神~~~ 2017年6月19号小孩起名叫丁浩然行不 帮我测一下这个名字好吗?丁浩然,07年农历10月16的男娃 jsp技术的验证码源代码? 验证码源代码,jsp jsp中显示验证码的代码怎么写? 求一篇用java生成的验证码程序。。。 菠菜大枣粥的做法 电脑xp 系统,用wps2019会出现大量wps进程,怎么回事 宝宝菠菜粥的做法 菠菜粥怎么做好吃 为什么使用wps软件打开表格,怎样取消弹出的ExcelAPInet Add-In 2019-Dia_百度问一问 菠菜猪肝大米粥怎么做 菠菜大枣粥的做法是怎样的? wps2019版好用吗 全网营销成本高不高?西安新新人类做网站优化怎样? 丁浩然的资料 请问,这图片上的东西,用Java怎么做出来(不是js),用初学的水平做就行,不要做太难,要源代码 西安高端全网系统化推广有哪些? 本人姓丁,求一男孩名,名字要有意义,谢谢 全网营销好做吗,具体都包括什么? 网上的那些java源代码怎么用 丁煜鑫给男孩起名字好吗? 西安哪里卖货车西安全网营销 jsp/ajax/servlet验证码 java源代码是给你一个身份证号,通过面板身份证号的输入,显示出该身份证主人的出生年月,省份,性别等资料 谁会做SEO排名的,全网的,可以不用到办公司,私人做 全国有多少叫丁浩然的 关于JAVAEE的一些问题?求大神!JavaEE 西安哪个网站建设好些?我们公司准备要建个网站,想让大家推荐一个。 我的统帅洗衣机打开电源水就一直流到处水口了,水不进桶,桶也不转,为什么? 求JAVA源代码 ~~~!!! 哪家全网网站seo优化营销推广公司靠谱? 丁浩轩和丁浩然那好 统帅洗衣机开机有显示,可以放水但水位满洗衣机不转