首先在网上搜了下jsp生成验证码的代码,如下:

package com.servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ValidateCodeServlet extends HttpServlet {

/**
 * 
 */
private static final long serialVersionUID = 4008416931787800531L;

/**
 * Constructor of the object.
 */
public ValidateCodeServlet() {
 super();
}

/**
 * Destruction of the servlet. <br>
 */
public void destroy() {
 super.destroy(); // Just puts "destroy" string in log
}

/**
 * The doGet method of the servlet. <br>
 * 
 * This method is called when a form has its tag value method equals to get.
 * 
 * @param request
 *            the request send by the client to the server
 * @param response
 *            the response send by the server to the client
 * @throws ServletException
 *             if an error occurred
 * @throws IOException
 *             if an error occurred
 */
public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {

//设置页面不缓存
 response.setHeader("Pragma", "No-cache");
 response.setHeader("Cache-Control", "no-cache");
 response.setDateHeader("Expires", 0);

// 在内存中创建图象
 int width = 60, height = 20;
 BufferedImage image = new BufferedImage(width, height,
   BufferedImage.TYPE_INT_RGB);

// 获取绘画对象
 Graphics g = image.getGraphics();
 // 设定背景色
 g.setColor(getRandColor(225, 250));
 g.fillRect(0, 0, width, height);
 //设定字体
 g.setFont(new Font("Times New Roman", Font.BOLD, 20));

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
 Random random = new Random();
 g.setColor(getRandColor(160, 200));
 for (int i = 0; i < 155; i++) {
  int x = random.nextInt(width);
  int y = random.nextInt(height);
  int xl = random.nextInt(12);
  int yl = random.nextInt(12);
  g.drawLine(x, y, x + xl, y + yl);
 }

// 取随机产生的认证码(4位数字)
 String sRand = generateWord();
 byte[] cs = sRand.getBytes();
 for (int i = 0; i < 4; i++) {
String a = new String(cs, i, 1);
//  String rand = String.valueOf(random.nextInt(10));
  String rand = a;
//  sRand += rand;
  // 将认证码显示到图象中
  g.setColor(new Color(20 + random.nextInt(110), 20 + random
    .nextInt(110), 20 + random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
  g.drawString(rand, 13 * i + 6, 16);
 }

// 将认证码存入SESSION
 HttpSession session = request.getSession();
 session.setAttribute("valicode", sRand);

// 图象生效
 g.dispose();

// 输出图象到页面
 ImageIO.write(image, "JPEG", response.getOutputStream());

}

/**
 * The doPost method of the servlet. <br>
 *
 * This method is called when a form has its tag value method equals to post.
 * 
 * @param request the request send by the client to the server
 * @param response the response send by the server to the client
 * @throws ServletException if an error occurred
 * @throws IOException if an error occurred
 */
public void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
 doGet(request, response);
}

/**
 * 给定范围获得随机颜色
 * @param fc
 * @param bc
 * @return
 */
private 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);
}
private  String generateWord() {  
       String[] beforeShuffle = new String[] {"1", "2", "3", "4", "5", "6", "7",  
               "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",  
               "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",  
               "W", "X", "Y", "Z" };  
       List list = Arrays.asList(beforeShuffle);  
       Collections.shuffle(list);  
       StringBuilder sb = new StringBuilder();  
       for (int i = 0; i < list.size(); i++) {  
           sb.append(list.get(i));  
       }  
       String afterShuffle = sb.toString();  
       String result = afterShuffle.substring(5, 9);  
       return result;  
   }  
}

自己加工了下,原先是产生随机数,这里我就用一个list集合了

然后是在jsp页面中引用这个servlet,如下:

<img id="servletimg" src="<%=path %>/ValidateCodeServlet" flush="true" onclick="reloadImage()" style="vertical-align: bottom;cursor:pointer"></img>

注:cursor:pointer是变手形,reloadImage()是js方法

function reloadImage(){
document.getElementById('servletimg').src="<%=path %>/ValidateCodeServlet";
}

把相同地址再设置一遍就ok了

