文档章节

Servlet 中实现图片验证码功能

s
 shuimo_123
发布于 2016/08/16 21:39
字数 458
阅读 3
收藏 0
package com.controller;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.sql.ResultSetMetaData;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ImageValidateGenerator extends HttpServlet {
	private static final long serialVersionUID = 1L;
          //图片上生成的内容
	private static final String str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
	private Random random = new Random();//声明一个随机对象
	/**
	 * Constructor of the object.
	 */
	public ImageValidateGenerator() {
		super();
	}
	/**
	 * 生成随机的颜色
	 */
	private Color createRandColor(){
		int r=random.nextInt(256);
		int g=random.nextInt(256);
		int b=random.nextInt(256);
		
		return new Color(r,g,b);
	}
	/**
	 * 随机生成一个四位验证码
	 */
	private String createVerfiyCode(){
		StringBuilder code=new StringBuilder();
		for(int i=0;i<4;i++){
			
			char c=str.charAt(random.nextInt(str.length()));
			
			System.out.println(code.append(c)+"------------");
		}
		return code.toString();
	}

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

	/**
	 * 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 {

		doPost(request,response);
	}

	/**
	 * 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 {
		//定义一个图像数据缓冲区
		BufferedImage myimage=new BufferedImage(100,50,BufferedImage.TYPE_INT_RGB);
		//在图片之上绘制图形
		Graphics mypen=myimage.getGraphics();
		mypen.setColor(Color.WHITE);//画笔的颜色
		mypen.fillRect(0, 0, 100, 50);
		for(int i=0;i<70;i++){
			
			mypen.setColor(createRandColor());//设置的随机颜色
			int x1=random.nextInt(80);
			int y1=random.nextInt(50);
			int x2=random.nextInt(30);//第二次起始位置去画线
			int y2=random.nextInt(30);
			
			mypen.drawLine(x1, y1, x2, y2);
			
		}
		mypen.setFont(new Font("微软雅黑",Font.BOLD,30));
		String validateCode=createVerfiyCode();
		request.getSession().setAttribute("validateCode",validateCode);
		
		for(int i=0;i<validateCode.length();i++){
			mypen.setColor(createRandColor());//设置颜色
			mypen.drawString(validateCode.charAt(i)+"",i*15+5,30);
			
		}
		ServletOutputStream sos=response.getOutputStream();
		ImageIO.write(myimage, "png", sos);
		sos.flush();
		sos.close();
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
	}

}

 

© 著作权归作者所有

共有 人打赏支持
s
粉丝 0
博文 2
码字总数 458
作品 0
西安
程序员
JSP作业5:servlet应用--图片验证码

作业类型:验证性实验 实验目的:掌握Servlet在JSP开发中的应用 实验内容:使用Servlet实现网页验证码功能。 1. 编写一个Servlet,实现以下功能: (1)能够响应来自客户端的GET请求,不响应...

yifon
2014/04/20
0
1
javaweb开发之利用session实现一次性验证码

一、一次性验证码的作用 防止暴力破解。 二、实现 1.创建jsp页面,在页面中添加一个img标签,指向一个生成图片的servlet,设置img宽度和高度 2.创建生成图形验证码的Servlet 该Servlet根据生...

小米米儿小
2013/12/06
0
0
Java里使用patchca生成验证码

Patchca是Piotr Piastucki写的一个java验证码开源库,打包成jar文件发布,patchca使用简单但功能强大。 本例实现了自定义背景,由于生成图片较小,波动太大时会导致部分文字显示不全,所以更...

easonwang
2014/04/14
0
0
Java实现的验证码(Verification Code)

目前,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。Java中可由以下代码生成验证码: 编写一个Servlet,用于生成验证码图片: package flybug.hq.vcode; impor...

Jupittar
2013/09/09
0
0
Web开发中的验证码图片的生成-基于Java的实现

大家在使用Web网站的时候,经常会发现有个验证码需要输入,这是验证码用来做什么事情的呢?其实很简单,验证码图片的作用是让用户通过肉眼来观察图片, 把图片中的内容填写到输入框中,在登录...

一堆BUG
2012/02/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

负载均衡的解决方案有哪些

负载均衡器服务可满足大型组织的需求,支持所有数据中心和跨数据中心高可靠性场景。 本地负载均衡,通过附带或者未附带持久性覆盖选项,Incapsula支持各种负载均衡算法,以优化服务器之间的流...

上树的熊
21分钟前
2
0
Java实现在线打开word文档加盖印章/盖章/签名功能

前言: 我们知道,大型一点的OA办公系统都会有很多在线处理office办公文档的需求。其中有一点也基本绕不开,那就是为文档盖章或添加手写签名来保护文档,让被盖章的文档不再被编辑。 在Java中...

山里的红杏
28分钟前
5
0
js控制输入正负数,小数点后保留两位

//限制数字function clearNoNum(obj){ //修复第一个字符是小数点 的情况. if(obj.value !=''&& obj.value.substr(0,1) == '.'){ obj.value=""; } obj.value ...

一直在成长的程序猿
31分钟前
2
0
动态代理

具体场景 为了使代理类与被代理类对第三方有相同的函数,代理类与被代理类一般实现一个公共的interface,定义如下 public interface Subject { void rent(); void hello(String s)...

wuyiyi
35分钟前
2
0
时间字段

我们看看这几个数据库中(mysql、oracle和sqlserver)如何表示时间 mysql数据库:它们分别是 date、datetime、time、timestamp和year。date :“yyyy-mm-dd”格式表示的日期值 time :“hh:...

DemonsI
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部