java
package com; 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.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ValidateCode extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; private static final int I_WIDTH = 60; // 图片宽度 private static final int I_HEIGHT = 18; // 图片高度 private static Font VALIDATECODE_FONT = new Font("Times New Roman", 0, 18); // 字体 private static String codeName = null; // 保存到session里面的名字 public ValidateCode() { super(); } public void destroy() { super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Pragma", "No-cache"); // 设置不缓存 response.setHeader("Cache-Control", "no-cache"); // 设置缓存控制器,不缓存 response.setDateHeader("Expires", 0L); // 设置不过期。 BufferedImage bImage = new BufferedImage(I_WIDTH, I_HEIGHT, 1);// 生成一张“画布” Graphics g = bImage.getGraphics(); // 获取一支“画笔” g.setColor(Color.WHITE); // 白色 g.fillRect(0, 0, I_WIDTH, I_HEIGHT); // 画一个矩形,fillRect填充整个矩形 g.setColor(Color.BLUE); // 蓝色 g.drawRect(0, 0, I_WIDTH - 1, I_HEIGHT - 1);// 画边框,drawRect画一个空心矩形 g.setColor(Color.BLACK);// 黑色 g.setFont(VALIDATECODE_FONT); // 设置字体 String codeNumber = new String("" + (10000 + new Random().nextInt(89999))); // 生成随机验证码 request.getSession().setAttribute(codeName, codeNumber); // 将验证码保存到session里面 g.drawString(codeNumber, 7, 15); // 将验证码画到图片上 for (int i = 0; i < 20; i++) { // 给图片加上20个躁点 int x = new Random().nextInt(I_WIDTH); int y = new Random().nextInt(I_HEIGHT); g.drawLine(x, y, x, y); } g.dispose(); // 画好了将笔收起来 ImageIO.write(bImage, "JPEG", response.getOutputStream()); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } @Override public void init(ServletConfig config) throws ServletException { codeName = config.getInitParameter("code"); // 获取web.xml里code的值 } }
web.xml
<servlet> <servlet-name>ValidateCode</servlet-name> <servlet-class>com.ValidateCode</servlet-class> <init-param> <param-name>code</param-name> <param-value>code</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ValidateCode</servlet-name> <url-pattern>/code</url-pattern> </servlet-mapping>
html
<img src="code"/>