jsp验证码页面笔记的更多相关文章

  1. jsp登陆页面验证码在火狐浏览器不能刷新问题处理方案

    jsp登陆页面在火狐浏览器验证码不能刷新问题处理方案: <img src="YzmServlet" onClick="this.src='YzmServlet?ti ...

  2. Jsp之神笔记

    JSP笔记 Tomcatserver port: port就是指的某一个程序网络入口,Tomcat的初始化port为:8080: port的个数:256*256=65536个: 一般常见协议的缺省po ...

  3. myeclipse关闭html,jsp等页面的可视化编辑器

    myeclipse打开html,jsp等页面时,有的是默认用可视化编辑器打开的,这样打开会显得很慢,只要关闭可视化编辑器就会快很多了,方法如下: 1,选择菜单: windows -> prefe ...

  4. @RestController注解下返回到jsp视图页面(转)(转)

    这个问题我也遇到过,下面的方法可以试试 蓝萝卜blu @RestController注解下返回到jsp视图页面 spring4.1中添加了@RestController注解很方便,集成了@Respon ...

  5. jsp编写页面时常见错误提示

    jsp编写页面时常见错误提示 404-->未部署web应用 500-->代码有问题 无法显示网页-->未启动tomcat webRoot-->URL输入有误 web-inf-- ...

  6. JSP中页面定时刷新

    1.JSP中页面定时刷新 <% //页面每隔30秒自动刷新一遍 response.setHeader("refresh" , "30" ); %> ...

  7. MyEclipse导入主题文件epf后xml及jsp等页面中点击标签之后显示灰白

    MyEclipse导入主题文件epf后xml及jsp等页面中点击标签之后显示灰白,症状例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVVAxOT ...

  8. JSP错误页面处理的两种方式

    JSP错误页面处理的两种方式: 方法1(真能针对单一页面生效,不推荐): 出错页面实例 <%@ page language="java" contentType=" ...

  9. 配置Jsp错误页面

    配置Jsp错误页面一般我们有2种做法: (1)在页面中用指令进行配置,即page指令的errorPage和isErrorPage:可以使用page指令的errorPage来指定错误页!在当前JSP页面 ...

随机推荐

  1. C# 之 抽象类与接口

    抽象类 C#同意把类和方法声明为abstract,即抽象类和抽象方法.抽象类通常代表一个抽象概念,它提供一个继承的出发点,当设计一个新的对象类时,一定是用来继承的,所以,在一个以继承关系形成的等级结构 ...

  2. SPOJ 130 - Rent your airplane and make money(dp+优化)

    题意:有n列预定航班,从st时刻开始出发,飞行时间为d,花费为p,且同一时刻不能有两个航班,求最大的花费 对航班的开始时间(或结束时间)按升序排序,从后往前找到对应结束时间所在的航班位置(如按结束时间 ...

  3. LR实战之Discuz开源论坛——登录脚本

    脚本业务流:访问Discuz论坛首页——登录论坛——退出论坛.本次使用LoadRunner11版本. 一.录制脚本注意 1.确保Discuz论坛能在服务器运行正常. 2.录制前先试访问Discuz论坛 ...

  4. Oracle11g客户端安装及plsql配置

    1,项目使用的是oracle11g数据库,安装个客户端访问服务器. 到oracle官方下载: http://www.oracle.com/technology/global/cn/software/t ...

  5. CAShapeLayer + UIBezierPath

    UIBezierPath: UIBezierPath是在 UIKit 中的一个类,继承于NSObject,可以创建基于矢量的路径.使用此类可以定义常见的圆形.多边形等形状 .我们使用直线.弧(arc) ...

  6. iOS中的下载管理器(支持断点续传)

    在空闲时间自己编写了一个简单的iOS下载管理器.该管理器实现如下功能: 1.能够支持正常的下载,暂停,继续操作. 2.支持断点续传,实现暂停执行继续操作后,依然能正常将文件下载完成. 3.实现实时状态 ...

  7. jQuery + css 公告从左往右滚动

    $(function() { // 公告滚动 $(".notice-content").textScroll(); }); /** * 从右往左滚动文字 * @returns {u ...

  8. WebService使用的一些总结

    什么是WebService: 这个不用我在这里废话,网上的资料一搜一大把,如果你没有接触过这方面的知识,你可以先去网上查一下.这里我只想说一下我印象比较深刻的几点: WebService是基于soap ...

  9. groovy 弹出菜单

    import groovy.swing.* import javax.swing.* import java.awt.* def swing = new SwingBuilder() swing.fr ...

  10. Elevator(hdoj 1008)

    Problem Description The highest building in our city has only one elevator. A request list is made u ...