仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 423|回复: 8
打印 上一主题 下一主题

[学习教程] JAVA网站制作之JSP天生黑色考证码程序

[复制链接]
小妖女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:09:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
对于一个大型项目,如果用java来作,可能需要9个月,并且可能需要翻阅10本以上的书,但如果用ruby来作,3个月,3本书就足够了,而.net也不过3,4本书足以,这就是区别。js|程序|考证码天生有4个随机数字和混乱背景的图片,数字和背景色彩会改动,服务器端革新(用history.go(-1)也会变)

发生考证码图片的文件image.jsp

<%@pagecontentType="image/jpeg"import="java.awt.*,
java.awt.image.*,java.util.*,javax.imageio.*"%>
<%!
ColorgetRandColor(intfc,intbc){//给定局限取得随机色彩
Randomrandom=newRandom();
if(fc>255)fc=255;
if(bc>255)bc=255;
intr=fc+random.nextInt(bc-fc);
intg=fc+random.nextInt(bc-fc);
intb=fc+random.nextInt(bc-fc);
returnnewColor(r,g,b);
}
%>
<%
//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);

//在内存中创立图像
intwidth=60,height=20;
BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

//猎取图形高低文
Graphicsg=image.getGraphics();

//天生随机类
Randomrandom=newRandom();

//设定背景致
g.setColor(getRandColor(200,250));
g.fillRect(0,0,width,height);

//设定字体
g.setFont(newFont("TimesNewRoman",Font.PLAIN,18));

//画边框
//g.setColor(newColor());
//g.drawRect(0,0,width-1,height-1);

//随机发生155条搅扰线,使图像中的认证码不容易被别的程序探测到
g.setColor(getRandColor(160,200));
for(inti=0;i<155;i++)
{
intx=random.nextInt(width);
inty=random.nextInt(height);
intxl=random.nextInt(12);
intyl=random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}

//取随机发生的认证码(4位数字)
StringsRand="";
for(inti=0;i<4;i++){
Stringrand=String.valueOf(random.nextInt(10));
sRand+=rand;
//将认证码显现到图像中
g.setColor(newColor(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
//挪用函数出来的色彩不异,多是由于种子太靠近,以是只能间接天生
g.drawString(rand,13*i+6,16);
}

//将认证码存进SESSION
session.setAttribute("rand",sRand);

//图像失效
g.dispose();

//输入图像到页面
ImageIO.write(image,"JPEG",response.getOutputStream());
%>


利用考证码图片的文件a.jsp

<%@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></td>
</tr>
<tr>
<tdalign=left>输出下面的认证码:</td>
<td><inputtype=textname=randmaxlength=4value=""></td>
</tr>
<tr>
<tdcolspan=2align=center><inputtype=submitvalue="提交检测"></td>
</tr>
</form>
</body>
</html>


考证的页面check.jsp

<%@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 15:13:08 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
愤怒的大鸟 该用户已被删除
板凳
发表于 2015-1-28 08:07:40 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
第二个灵魂 该用户已被删除
地板
发表于 2015-2-5 13:34:14 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
活着的死人 该用户已被删除
5#
发表于 2015-2-11 21:16:06 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
莫相离 该用户已被删除
6#
发表于 2015-3-2 19:39:46 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
老尸 该用户已被删除
7#
发表于 2015-3-11 05:44:28 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
8#
发表于 2015-3-17 21:33:19 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
只想知道 该用户已被删除
9#
发表于 2015-3-25 02:59:06 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 17:03

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表