`

java 输出随机认证码图片

阅读更多

输出随机认证码图片准备工作:建立javaweb工程名为servlet1,在工程下建立包cn.response,在包下建立servlet名为:ResponseDemo3.java  ;并在工程下建立loginweb.jsp

1.ResponseDemo3.java 代码如下:

package cn.response;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
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;
/**
 * 
 * @author 飞鸟
 *          Date: 2014-2-18
 *  project_name: servlet1
 *     file_name: ResponseDemo3.java
 *     输出随机认证码图片
 */

public class ResponseDemo3 extends HttpServlet {
	public static final int WIDTH=120;
	public static final int HEIGHT=25;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		BufferedImage image=new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
	    
		Graphics g=image.getGraphics();
		
		//1.设置背景色
		setBackGround(g);
		
		//2.设置边框
		setBorder(g);
		
		//3.画干扰线
		drawRandomLine(g);
		
		//4.写随机数
		drawRandomNum((Graphics2D)g);
		
		//5.图形写给浏览器
		response.setContentType("image/jpeg");
		//发头控制浏览器不要缓存
		response.setDateHeader("expries",-1);
		response.setHeader("Cache-Control", "no-cache");
		response.setHeader("Pragma", "no-cache");
		ImageIO.write(image, "jpg", response.getOutputStream());
	
	}


	private void setBackGround(Graphics g) {
	g.setColor(Color.WHITE);
	g.fillRect(0,0,WIDTH,HEIGHT);
	}


	private void setBorder(Graphics g) {
		// TODO Auto-generated method stub
		g.setColor(Color.BLUE);
		g.drawRect(1, 1, WIDTH-2, HEIGHT-2);
	}


	private void drawRandomLine(Graphics g) {
		// TODO Auto-generated method stub
		g.setColor(Color.GREEN);
		for(int i=0;i<5;i++){
			int x1=new Random().nextInt(WIDTH);
			int y1=new Random().nextInt(HEIGHT);
			int x2=new Random().nextInt(WIDTH);
			int y2=new Random().nextInt(HEIGHT);
			g.drawLine(x1, y1, x2, y2);
		}
		
	}


	private void drawRandomNum(Graphics2D g) {
		// TODO Auto-generated method stub
		g.setColor(Color.RED);
		g.setFont(new Font("宋体",Font.ITALIC,20));
		String base="\u7684\u4e00\u4e86\u662f\u6211\u4e0d\u5728\u4eba\u4eec\u6709\u6765\u4ed6\u8fd9\u4e0a\u7740\u4e2a\u5730\u5230\u5927\u91cc\u8bf4\u5c31\u53bb\u5b50\u5f97"+
		"\u4e5f\u548c\u90a3\u8981\u4e0b\u770b\u5929\u65f6\u8fc7\u51fa\u5c0f\u4e48\u8d77\u4f60\u90fd\u628a\u597d\u8fd8\u591a\u6ca1\u4e3a\u53c8\u53ef\u5bb6\u5b66"+
		"\u53ea\u4ee5\u4e3b\u4f1a\u6837\u5e74\u60f3\u751f\u540c\u8001\u4e2d\u5341\u4ece\u81ea\u9762\u524d\u5934\u9053\u5b83\u540e\u7136\u8d70\u5f88\u50cf\u89c1";
		int x=5;
		for(int i=0;i<4;i++){
			int degree=new Random().nextInt()%30;
        String cn= base.charAt(new Random().nextInt(base.length()))+""; 
        g.rotate(degree*Math.PI/180,x,20);
        g.drawString(cn, x, 20);
        g.rotate(-degree*Math.PI/180,x,20);
        x+=30;
		
		}
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request,response);
	}

}

 

2.login.jsp代码

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript"">
function changeImage(img){
 img.src=img.src+"?"+new Date().getTime();
}
</script>
</head>
<body>
<form name="form1" action="dologin.jsp" method="post">
<label>用户名</label><input type="text" name="username"><br/>
<label>密&nbsp;&nbsp;&nbsp;&nbsp;码</label><input type="password" name="password"><br/>
<label>验证码</label><input type="text" name="checkcode"><img src="/servlet1/ResponseDemo3" onclick="changeImage(this)" alt="换一张" style="cursor:hand"><br/>
<input type="submit" name="submit" value="提交">
<input type="reset" name="reset" value="清除">
</form>
</body>
</html>

 

 

 

 

  • 大小: 14 KB
分享到:
评论

相关推荐

    随机生成验证码java源码

    随机生成手机验证码的java源码文件,结果是在后台输出,可根据选择生成几位随机码或者随机码是否带有字母。

    java源码包---java 源码 大量 实例

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA上百实例源码以及开源项目

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA上百实例源码以及开源项目源代码

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java源码包4

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java源码包3

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java源码包2

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    防伪码生成源码

    随机生成指定个数的防伪码,并显示输出生成防伪码所用的时间。

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...

    java jdk实列宝典 光盘源代码

    缩放图片JPGTransforme.java; 2d图形,实现一个2d画板,能够画2d的线、圆和矩形,能指定图形的颜色并且能够撤销和恢复图形,command.java; 3d图形,Graphic3d.java; 一个时钟程序,能够显示星期和日期,变化背景和...

    Java经典编程源码基础例程300.zip

    Java经典编程源码例程,可以做为你的学习设计参考。 第1章 Java语言概述 1 实例001 输出“Hello World” 2 实例002 输出控制台传递的参数 2 实例003 输出由“*”组成的三角形 3 实例004 输出符号表情 5 第2章 ...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...

    JAVA 范例大全 光盘 资源

    实例192 数据库图片的输出 622 实例193 利用console控制台运行类中的汉字处理方案 624 实例194 Servlet中的汉字处理方案 625 实例195 JSP中的汉字处理方案 627 实例196 Tomcat连接池的配置 629 实例197 MySQL...

    java范例开发大全源代码

     实例147 随机读写Java类文件 221  第3篇 Java面向对象编程  第8章 面向对象(教学视频:72分钟) 226  8.1 类 226  实例148 简单的通讯录类 226  实例149 简单的长度单位转换类 227  实例150 ...

    java范例开发大全

    实例147 随机读写Java类文件 221 第3篇 Java面向对象编程 第8章 面向对象(教学视频:72分钟) 226 8.1 类 226 实例148 简单的通讯录类 226 实例149 简单的长度单位转换类 227 实例150 卡车和卡车司机之间的关系 229...

    Java范例开发大全 (源程序)

     实例147 随机读写Java类文件 221  第3篇 Java面向对象编程  第8章 面向对象(教学视频:72分钟) 226  8.1 类 226  实例148 简单的通讯录类 226  实例149 简单的长度单位转换类 227  实例150 卡车和...

    jaava和jsp工具类

    [工具类] 读取、打印输出、保存xml .java [工具类] 获得汉字拼音首字母的java工具类 .java [工具类] 获取绝对路径 .java [工具类] 记录log日志文件的工具类 .java [工具类] 连接数据库的工具类 .java [工具类] ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例004 验证Java开发环境 7 实例005 下载并安装JRE执行环境 8 实例006 编程输出星号组成的等腰三角形 9 1.2 开发工具 11 实例007 下载最新的Eclipse 11 实例008 为最新的Eclipse安装中文语言包 12 实例009 活用...

Global site tag (gtag.js) - Google Analytics