A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 yting_xmei1129 于 2013-9-21 20:05 编辑

下面就是源代码,拿出来跟大家分享一下、、、这里只是客户端生成出认证码并存放到session中去,如果要实现校验功能的话还需要用户输入校验码,并在服务端上进行校验、、、有兴趣的朋友可以把整个工程都考给你们、、、
  1. package yting.day06.web.randompic;

  2. import java.awt.Color;
  3. import java.awt.Font;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.image.BufferedImage;
  7. import java.io.IOException;
  8. import java.util.Random;

  9. import javax.imageio.ImageIO;
  10. import javax.servlet.ServletException;
  11. import javax.servlet.http.HttpServlet;
  12. import javax.servlet.http.HttpServletRequest;
  13. import javax.servlet.http.HttpServletResponse;

  14. public class ServletRandomPicture extends HttpServlet {
  15.         private static final long serialVersionUID = 3096336305189372825L;
  16.         private static final int WIDTH = 120;
  17.         private static final int HEIGHT = 25;
  18.         public void doGet(HttpServletRequest request, HttpServletResponse response)
  19.                         throws ServletException, IOException {
  20.                 BufferedImage image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
  21.                 Graphics g = image.getGraphics();
  22.                
  23.                 //1.设置背景色
  24.                 setBackGround(g);
  25.                
  26.                 //2.设置边框
  27.                 setBorder(g);
  28.                
  29.                 //3.画干扰线
  30.                 drawRandomLine(g);
  31.                
  32.                 //4.写随机数
  33.                 String cilentCheckCode = drawRandowNum((Graphics2D) g);
  34.                 //将cilentCheckCode存到session中去,用来校验用
  35.                 request.getSession().setAttribute("checkcode", cilentCheckCode);   
  36.                
  37.                 //5.图形写给浏览器,通知浏览器以图片的方式打开,并且告诉浏览器不要缓存
  38.                 response.setHeader("content-type", "image/jpeg");
  39.                 response.setDateHeader("expries", -1);
  40.                 response.setHeader("Cache-Control", "no-cache");
  41.                 response.setHeader("Pragma", "no-cache");
  42.                
  43.                 ImageIO.write(image, "jpeg", response.getOutputStream());
  44.         }
  45.         private void setBackGround(Graphics g) {
  46.                 g.setColor(Color.WHITE);
  47.                 g.fillRect(0, 0, WIDTH, HEIGHT);
  48.         }
  49.         
  50.         private void setBorder(Graphics g) {
  51.                 g.setColor(Color.BLACK);
  52.                 g.drawRect(0, 0, WIDTH-1, HEIGHT-1);
  53.         }
  54.         
  55.         private void drawRandomLine(Graphics g) {
  56.                 g.setColor(Color.GREEN);
  57.                 for(int i=0; i<5; i++){
  58.                         int x1 = 0;
  59.                         int y1 = new Random().nextInt(HEIGHT);
  60.                         int x2 = WIDTH-1;
  61.                         int y2 = new Random().nextInt(HEIGHT);
  62.                         g.drawLine(x1, y1, x2, y2);
  63.                 }
  64.         }
  65.         
  66.         private String drawRandowNum(Graphics2D g) {
  67.                 String str = "最后饿留着眼泪看他抱着你的背我的想念你看不见另一个世界多美最后哭着说再见其实心里不情愿伤心绝对痛彻心扉离开以后饿不会再醉";
  68.                 StringBuffer sb = new StringBuffer();
  69.                 g.setColor(Color.RED);
  70.                 g.setFont(new Font("楷体", Font.BOLD, 25));
  71.                 int x=5;
  72.                 for(int i=0;i<4;i++){
  73.                         int degree = new Random().nextInt()%30;   //设置旋转弧度,在-30~30之间
  74.                         String ch = str.charAt(new Random().nextInt(str.length()))+"";
  75.                         sb.append(ch);
  76.                         g.rotate(degree*Math.PI/180, x+14, 11);   //开始旋转
  77.                         g.drawString(ch, x, 22);
  78.                         g.rotate(-degree*Math.PI/180, x+14, 11);   //将旋转的弧度转回去,写下一个字
  79.                         x+=28;
  80.                 }
  81.                 return sb.toString();
  82.         }


  83.         public void doPost(HttpServletRequest request, HttpServletResponse response)
  84.                         throws ServletException, IOException {
  85.                 doGet(request, response);
  86.         }

  87. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马