jsp-网页验证码


主要是实现网页中的随机验证码功能,当然,只是实现了该出现功能,并没有实现判断对错功能,要做的话其实也是很简单的。

  1. package servlet;
  2. import java.awt.Color;
  3. import java.awt.Font;
  4. import java.awt.Graphics2D;
  5. import java.awt.image.BufferedImage;
  6. import java.io.IOException;
  7. import java.util.Random;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletOutputStream;
  10. import javax.servlet.http.HttpServlet;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import javax.servlet.http.HttpSession;
  14. import com.sun.image.codec.jpeg.JPEGCodec;
  15. import com.sun.image.codec.jpeg.JPEGImageEncoder;
  16. /**
  17.  * imageservlet
  18.  */
  19. public class ImageServlet extends HttpServlet {
  20.     private static final long serialVersionUID = 1L;
  21.     // 随机出现的字符
  22.     private static final String CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  23.     static Random random = new Random();
  24.     // 字符长度为6
  25.     private static final int NUM = 6;
  26.     /**
  27.      * 获得随机字符串
  28.      * 
  29.      * @return String
  30.      */
  31.     private String getRandomString() {
  32.         StringBuffer sb = new StringBuffer();
  33.         for (int i = 0; i < NUM; i++) {
  34.             // 追加
  35.             sb.append(CHARS.charAt(random.nextInt(CHARS.length())));
  36.         }
  37.         return sb.toString();
  38.     }
  39.     /**
  40.      * 返回字体颜色
  41.      * 
  42.      * @return Color
  43.      */
  44.     private Color getFontColor() {
  45.         Color c = null;
  46.         // 采用rgb形式的颜色,随机生成三个小于255的整数
  47.         c = new Color(random.nextInt(255), random.nextInt(255),
  48.                 random.nextInt(255));
  49.         return c;
  50.     }
  51.     /**
  52.      * 获得背景颜色
  53.      * 
  54.      * @return Color
  55.      */
  56.     private Color getBgColor(Color c) {
  57.         // 采用与字体不一样的颜色
  58.         // 为了避免字体与背景颜色一样,而影响观察
  59.         return new Color(255 - c.getBlue(), 255 - c.getGreen(),
  60.                 255 - c.getRed());
  61.     }
  62.     @Override
  63.     protected void doGet(HttpServletRequest request,
  64.             HttpServletResponse response) throws ServletException, IOException {
  65.         // 得到session对象,用来存储随机字符串的值
  66.         HttpSession session = request.getSession(true);
  67.         response.setContentType("image/jpeg");
  68.         // 得到随机字符串
  69.         String randomString = getRandomString();
  70.         session.setAttribute("randomString", randomString);
  71.         // 设置图片的宽和高
  72.         int width = 90;
  73.         int height = 30;
  74.         // 得到字体颜色
  75.         Color fontColor = getFontColor();
  76.         // 得到背景颜色
  77.         Color bgColor = getBgColor(fontColor);
  78.         // 创建一个图片对象(该图片放置在内存中)
  79.         BufferedImage image = new BufferedImage(width, height,
  80.                 BufferedImage.TYPE_INT_BGR);
  81.         // 创建绘图对象,从image得到绘图对象,会把数据绘制到image上
  82.         Graphics2D g = image.createGraphics();
  83.         // 设置字体样式
  84.         g.setFont(new Font("宋体", Font.BOLD, 24));
  85.         // 设置背景颜色
  86.         g.setColor(bgColor);
  87.         // 对图片进行填充
  88.         g.fillRect(00, width, height);
  89.         // 设置字体颜色
  90.         g.setColor(fontColor);
  91.         // 在图片上绘制字符串
  92.         for (int i = 0; i < randomString.length(); i++) {
  93.             g.drawString(randomString.charAt(i) + ""8 + i * 1222);
  94.         }
  95.         // 画出干扰点
  96.         for (int i = 0, n = random.nextInt(100); i < n; i++) {
  97.             // 设置点的位置以及大小
  98.             g.fillRect(random.nextInt(width), random.nextInt(height), 11);
  99.         }
  100.         // 将图片输出到浏览器中
  101.         ServletOutputStream outStream = response.getOutputStream();
  102.         JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outStream);
  103.         encoder.encode(image);
  104.         outStream.flush();
  105.         outStream.close();
  106.     }
  107. }

jsp代码:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10.     <img src="ImageServlet" />
  11. </body>
  12. </html>

web.xml配置

  1. <servlet>
  2.     <servlet-name>ImageServlet</servlet-name>
  3.     <servlet-class>servlet.ImageServlet</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6.     <servlet-name>ImageServlet</servlet-name>
  7.     <url-pattern>/ImageServlet</url-pattern>
  8. </servlet-mapping>

声明:大家学-卢卫湘|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - jsp-网页验证码


加vx: beyonds 备注:app上架 lwxshow