package javaBean;
import java.io.IOException;
import java.io.PrintWriter;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import javax.imageio.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
//生成验证码
public class CheckCodeGet extends HttpServlet
{
private static final long serialVersionUID = 1L;
private final int TYPE_NUMBER = 0;
private final int TYPE_LETTER = 1;
private final int TYPE_MULTIPLE = 2;
private int width;
private int height;
private int count;
private int type;
private String validate_code;
private Random random;
private Font font;
private int line;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
String reqCount = request.getParameter("count");
String reqWidth = request.getParameter("width");
String reqHeight = request.getParameter("height");
String reqType = request.getParameter("type");
if(reqCount!=null && reqCount!="")this.count = Integer.parseInt(reqCount);
if(reqWidth!=null && reqWidth!="")this.width = Integer.parseInt(reqWidth);
if(reqHeight!=null && reqHeight!="")this.height = Integer.parseInt(reqHeight);
if(reqType!=null && reqType!="")this.type = Integer.parseInt(reqType);
font = new Font("Courier New",Font.BOLD,width/count);
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);
g.setColor(getRandColor(160,200));
for (int i=0;i<line;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
g.setFont(font);
validate_code = getValidateCode(count,type);
request.getSession().setAttribute("validate_code",validate_code);
for (int i=0;i<count;i++)
{
//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
int x = (int)(width/count)*i;
int y = (int)((height+font.getSize())/2)-5*i;
g.drawString(String.valueOf(validate_code.charAt(i)),x,y);
}
g.dispose();
//ImageIO.write(image, "JPEG", response.getOutputStream());
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
encoder.encode(image);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doGet(request,response);
}
public void init(ServletConfig config) throws ServletException
{
super.init(config);
width = 150;
height = 50;
count = 4;
type = 0;
random = new Random();
line = 200;
}
//
private Color getRandColor(int from,int to)
{
Random random = new Random();
if(to>255) from=255;
if(to>255) to=255;
int rang = Math.abs(to - from);
int r=from+random.nextInt(rang);
int g=from+random.nextInt(rang);
int b=from+random.nextInt(rang);
return new Color(r,g,b);
}
//取得验证码字符串
private String getValidateCode(int size,int type)
{
StringBuffer validate_code = new StringBuffer();
for(int i = 0; i < size; i++)
{
validate_code.append(getOneChar(type));
}
return validate_code.toString();
}
//根据验证码类型取得实际验证字符
private String getOneChar(int type)
{
String result = null;
switch(type)
{
case TYPE_NUMBER:
result = String.valueOf(random.nextInt(10));
break;
case TYPE_LETTER:
result = String.valueOf((char)(random.nextInt(26)+65));
break;
case TYPE_MULTIPLE:
if(random.nextBoolean())
{
result = String.valueOf(random.nextInt(10));
}
else
{
result = String.valueOf((char)(random.nextInt(26)+65));
}
break;
default:
result=null;
break;
}
if(result==null)
{
throw new NullPointerException("获取验证码出错");
}
return result;
}
}
基于javaEE的学生成绩管理系统
4星 · 超过85%的资源 需积分: 50 156 浏览量
2011-06-03
23:36:32
上传
评论 20
收藏 1.08MB 7Z 举报
yu_zhi_1988
- 粉丝: 2
- 资源: 2
最新资源
- 电机控制霍尔传感器和反电动势的关系分析
- 计算机生产实习:OA后台管理(web前端+Java后端)压缩文件包
- greenplum6.10安装时缺失的fpm包
- 缺陷检测-轻量化PCB表面缺陷检测算法实现-工业视觉+六大缺陷检出-优质项目实战.zip
- JAVA 中的Spring框架介绍包括起源、体系结构、核心部分、特点等
- 2024年小米汽车产业链分析及新品上市全景洞察报告
- 基于Qt和C++实现的偏3D风格的异型窗体界面操作+源码(期末大作业&课设&项目开发)
- 基于yolov8的花卉分类系统,包含训练好的权重和推理代码,GUI界面,支持图片、视频、摄像头输入,支持检测结果导出
- 基于图形化编程的单片机教学案例研究
- 基于matlab语音识别的信号灯图像模拟控制技术代码19
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
前往页