javaweb浏览器随机输出一张验证码图片

一.在web.xml中的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<servlet>
<servlet-name>ResponseServlet</servlet-name>
<servlet-class>com.rjxy.model.ResponseServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ResponseServlet</servlet-name>
<url-pattern>/ResponseServlet</url-pattern>
</servlet-mapping>
</web-app>

二.创建一个ResponseServlet

package com.rjxy.model;

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.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ResponseServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public static final int WIDTH = 120;
public static final int HEIGHT = 35;

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();

// 设置背景色
setBackGround(g);
// 设置边框
setBorder(g);
// 画干扰线
drawRandomLine(g);
// 写随机数
drawRandowNum((Graphics2D) g);
// 图形写给浏览器
response.setContentType("image/jpeg");
// 发头控制器不要缓存
response.setDateHeader("exprise", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
ImageIO.write(image, "jpg", response.getOutputStream());

}

private void drawRandowNum(Graphics2D g) {
// 写随机字符,汉字在java中的实现是unicode存储,区间是0x4E00~0x9FA5
g.setColor(Color.RED);
g.setFont(new Font("宋体", Font.BOLD, 20));
String base = "\u7684\u4e00\u5e00\u6e00\u7e00\u8e00\u9e00";
int x = 10;
for (int i = 0; i < 4; i++) {
int degree = new Random().nextInt() % 30;// 30度范围内的旋转
String ch = base.charAt(new Random().nextInt(base.length())) + "";// 此处的双引号必不可少,缺少将被看做char而不是String

g.rotate(degree * Math.PI / 180, x, 20);// PI是圆周率
g.drawString(ch, x, 20);// x的初始值为10,表明第一个字的横坐标为10,然后执行x+10
g.rotate(-degree * Math.PI / 180, x, 20);// 表示第一次转的角度清零,不影响后续字体旋转
x += 30;

}
}

private void drawRandomLine(Graphics g) {
// 画干扰线,它的高小于HEIGHT,宽小于WIDTH
g.setColor(Color.green);
for (int i = 0; i < 4; 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 setBorder(Graphics g) {
// 设置边框颜色
g.setColor(Color.BLUE);
g.drawRect(1, 1, WIDTH - 2, HEIGHT - 2);

}

private void setBackGround(Graphics g) {
// 设置背景填充色
g.setColor(Color.yellow);
g.fillRect(0, 0, WIDTH, HEIGHT);
}

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

doGet(request, response);
}

}

时间: 2024-11-05 16:47:37

javaweb浏览器随机输出一张验证码图片的相关文章

java随机动态生成汉字验证码图片的实例代码分享

原创不易,转载请注明出处:java随机动态生成汉字验证码图片的实例代码分享 代码下载地址:http://www.zuidaima.com/share/1809721113234432.htm 汉字验证码实现原理 将汉字和干扰线生成图片并将汉字保存到session,前台获取每次生成验证码图片并用文本框值和session值比较,功能相对来说还是比较简单的. 效果图,如下: 验证成功后: java随机动态生成汉字验证码图片的实例代码分享

Web验证码图片的生成-基于Java的实现

验证码图片是由程序动态产生的,每次访问的内容都是随机的.那么如何采用程序动态产生图片,并能够显示在客户端页面中呢?原理很简单,对于java而言,我们首先开发一个Servlet,这个Servlet的任务就是给客户端产生一个验证码图片的输入,示例代码如下: import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import ja

输出随机验证码图片

1 /** 2 * //输出随机验证码图片:CAPTCHA图像 3 */ 4 public class ServletDemo1 extends HttpServlet { 5 private static final long serialVersionUID = 1L; 6 7 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOEx

PHP用GD库绘制图片,制作验证码浏览器不能输出

1,代码如下: <?php function fillRandomString(){ //生成验证码 $char = array_merge(range(0, 9),range("a", "z"),range("A", "Z")); //讲字符串$char打乱 $luan = str_shuffle(implode("", $char)); //从字符串中随机取四位 return  substr($l

javaweb学习总结(九)—— 通过Servlet生成验证码图片

一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl.response.study; 2 import java.awt.Color; 3 import java.awt.Font; 4 import java.awt.Graphics; 5 import java.awt.Graphics2D; 6 import java.awt.image.Buff

struts2生成随机验证码图片

之前想做一个随机验证码的功能,自己也搜索了一下别人写的代码,然后自己重新用struts2实现了一下,现在将我自己实现代码贴出来!大家有什么意见都可以指出来! 首先是生成随机验证码图片的action: CreateImageAction: package com.xiaoluo.action; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedIm

javaWeb学习总结(3)- 通过Servlet生成验证码图片(2)

一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 package gacl.response.study; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; i

随机生成登录时的验证码图片

生成随机验证码的代码: 1 package servlet; 2 3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.Graphics; 6 import java.awt.Graphics2D; 7 import java.awt.image.BufferedImage; 8 import java.io.IOException; 9 import java.io.OutputStream; 10 import

python模块之PIL模块(生成随机验证码图片)

PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块.主要的类包括Image,ImageFont,ImageDraw,ImageFilter PIL的导入 首先需要安装一下pillow包 pip install pillow 然后就可以调用PIL里的类了 from PIL import Image from PIL import ImageFont from PIL import ImageDraw from PIL import ImageFilt