1、编写servlet package ch17.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /* * 登录验证码的实现Servlet */ public class VImage extends HttpServlet { Color getRandColor(int fc, int bc) { Random random = new Random(); if (fc > 255) fc = 255; if (bc > 255) bc = 255; int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r, g, b); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置页面不缓存 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); //在内存中创建图像 int width=60,height=20; BufferedImage image=new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB); //获取图形上下文 Graphics g=image.getGraphics(); //生成随机类 Random random=new Random(); //设定背景色 g.setColor(getRandColor(200,250)); g.fillRect(0, 0, width, height); //设定字体 g.setFont(new Font("Time New Roman",Font.PLAIN,18)); //画边框 g.setColor(new Color(1)); g.drawRect(0, 0, width-1, height-1); //随机产生155条干扰线,使图像中的验证码不易被其它程序探测到 g.setColor(getRandColor(160,200)); for(int i=0;i<155;i++){ int x=random.nextInt(width); int y=random.nextInt(height); int x1=random.nextInt(12); int y1=random.nextInt(12); g.drawLine(x,y, x+x1, y+y1); } //随机产生的验证码4位 String sRand=""; for(int i =0;i<4;i++){ String rand=String.valueOf(random.nextInt(10)); sRand+=rand; //将验证码显示到图像中 g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); g.drawString(rand,13*i+6,17); } //将验证码存入session request.getSession().setAttribute("rand",sRand); //图像生效 g.dispose(); //输出图像到页面 ImageIO.write(image,"JPEG",response.getOutputStream()); } } 2、配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="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>VImage</servlet-name> <servlet-class>ch17.util.VImage</servlet-class> </servlet> <servlet-mapping> <servlet-name>VImage</servlet-name> <url-pattern>/VImage</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> 3、jsp测试验证码 <%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>验证码</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> --> </head> <body> <img border="0" src="VImage" mce_src="VImage" width="61" height="21"><br> </body> </html>