验证码的使用

转载本人163博客,因工作时间只能访问技术站

http://chaoji-liangbin.blog.163.com/blog/static/252392122010102952243278/

 

往往验证码多处用到,所以写一个servlet即可,多处页面可以调用。具体如下:

index.jsp页面定义如下:

验证码:
  <span οnclick="refresh();"><img src="autoImg" id="autoImg" style="cursor: pointer;">
  </span>

 

js代码:

<script type="text/javascript">
    function refresh(){
  document.getElementById("autoImg").src = 'autoImg?now=' + new Date();
 }
  </script>

 

web.xml定义:

<servlet>
  <servlet-name>img</servlet-name>
  <servlet-class>com.wenbin.example.AutoImg</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>img</servlet-name>
  <url-pattern>/autoImg</url-pattern>
 </servlet-mapping>

 

AutoImg.java 定义如下:

package com.wenbin.example;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import javax.imageio.*;

p lic class AutoImg extends HttpServlet {
 private Font mFont = new Font("Arial Black", Font.PLAIN, 16);

 p lic void init() throws ServletException {
  super.init();
 }

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

 p lic void service(HttpServletReqst reqst, HttpServletResponse response)
   throws ServletException, IOException {
  response.setHeader("Pragma", "No-cache");
  response.setHeader("Cache-Control", "no-cache");
  response.setDateHeader("Expires", 0);
  response.setContentType("image/jpeg");

  int width = 70, height = 18;
  B?redImage image = new B?redImage(width, height,
    B?redImage.TYPE_INT_RGB);

  Graphics g = image.getGraphics();
  Random random = new Random();
  g.setColor(getRandColor(200, 250));
  g.fillRect(1, 1, width - 1, height - 1);
  g.setColor(new Color(102, 102, 102));
  g.drawRect(0, 0, width - 1, height - 1);
  g.setFont(mFont);

  g.setColor(getRandColor(160, 200));
  for (int i = 0; i < 155; i++) {
   int x = random.nextInt(width - 1);
   int y = random.nextInt(height - 1);
   int xl = random.nextInt(6) + 1;
   int yl = random.nextInt(12) + 1;
   g.drawLine(x, y, x + xl, y + yl);
  }
  for (int i = 0; i < 70; i++) {
   int x = random.nextInt(width - 1);
   int y = random.nextInt(height - 1);
   int xl = random.nextInt(12) + 1;
   int yl = random.nextInt(6) + 1;
   g.drawLine(x, y, x - xl, y - yl);
  }

  String sRand = "";
  for (int i = 0; i < 4; i++) {
   String tmp = getRandomChar();
   sRand += tmp;
   g.setColor(new Color(20 + random.nextInt(110), 20 + random
     .nextInt(110), 20 + random.nextInt(110)));
   g.drawString(tmp, 15 * i + 10, 15);
  }

  HttpSession session = reqst.getSession(tr);
  session.setAttribute("rand", sRand);
  g.dispose();
  ImageIO.write(image, "JPEG", response.getOutputStream());
 }

 private String getRandomChar() {
  int rand = (int) Math.round(Math.random() * 2);
  long itmp = 0;
  char ctmp = '/';

  /** 下方注释的代码为随机生成数字或字母 */
  // switch (rand)
  // {
  // case 1:
  // itmp = Math.round(Math.random() * 25 + 65);
  // ctmp = (char)itmp;
  // return String.valOf(ctmp);
  // case 1:
  // itmp = Math.round(Math.random() * 25 + 97);
  // ctmp = (char)itmp;
  // return String.valOf(ctmp);
  // default :
  // itmp = Math.round(Math.random() * 9);
  // return String.valOf(itmp);
  // }
  /** 下方代码为随机生成数字 */
  itmp = Math.round(Math.random() * 9);
  return String.valOf(itmp);

 }
}

验证码的获取:

对于sturts2而言,获取如下:

// HttpServletReqst reqst = ServletActionContext.getReqst ();   //获取reqst
  Map session=(Map)ActionContext.getContext().get(ActionContext.SESSION);
  System.out.println("rand:"+session.get("rand"));

 

对于普通的jsp:

直接session.getAttribute("rand");

就可以了

 

 

OK,访问页面出现验证码,点击图片,自动刷新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值