java 生成验证码

2025-10-29 06:08:47

1、新建一个servelet 名字叫ImageRandServlet

java 生成验证码

2、在doget方法中填写如下代码

java 生成验证码

3、ImageRandServlet 类的代码如下:

import java.awt.Color;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.io.OutputStream;

import java.util.Random;

import java.awt.Font; 

import javax.imageio.ImageIO;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class ImageRandServlet extends HttpServlet {

          private static final String CONTENT_TYPE = "image/jpeg";

          //Initialize global variables

          public void init() throws ServletException {

          }

          //Process the HTTP Get request

          public void doGet(HttpServletRequest request, HttpServletResponse response) throws

            ServletException, IOException {

         try {

      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);

      OutputStream os = response.getOutputStream();

      Graphics g = image.getGraphics();

      Random random = new Random();

      g.setColor(getRandColor(200, 250));

      g.fillRect(0, 0, width, height);

      g.setFont(new Font("Arial", Font.PLAIN, 18));

      g.setColor(getRandColor(160, 200));

      for (int i = 0; i < 155; i++) {

      int x = random.nextInt(width);

      int y = random.nextInt(height);

      int xl = random.nextInt(12);

      int yl = random.nextInt(12);

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

      }

      String sRand = "";

      for (int j = 0; j < 4; j++) {

      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 * j + 6, 16);

      }

      request.getSession().setAttribute("rand", sRand);

      g.dispose();

      ImageIO.write(image, "JPEG", os);

      os.flush();

      os.close();

      os = null;

      response.flushBuffer();

      // out.clear();

      // out = pageContext.pushBody();

      } catch (IllegalStateException e) {

      e.printStackTrace();

      }

          }

          //Process the HTTP Post request

          public void doPost(HttpServletRequest request, HttpServletResponse response) throws

            ServletException, IOException {

            doGet(request, response);

          }

          //Clean up resources

          public void destroy() {

          }

          

          

          public 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);

      }

}

1、新建test.jsp页面,此页面是来现实验证码的界面

java 生成验证码

2、在<body></body>之间添加如下代码:<img src="servlet/imageRandServlet">

3、jsp代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%

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>My JSP 'test.jsp' starting page</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">

-->

  </head>

  

  <body>

    <img src="<%=basePath%>servlet/imageRandServlet">

  </body>

</html>

1、在WEB-INF目录下找到web.xml 在<web-app></web-app>节点之间添加

<servlet>

    <servlet-name>imageRandServlet</servlet-name>

    <servlet-class>com.xianmeixian.util.ImageRandServlet</servlet-class>

  </servlet>

  

  <servlet-mapping>

    <servlet-name>imageRandServlet</servlet-name>

    <url-pattern>/servlet/imageRandServlet</url-pattern>

  </servlet-mapping>

java 生成验证码

2、运行程序,结果如下

java 生成验证码

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