Servlet仿CSDN动态验证码的生成带数字和字母讲解Word格式文档下载.docx
- 文档编号:17247609
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:14
- 大小:19.66KB
Servlet仿CSDN动态验证码的生成带数字和字母讲解Word格式文档下载.docx
《Servlet仿CSDN动态验证码的生成带数字和字母讲解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Servlet仿CSDN动态验证码的生成带数字和字母讲解Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
publicclassAuthCode{
publicstaticfinalintAUTHCODE_LENGTH=5;
//验证码长度
publicstaticfinalintSINGLECODE_WIDTH=15;
//单个验证码宽度
publicstaticfinalintSINGLECODE_HEIGHT=30;
//单个验证码高度
publicstaticfinalintSINGLECODE_GAP=4;
//单个验证码之间间隔
publicstaticfinalintIMG_WIDTH=AUTHCODE_LENGTH*(SINGLECODE_WIDTH+SINGLECODE_GAP);
publicstaticfinalintIMG_HEIGHT=SINGLECODE_HEIGHT;
publicstaticfinalchar[]CHARS={'
0'
'
1'
'
2'
3'
4'
5'
6'
7'
8'
'
9'
a'
b'
c'
d'
e'
f'
g'
h'
i'
j'
k'
l'
m'
n'
o'
p'
q'
r'
s'
t'
u'
v'
w'
x'
y'
z'
A'
B'
C'
D'
E'
F'
G'
H'
I'
J'
K'
L'
M'
N'
O'
P'
Q'
R'
S'
T'
U'
V'
W'
X'
Y'
Z'
};
staticRandomrandom=newRandom();
/**
*返回图片中的数字
*@returnString
publicstaticStringgetAuthCode(){
StringBufferbuffer=newStringBuffer();
for(inti=0;
i<
5;
i++){//生成6个字符
buffer.append(CHARS[random.nextInt(CHARS.length)]);
}
returnbuffer.toString();
*返回带数字的图片
*@returnBufferedImage
publicstaticBufferedImagegetAuthImg(StringauthCode){
//设置图片的高、宽、类型
//RGB编码:
red、green、blue
BufferedImageimg=newBufferedImage(IMG_WIDTH,IMG_HEIGHT,
BufferedImage.TYPE_INT_BGR);
//得到图片上的一个画笔
Graphicsg=img.getGraphics();
//设置画笔的颜色,用来做背景色
g.setColor(Color.RED);
//用画笔来填充一个矩形,矩形的左上角坐标,宽,高
g.fillRect(0,0,IMG_WIDTH,IMG_HEIGHT);
//将画笔颜色设置为黑色,用来写字
g.setColor(Color.BLACK);
//设置字体:
宋体、不带格式的、字号
g.setFont(newFont("
宋体"
Font.PLAIN,SINGLECODE_HEIGHT+5));
//输出数字
charc;
authCode.toCharArray().length;
i++){
//取到对应位置的字符
c=authCode.charAt(i);
//画出一个字符串:
要画的内容,开始的位置,高度
g.drawString(c+"
"
i*(SINGLECODE_WIDTH+SINGLECODE_GAP)
+SINGLECODE_GAP/2,IMG_HEIGHT);
Randomrandom=newRandom();
//干扰素
15;
intx=random.nextInt(IMG_WIDTH);
inty=random.nextInt(IMG_HEIGHT);
intx2=random.nextInt(IMG_WIDTH);
inty2=random.nextInt(IMG_HEIGHT);
g.drawLine(x,y,x+x2,y+y2);
returnimg;
}
在这里还可以自己更改图片的背景色、验证码的个数、干扰素强度等,有兴趣的同学自己好好设置下吧
3、生成动态验证码的servlet
getAuthCodeServlet.java
importjava.io.IOException;
importjavax.imageio.ImageIO;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
*得到生成验证码图片的servlet
publicclassgetAuthCodeServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
StringauthCode=AuthCode.getAuthCode();
request.getSession().setAttribute("
authCode"
authCode);
//将验证码保存到session中,便于以后验证
try{
//发送图片
ImageIO.write(AuthCode.getAuthImg(authCode),"
JPEG"
response.getOutputStream());
}catch(IOExceptione){
e.printStackTrace();
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
doGet(request,response);
4、index调用,并进行输入正确的判断
[html]viewplaincopy
<
%@pagelanguage="
java"
import="
java.util.*"
pageEncoding="
UTF-8"
%>
%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+"
:
//"
+request.getServerName()+"
+request.getServerPort()+path+"
/"
;
!
DOCTYPEHTMLPUBLIC"
-//W3C//DTDHTML4.01Transitional//EN"
>
html>
<
head>
basehref="
%=basePath%>
title>
MyJSP'
index.jsp'
startingpage<
/title>
metahttp-equiv="
pragma"
content="
no-cache"
cache-control"
expires"
0"
keywords"
keyword1,keyword2,keyword3"
description"
Thisismypage"
--
linkrel="
stylesheet"
type="
text/css"
href="
styles.css"
-->
/head>
body>
formaction="
index.jsp"
method="
post"
servlet/GetAuthCodeServlet"
id="
authImg"
ahref="
#"
onClick="
window.location.reload()"
看不清<
/a>
br>
inputtype="
text"
name="
inputCode"
StringinputCode=(String)request.getParameter("
);
StringauthCode=(String)session.getAttribute("
if(inputCode!
=null){
if(authCode.equalsIgnoreCase(inputCode)){
out.print("
验证码正确!
}else{
验证码错误!
请重新输入!
submit"
value="
提交"
/form>
/body>
/html>
这里在直接都在一个jsp中判断了
5、web.xml设置
?
xmlversion="
1.0"
encoding="
web-appversion="
2.5"
xmlns="
xmlns:
xsi="
http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
servlet>
servlet-name>
getAuthCodeServlet<
/servlet-name>
servlet-class>
com.mucfc.getAuthCodeServlet<
/servlet-class>
/servlet>
servlet-mapping>
url-pattern>
/servlet/GetAuthCodeServlet<
/url-pattern>
/servlet-mapping>
welcome-file-list>
welcome-file>
index.html<
/welcome-file>
index.htm<
index.jsp<
default.html<
default.htm<
default.jsp<
/welcome-file-list>
/web-app>
6、运行效果
三、仿CSDN动态验证码实现
整个工程结构不变,
项目二下载
1、AuthCode改成如下
importjava.util.ArrayList;
importjava.util.List;
publicstaticfinalintSINGLECODE_WIDTH=20;
publicstaticfinalchar[]OPERATION={'
+'
-'
*'
};
publicstaticList<
getAuthCode(){
charchar1=CHARS[random.nextInt(CHARS.length)];
charchar2=CHARS[random.nextInt(CHARS.length)];
charopt=OPERATION[random.nextInt(OPERATION.length)];
buffer.append(char1);
buffer.append(getOperation(opt));
buffer.append(char2);
Stringresult=getResult(char1,char2,opt);
List<
list=newArrayList<
();
list.add(buffer.toString());
list.add(result);
returnlist;
*返回计算的结果
*@paramoperation
publicstaticStringgetResult(charchar1,charchar2,charoperation){
intint1=Integer.parseInt(String.valueOf(char1));
intint2=Integer.parseInt(String.valueOf(char2));
if('
==operation)
returnString.valueOf(int1+int2);
elseif('
returnString.valueOf(int1-int2);
returnString.valueOf(int1*int2);
else
returnnull;
*返回符号对应的中文
publicstaticStringgetOperation(charoperation){
return"
加上"
减去"
乘以"
g.setColor(Color.YELLOW);
inty2=random.nextInt(IMG_HEIGHT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Servlet CSDN 动态 验证 生成 数字 字母 讲解