关闭

java生成验证码配置及编写

90人阅读 评论(0) 收藏 举报
  1. package com.validationCode;  
  2.   
  3. import java.awt.Color;  
  4. import java.awt.Font;  
  5. import java.awt.Graphics;  
  6. import java.awt.image.BufferedImage;  
  7. import java.io.ByteArrayOutputStream;  
  8. import java.io.IOException;  
  9. import java.util.Random;  
  10.   
  11. import javax.imageio.ImageIO;  
  12. import javax.servlet.ServletException;  
  13. import javax.servlet.ServletOutputStream;  
  14. import javax.servlet.http.HttpServlet;  
  15. import javax.servlet.http.HttpServletRequest;  
  16. import javax.servlet.http.HttpServletResponse;  
  17. import javax.servlet.http.HttpSession;  
  18.   
  19. public class RandomCode extends HttpServlet {  
  20.  private static final long serialVersionUID = 1L;  
  21.   
  22.  private static int WIDTH = 65;//设置图片的宽度  
  23.   
  24.  private static int HEIGHT = 22;//设置图片的高度  
  25.   
  26.  public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {  
  27.   HttpSession session = request.getSession();  
  28.   response.setContentType("image/jpeg");  
  29.   ServletOutputStream sos = response.getOutputStream();  
  30.   
  31.   response.setHeader("Pragma""No-cache");  
  32.   response.setHeader("Cache-Control""no-cache");  
  33.   response.setDateHeader("Expires"0);  
  34.   
  35.   BufferedImage image = new BufferedImage(WIDTH, HEIGHT,  
  36.     BufferedImage.TYPE_INT_RGB);  
  37.   Graphics g = image.getGraphics();  
  38.   
  39.   char[] rands = generateCheckCode();  
  40.   drawBackground(g);  
  41.   drawRands(g, rands);  
  42.   g.dispose();  
  43.   
  44.   ByteArrayOutputStream bos = new ByteArrayOutputStream();  
  45.   ImageIO.write(image, "JPEG", bos);  
  46.   byte[] buf = bos.toByteArray();  
  47.   response.setContentLength(buf.length);  
  48.   sos.write(buf);  
  49.   bos.close();  
  50.   sos.close();  
  51.   session.setAttribute("randomCode"new String(rands));  
  52.  }  
  53.   
  54.  private void drawBackground(Graphics g) {  
  55.   g.setColor(new Color(0xDCDCDC));  
  56.   g.fillRect(00, WIDTH, HEIGHT);  
  57.   for (int i = 0; i < 120; i++) {  
  58.    int x = (int) (Math.random() * WIDTH);  
  59.    int y = (int) (Math.random() * HEIGHT);  
  60.    int red = (int) (Math.random() * 255);  
  61.    int green = (int) (Math.random() * 255);  
  62.    int blue = (int) (Math.random() * 255);  
  63.    g.setColor(new Color(red, green, blue));  
  64.    g.drawOval(x, y, 10);  
  65.   }  
  66.  }  
  67.   
  68.  private void drawRands(Graphics g, char[] rands) {  
  69.   // g.setColor(Color.BLUE);  
  70.   Random random = new Random();  
  71.   int red = random.nextInt(110);  
  72.   int green = random.nextInt(50);  
  73.   int blue = random.nextInt(50);  
  74.   g.setColor(new Color(red, green, blue));  
  75.   g.setFont(new Font(null, Font.ITALIC | Font.BOLD, 18));  
  76.   g.drawString("" + rands[0], 117);  
  77.   g.drawString("" + rands[1], 1615);  
  78.   g.drawString("" + rands[2], 3118);  
  79.   g.drawString("" + rands[3], 4616);  
  80.  }  
  81.   
  82.  private char[] generateCheckCode() {  
  83.   String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";  
  84.   char[] rands = new char[4];  
  85.   for (int i = 0; i < 4; i++) {  
  86.    int rand = (int) (Math.random() * 36);  
  87.    rands[i] = chars.charAt(rand);  
  88.   }  
  89.   return rands;  
  90.  }  
  91.   
  92.  public void doPost(HttpServletRequest request, HttpServletResponse response)  
  93.    throws ServletException, IOException {  
  94.   this.doGet(request, response);  
  95.  }  
  96. }  

 

    然后保存为RandomCode.java。

然后进行编译,生成RandomCode.class文件,放到WEB-INF/classes/com/validationCode目录下;

然后修改WEB-INF目录中的web.xml,添加Servlet配置:

Xml代码  收藏代码
  1. <servlet>  
  2.   <servlet-name>RandomCodeServlet</servlet-name>  
  3.   <servlet-class>org.yuanliang.RandomCode</servlet-class>  
  4.  </servlet>  
  5.   
  6.  <servlet-mapping>  
  7.   <servlet-name>RandomCodeServlet</servlet-name>  
  8.   <url-pattern>/imgcode</url-pattern>  
  9.  </servlet-mapping>  

 
最后,在JSP页面中加入动态生成的图片验证码.
如: <img src="imgcode"/>
这时新的问题来了,如果用户看不清楚这个图片怎么为呢?
对了,就是加入刷新功能.
说两种简单的方法吧:
1.直接点击图片更换验证码:
可用JS脚本,添加如下代码到JSP页面中:

Html代码  收藏代码
  1. <script type="text/javascript">  
  2.         function changeCode()  
  3.   {  
  4.    document.getElementById("rc").src="imgcode";  
  5.   }  
  6.  </script>  

 

更改验证图片导入的代码:

Html代码  收藏代码
  1. <img src="imgcode" id="rc" onclick="changeCode()" title="看不清?单击换一张图片" /> 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1321次
    • 积分:59
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条