博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
验证码生成 点击刷新 ajax校验
阅读量:6159 次
发布时间:2019-06-21

本文共 4641 字,大约阅读时间需要 15 分钟。

页面文件

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%	String path = request.getContextPath();	String basePath = request.getScheme() + "://"			+ request.getServerName() + ":" + request.getServerPort()			+ path + "/";%>					My JSP 'index.jsp' starting page		
看不清刷新
Java生成验证码图片的servlet

package com.code;/** * @author liubo */import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;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 CheckCodeServlet extends HttpServlet {	private static final long serialVersionUID = 1L;	// 放到session中的KEY	public static final String RANDOMCODEKEY = "RANDOMCODEKEY";	private Random random = new Random();	// 随机产生的字符串	private String randString = "0123456789";	private int width = 80;	private int height = 26;	private int stringNum = 3;	/*	 * 获得字体	 */	private Font getFont() {		return new Font("Fixedsys", Font.CENTER_BASELINE, 18);	}	/*	 * 获得颜色	 */	private Color getRandColor(int fc, int bc) {		if (fc > 255) {			fc = 255;		}		if (bc < 255) {			bc = 255;		}		int r = fc + random.nextInt(bc - fc - 16);		int g = fc + random.nextInt(bc - fc - 14);		int b = fc + random.nextInt(bc - fc - 18);		return new Color(r, g, b);	}	public void getRandcode(HttpServletRequest request,			HttpServletResponse response) {		HttpSession session = request.getSession();		// BufferedImage类是具有缓冲区的image类,image类是用于描述图像信息的类		BufferedImage image = new BufferedImage(width, height,				BufferedImage.TYPE_INT_BGR);		// 产生image对象的graphics对象,该对象可以在图像上进行各种绘制操作		Graphics g = image.getGraphics();		g.fillRect(0, 0, width, height);		g.setFont(new Font("Times New Roman", Font.ROMAN_BASELINE, 18));		g.setColor(getRandColor(110, 133));		String randomString = "";		for (int i = 0; i <= stringNum; i++) {			randomString = drowString(g, randomString, i);		}		session.removeAttribute(RANDOMCODEKEY);		session.setAttribute(RANDOMCODEKEY, randomString);		g.dispose();		try {			// 将内存中的图片通过流动形式输出到客户端			ImageIO.write(image, "JPEG", response.getOutputStream());		} catch (Exception e) {			e.printStackTrace();		}	}	/*	 * 绘制字符串	 */	private String drowString(Graphics g, String randomString, int i) {		g.setFont(getFont());		g.setColor(new Color(random.nextInt(101), random.nextInt(111), random				.nextInt(121)));		String rand = String.valueOf(getRandomString(random.nextInt(randString				.length())));		randomString += rand;		g.translate(random.nextInt(3), random.nextInt(3));		g.drawString(rand, 13 * i, 16);		return randomString;	}	/*	 * 获取随机字符	 */	public String getRandomString(int num) {		return String.valueOf(randString.charAt(num));	}	@Override	protected void service(HttpServletRequest request,			HttpServletResponse response) throws ServletException, IOException {		// 设置相应的类型,告诉浏览器输出的内容为图片		response.setContentType("image/jpeg");		// 设置响应头信息,告诉浏览器不要缓存此内容		response.setHeader("Pragma", "No-cache");		response.setHeader("Cache-Control", "no-cache");		response.setDateHeader("Expire", 0);		try {			getRandcode(request, response);		} catch (Exception e) {			e.printStackTrace();		}	}	@Override	protected void doGet(HttpServletRequest req, HttpServletResponse resp)			throws ServletException, IOException {		// TODO Auto-generated method stub		service(req,resp);	}	}
服务器端校验的servlet

package com.code;/** * @author liubo */import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CheckServlet extends HttpServlet {	/**	 * 	 */	private static final long serialVersionUID = 1L;	public void doGet(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		this.doPost(request, response);	}	public void doPost(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		PrintWriter out = response.getWriter();		String check = request.getParameter("code");		try {			String code = (String) request.getSession().getAttribute(					"RANDOMCODEKEY");			if (code.equals(check)) {				out.write("OK");			} else {				out.write("NO");			}		} catch (Exception e) {			e.printStackTrace();		} finally {			out.close();		}	}}

转载于:https://www.cnblogs.com/liubo6/archive/2013/05/30/4491115.html

你可能感兴趣的文章
C# 同步调用 异步调用 异步回调 多线程的作用
查看>>
IOS 文件解析
查看>>
老7临走前的笔记
查看>>
yolo源码解析(3):视频检测流程
查看>>
自定Python模块路径及调用方法
查看>>
wap端防止点击图片图片弹层
查看>>
mysql笔记一——安装和设置root密码
查看>>
C#入门篇5-1:流程控制语句 if判断语句
查看>>
JQuery 语法
查看>>
学习记录(六)
查看>>
一条没有鱼鳔的鱼
查看>>
Linux定时任务
查看>>
Executors
查看>>
[NOIP2016day1T1] 玩具迷題(toy)
查看>>
iOS UICollectionView 长按移动cell
查看>>
PHP面试题之小杂鱼
查看>>
django-restframework
查看>>
Linux基础学习(7)--用户和用户组管理
查看>>
Java操作XML文件
查看>>
shell脚本编程数组
查看>>