博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
验证码生成 点击刷新 ajax校验
阅读量:6155 次
发布时间: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

你可能感兴趣的文章
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
淘宝的几个架构图
查看>>
linux后台运行程序
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
Oracle中drop user和drop user cascade的区别
查看>>
登记申请汇总
查看>>
Android Jni调用浅述
查看>>
CodeCombat森林关卡Python代码
查看>>
(二)Spring Boot 起步入门(翻译自Spring Boot官方教程文档)1.5.9.RELEASE
查看>>
Shell基础之-正则表达式
查看>>
JavaScript异步之Generator、async、await
查看>>
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
Get到的优秀博客网址
查看>>
老男孩教育每日一题-第107天-简述你对***的理解,常见的有哪几种?
查看>>
Python学习--time
查看>>