仓酷云

标题: JAVA网站制作之图形认证码手艺的JSP完成 [打印本页]

作者: 爱飞    时间: 2015-1-18 11:21
标题: JAVA网站制作之图形认证码手艺的JSP完成
不得不提一下的是:.net是看到java红,而开发出来的工具。js|图形完成认证码手艺,必要以下几方面的筹办:
  1.天生认证码:
  我们可让体系随机发生一个数字来作为认证码,这方面在Javascript剧本言语和JAVA言语中都可得以完成。前者能够用Math.random()失掉一个介于0与1之间的小数,用它乘以10000再取整数部分,便可失掉0至9999之间的随机数。后者能够用Random类的nextInt(N)办法失掉一个介于0至N-1之间的随机类。
  在完成时,我们接纳了前者,即用Javascript天生的随机数作为认证码。次要缘故原由是Javascript是HTML内置的剧本言语,不论页面是行进、前进仍是革新,都能包管实时发生新的认证码,增添了随机性。而用JAVA完成时,则不具有此特征,扫瞄器还保留本来的认证码,随机性不强。
  2.天生认证码图像:
  这是对照关头的部分。侥幸的是,JAVA言语给我们供应了壮大的撑持。我们能够使用BufferedImage类在内存中绘制图像,并可使用ImageIO类将图像输入到JSP页面中。在绘制图像时,我们就能够将随机发生的认证码,绘制到图像中,进而展示在用户眼前。另,为了增添破译的难度,我们能够随机画一些点。
  3.保留认证码:
  在JSP言语中,我们能够充实使用该言语内置的SESSION对象来保留认证码之值,办法是:session.setAttribute("认证码名字",认证码之值)。并可用session.getAttribute("认证码名字")失掉体系保留的认证码之值,用来和用户输出的认证码比拟较,非常便利。
  3、认证码手艺的JSP完成
  1.image.jsp
  这个JSP程序的功效是:依据页面参数rand天生响应的认证码图像,同时设定SESSION变量rand,以便check.jsp考证用户输出的认证码时利用。
  源程序以下:
<%@pagecontentType="image/jpeg"import="java.awt.*,
java.awt.image.*,java.util.*,javax.imageio.*"%>
<%
//在内存中创立图像
intwidth=60,height=20;
BufferedImageimage=newBufferedImage(width,height,
BufferedImage.TYPE_INT_RGB);
//猎取图形高低文
Graphicsg=image.getGraphics();
//设定背景致
g.setColor(Color.white);
g.fillRect(0,0,width,height);
//画边框
g.setColor(Color.black);
g.drawRect(0,0,width-1,height-1);
//取随机发生的认证码(4位数字)
Stringrand=request.getParameter("rand");
rand=rand.substring(0,rand.indexOf("."));
switch(rand.length())
{
case1:rand="000"+rand;break;
case2:rand="00"+rand;break;
case3:rand="0"+rand;break;
default:rand=rand.substring(0,4);break;
}
//将认证码存进SESSION
session.setAttribute("rand",rand);
//将认证码显现到图像中
g.setColor(Color.black);
g.setFont(newFont("TimesNewRoman",Font.PLAIN,18));
g.drawString(rand,10,15);
//随机发生88个搅扰点,使图像中的认证码不容易被别的程序探测到
Randomrandom=newRandom();
for(inti=0;i<88;i++)
{
intx=random.nextInt(width);
inty=random.nextInt(height);
g.drawLine(x,y,x,y);
}
//图像失效
g.dispose();
//输入图像到页面
ImageIO.write(image,"JPEG",response.getOutputStream());
%>
2.a.jsp
  这个JSP程序的功效是:显现认证码,供应表单让用户输出认证码供校验用。注重,程序中显现认证码图像时,用了Javascript的document.write,并用了Math.random函数,从而包管了认证码的实时更新特征。
  源程序以下:
<%@pagecontentType="text/html;charset=gb2312"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<title>认证码输出页面</title>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
<METAHTTP-EQUIV="Pragma"CONTENT="no-cache">
<METAHTTP-EQUIV="Cache-Control"CONTENT="no-cache">
<METAHTTP-EQUIV="Expires"CONTENT="0">
</head>
<body>
<formmethod=postaction="check.jsp">
<table>
<tr>
<tdalign=left>体系发生的认证码:</td>
<td><script>document.write("");</script></td>
</tr>
<tr>
<tdalign=left>输出下面的认证码:</td>
<td><inputtype=textname=randmaxlength=4value=""></td>
</tr>
<tr>
<tdcolspan=2align=center><inputtype=submitvalue="提交检测"></td>
</tr>
</form>
</body>
</html>
3.check.jsp
  这个JSP程序的感化是对照用户输出的认证码与SESSION变量中保留的认证码,不异时提醒认证乐成,不然提醒认证失利。
  源程序以下:
<%@pagecontentType="text/html;charset=gb2312"language="java"
import="java.sql.*"errorPage=""%>
<html>
<head>
<title>认证码考证页面</title>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
<METAHTTP-EQUIV="Pragma"CONTENT="no-cache">
<METAHTTP-EQUIV="Cache-Control"CONTENT="no-cache">
<METAHTTP-EQUIV="Expires"CONTENT="0">
</head>
<body>
<%
Stringrand=(String)session.getAttribute("rand");
Stringinput=request.getParameter("rand");
%>
体系发生的认证码为:<%=rand%><br>
您输出的认证码为:<%=input%><br>
<br>
<%
if(rand.equals(input)){
%>
<fontcolor=green>输出不异,认证乐成!</font>
<%
}else{
%>
<fontcolor=red>输出分歧,认证失利!</font>
<%
}
%>
</body>
</html>



专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。
作者: 爱飞    时间: 2015-1-20 20:55
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者: 莫相离    时间: 2015-1-25 20:22
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者: 灵魂腐蚀    时间: 2015-2-1 16:54
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者: admin    时间: 2015-2-2 11:48
是一种将安全性(Security)列为第一优先考虑的语言
作者: 老尸    时间: 2015-2-3 15:03
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者: 分手快乐    时间: 2015-2-6 15:30
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者: 若相依    时间: 2015-2-8 08:31
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者: 小女巫    时间: 2015-2-12 00:16
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者: 精灵巫婆    时间: 2015-2-16 07:17
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
作者: 因胸联盟    时间: 2015-3-2 09:32
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
作者: 第二个灵魂    时间: 2015-3-6 15:03
是一种为 Internet发展的计算机语言
作者: 再现理想    时间: 2015-3-8 11:43
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
作者: 简单生活    时间: 2015-3-15 22:25
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者: 透明    时间: 2015-3-22 17:09
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2