java生成验证码配置及编写

转载 2016年08月29日 16:25:18
  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="看不清?单击换一张图片" /> 

用javase写一个类实现自动生成验证码的功能,验证码随机自动生成;

用javase写一个类实现自动生成验证码的功能,验证码随机自动生成;
  • Love_Legain
  • Love_Legain
  • 2016年12月12日 21:51
  • 641

Java生成图片验证码(有点仿QQ验证码的意思)

看了挺多图片验证码的代码,感觉没什么长的好看点的,就自己动手写了个,写完发现跟QQ的有几分相似,比较满意。 功能包括:自定义图片尺寸和字符长度,随机背景颜色和字符颜色,随机字符偏移角度,字符平滑边缘,...
  • ruixue0117
  • ruixue0117
  • 2014年04月02日 23:32
  • 63976

java-通过类实现验证码(一)

[java] view plaincopyprint? package com.jadyer.util;      import java.awt.Color;   import jav...
  • u013147600
  • u013147600
  • 2015年08月27日 09:43
  • 1978

Java代码生成图片验证码实现

介绍一个使用Java代码生成随机图片验证码的示例 Java代码随机生成图片验证码 package com.rchm.util.images; import java.awt.Color; i...
  • rchm8519
  • rchm8519
  • 2015年04月16日 21:44
  • 15424

利用java自动生成验证码

验证码生成有两种形式,一种是保存一定的验证码图片在数据库中然后把相应的验证码也保存起来。通过查询数据库来确定用户输入的验证码是否正确。但是这种方式有很大的问题,其一就是验证码图片数量过少很容易就会发生...
  • linzhiqiang0316
  • linzhiqiang0316
  • 2016年05月01日 11:47
  • 1213

Java生成验证码并进行验证

一、实现思路 使用BufferedImage用于在内存中存储生成的验证码图片 使用Graphics来进行验证码图片的绘制,并将绘制在图片上的验证码存放到session中用于后续验证 最后通过Image...
  • worm0527
  • worm0527
  • 2016年04月06日 22:11
  • 15484

java图形验证码生成工具类及web页面校验验证码

java图形验证码生成工具类及web页面校验验证码
  • zhulin40
  • zhulin40
  • 2016年07月13日 16:59
  • 14954

Java Web:使用Servlet生成网页随机图片验证码

最近在学习Java Web开发,做了一个生成网页随机图片验证码的例子,在此记录。...
  • u013149325
  • u013149325
  • 2015年04月03日 10:53
  • 1375

Java-验证码生成(数字+字母)

package util;import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.aw...
  • wxgxgp
  • wxgxgp
  • 2017年07月13日 18:01
  • 379

菜鸟学Java(六)——简单验证码生成(Java版)

验证码大家都知道,它的作用也不用我多说了吧。如果不太清楚请参见百度百科中的解释,一般验证码的生成就是随机产生字符(数字、字母或者汉字等),然后将这些生成的字符绘制成一张图片,再在图片上加上一些干扰元素...
  • liushuijinger
  • liushuijinger
  • 2013年07月26日 10:29
  • 43103
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java生成验证码配置及编写
举报原因:
原因补充:

(最多只允许输入30个字)