都是基础知识,就不说废话了,直接上例子.
大家都能看懂的.
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>
跑起来: