文档章节

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
Web开发中的验证码图片的生成-基于Java的实现

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

一堆BUG
2012/02/27
0
0
Java实现的验证码(Verification Code)

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

Jupittar
2013/09/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部