java生成验证码

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

都是基础知识,就不说废话了,直接上例子.

大家都能看懂的.

packagecom.gys;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.image.BufferedImage;importjava.util.Random;importjavax.imageio.ImageIO;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.Httpsession;publicclassMakeCode {PRivateRandom random =newRandom();privateString randString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//随机产生的字符串privateintwidth = 80;//图片宽privateintheight = 26;//图片高privateintlineSize = 40;//干扰线数量privateintstringNum = 4;//随机产生字符数量/** 获得字体*/privateFont getFont(){returnnewFont("Fixedsys",Font.CENTER_BASELINE,18);

}/** 获得颜色*/privateColor getRandColor(intfc,intbc){if(fc > 255)

fc= 255;if(bc > 255)

bc= 255;intr = fc + random.nextInt(bc-fc-16);intg = fc + random.nextInt(bc-fc-14);intb = fc + random.nextInt(bc-fc-18);returnnewColor(r,g,b);

}/*** 生成随机图片*/publicvoidgetRandcode(HttpServletRequest request,

HttpServletResponse response) {

HttpSession session=request.getSession();//BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类BufferedImage image =newBufferedImage(width,height,BufferedImage.TYPE_INT_BGR);

Graphics g= image.getGraphics();//产生Image对象的Graphics对象,该对象可以在图像上进行各种绘制操作g.fillRect(0, 0, width, height);

g.setFont(newFont("Times New Roman",Font.ROMAN_BASELINE,18));

g.setColor(getRandColor(110, 133));//绘制干扰线for(inti=0;i<=lineSize;i++){

drowLine(g);

}//绘制随机字符String randomString = "";for(inti=1;i<=stringNum;i++){

randomString=drowString(g,randomString,i);

}

session.removeAttribute("code");

session.setAttribute("code", randomString);

System.out.println(randomString);

g.dispose();try{

ImageIO.write(image,"JPEG", response.getOutputStream());//将内存中的图片通过流动形式输出到客户端}catch(Exception e) {

e.printStackTrace();

}

}/** 绘制字符串*/privateString drowString(Graphics g,String randomString,inti){

g.setFont(getFont());

g.setColor(newColor(random.nextInt(101),random.nextInt(111),random.nextInt(121)));

String rand=String.valueOf(getRandomString(random.nextInt(randString.length())));

randomString+=rand;

g.translate(random.nextInt(3), random.nextInt(3));

g.drawString(rand,13*i, 16);returnrandomString;

}/** 绘制干扰线*/privatevoiddrowLine(Graphics g){intx =random.nextInt(width);inty =random.nextInt(height);intxl = random.nextInt(13);intyl = random.nextInt(15);

g.drawLine(x, y, x+xl, y+yl);

}/** 获取随机的字符*/publicString getRandomString(intnum){returnString.valueOf(randString.charAt(num));

}

}

packagecom.gys;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassGetCodeServletextendsHttpServlet {privatestaticfinallongserialVersionUID = 1L;publicvoiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {

response.setContentType("image/jpeg");//设置相应类型,告诉浏览器输出的内容为图片response.setHeader("Pragma", "No-cache");//设置响应头信息,告诉浏览器不要缓存此内容response.setHeader("Cache-Control", "no-cache");

response.setDateHeader("Expire", 0);

MakeCode makeCode=newMakeCode();try{

makeCode.getRandcode(request, response);//输出图片方法}catch(Exception e) {

e.printStackTrace();

}

}publicvoiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {

doGet(request, response);

}

}

<?xmlversion="1.0" encoding="UTF-8"?><web-appversion="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><servlet><servlet-name>GetCodeServlet</servlet-name><servlet-class>com.gys.GetCodeServlet</servlet-class></servlet><servlet-mapping><servlet-name>GetCodeServlet</servlet-name><url-pattern>/getCode</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>

index.jsp:

<%@ page language="java"import="java.util.*"pageEncoding="utf-8"%><%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><basehref="<%=basePath%>"><title>验证码</title><scripttype="text/Javascript">functiongetCode(obj) {

obj.src="getCode?"+Math.random();//防止出现缓存}</script></head><body><imgtitle="点击更换"onclick="getCode(this);"src="getCode"><

br/></body></html>

跑起来:

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航