JAVA验证码工具实例代码
工具类:
packagecom.lhy.web.servlet;
importjava.awt.BasicStroke;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics2D;
importjava.awt.image.BufferedImage;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.OutputStream;
importjava.util.Random;
importjavax.imageio.ImageIO;
publicclassVerifyCode{
privateintw=70;//图片长
privateinth=35;//图片宽
privateRandomr=newRandom();//Random类生成随机数
//列举验证图片中验证码的字体类型
//{"宋体","华文楷体","黑体","华文新魏","华文隶书","微软雅黑","楷体_GB2312"}
privateString[]fontNames={"宋体","华文楷体","黑体","微软雅黑","楷体_GB2312"};
//验证码可选字符
privateStringcodes="23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ";
//背景色
privateColorbgColor=newColor(255,255,255);
//验证码上的文本
privateStringtext;
//生成随机的颜色
privateColorrandomColor(){
intred=r.nextInt(150);
intgreen=r.nextInt(150);
intblue=r.nextInt(150);
returnnewColor(red,green,blue);
}
//生成随机的字体
privateFontrandomFont(){
intindex=r.nextInt(fontNames.length);
StringfontName=fontNames[index];//生成随机的字体名称
intstyle=r.nextInt(4);//生成随机的样式,0(无样式),1(粗体),2(斜体),3(粗体+斜体)
intsize=r.nextInt(5)+24;//生成随机字号,24~28
returnnewFont(fontName,style,size);
}
//画干扰线
privatevoiddrawLine(BufferedImageimage){
intnum=3;//一共画3条
Graphics2Dg2=(Graphics2D)image.getGraphics();
for(inti=0;i
VerifyCodeServlet:
packagecom.lhy.web.servlet;
importjava.awt.image.BufferedImage;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclassVerifyCodeServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
/*
*1.生成图片
*2.保存图片上的文本到session域中
*3.把图片响应给客户端
*/
VerifyCodevc=newVerifyCode();
BufferedImageimage=vc.getImage();
request.getSession().setAttribute("session_vcode",vc.getText());//保存图片上的文本到session域
VerifyCode.output(image,response.getOutputStream());
}
}
LoginServlet:
packagecom.lhy.web.servlet;
importjava.io.IOException;
importjavax.servlet.RequestDispatcher;
importjavax.servlet.ServletException;
importjavax.servlet.http.Cookie;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
publicclassLoginServletextendsHttpServlet{
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
/*
*校验验证码
*1.从session中获取正确的验证码
*2.从表单中获取用户填写的验证码
*3.进行比较!
*4.如果相同,向下运行,否则保存错误信息到request域,转发到login.jsp
*/
StringsessionCode=(String)request.getSession().getAttribute("session_vcode");
StringparamCode=request.getParameter("verifyCode");
if(!paramCode.equalsIgnoreCase(sessionCode)){
request.setAttribute("msg","验证码错误!");
request.getRequestDispatcher("/login.jsp").forward(request,response);
return;
}
/*
*1.获取表单数据
*/
//处理中文问题
request.setCharacterEncoding("utf-8");
//获取
Stringusername=request.getParameter("username");
Stringpassword=request.getParameter("password");
/*
*2.校验用户名和密码是否正确
*/
if("itcast".equalsIgnoreCase(username)){//登录成功
/*
*附加项:把用户名保存到cookie中,发送给客户端浏览器
*当再次打开login.jsp时,login.jsp中会读取request中的cookie,把它显示到用户名文本框中
*/
Cookiecookie=newCookie("uname",username);//创建Cookie
cookie.setMaxAge(60*60*24);//设置cookie命长为1天
response.addCookie(cookie);//保存cookie
/*
*3.如果成功
*>保存用户信息到session中
*>重定向到succ1.jsp
*/
HttpSessionsession=request.getSession();//获取session
session.setAttribute("username",username);//向session域中保存用户名
response.sendRedirect("/Test/succ1.jsp");
}else{//登录失败
/*
*4.如果失败
*>保存错误信息到request域中
*>转发到login.jsp
*/
request.setAttribute("msg","用户名或密码错误!");
RequestDispatcherqr=request.getRequestDispatcher("/login.jsp");//得到转发器
qr.forward(request,response);//转发
}
}
}
login.jsp:
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<%Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
"rel="externalnofollow">
MyJSP'login.jsp'startingpage
function_change(){
/*
1.得到img元素
2.修改其src
*/
varimgEle=document.getElementById("img");
imgEle.src="http://dh.wk163.com<%=basePath%>servlet/VerifyCodeServlet?a="+newDate().getTime();
}
<%--本页面提供登录表单,还要显示错误信息--%>
登录
<%
/*
读取名为uname的Cookie!
如果为空显示:""
如果不为空显示:Cookie的值
*/
Stringuname="";
Cookie[]cs=request.getCookies();//获取请求中所有的cookie
if(cs!=null){//如果存在cookie
for(Cookiec:cs){//循环遍历所有的cookie
if("uname".equals(c.getName())){//查找名为uname的cookie
uname=c.getValue();//获取这个cookie的值,给uname这个变量
}
}
}
%>
<%
Stringmessage="";
Stringmsg=(String)request.getAttribute("msg");//获取request域中的名为msg的属性
if(msg!=null){
message=msg;
}
%>
<%=message%>
<%--把cookie中的用户名显示到用户名文本框中--%>
用户名:"/>
密码:
验证码:
servlet/VerifyCodeServlet"/>
换一张
loginsuccess:
succ1
<%
Stringusername=(String)session.getAttribute("username");
if(username==null){
/*
1.向request域中保存错误信息,转发到login.jsp
*/
request.setAttribute("msg","您还没有登录!请先登录!");
request.getRequestDispatcher("/login.jsp").forward(request,response);
return;
}
%>
欢迎欢迎,热烈欢迎,欢迎<%=username%>领导指导工作!