servlet生成验证码
来源:互联网 发布:写软文用什么软件 编辑:程序博客网 时间:2024/05/08 02:40
写个验证码玩玩
servlet生成验证码
主要用到3个对对象BufferedImage 图像buffer
Graphics2D 图片对象
ImageIO 输出图片
private static final int WIDTH = 120;//图片宽度
private static final int HEIGHT = 25;//图片高度
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
createImager(request,response);
}
private void createImager(HttpServletRequest request, HttpServletResponse response) {
BufferedImage image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
setNoCache(response);//页面不缓存
try {
setBackgroup(g);//设置背景颜色
setBorder(g);//设置边框
drawLine(g);//生成干扰线
drawNum(g);//生成随即数,字体旋转
dispose(g);//释放资源
ImageIO.write(image, "JPEG", response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
//生成干扰线
private void drawLine(Graphics g) {
for(int i=0;i<4;i++){
g.setColor(new Color(new Random().nextInt(255),new Random().nextInt(255),new Random().nextInt(255)));//干扰线颜色
g.drawLine(0, new Random().nextInt(25), WIDTH,new Random().nextInt(25));//画干扰线
}
}
//生成随机字符
private void drawNum(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
String str []= {"宋","体","的","一","是","在","出","体","就","分","成","国",
"标","表","不","客","内","日","中","得"};
g2d.setFont(new Font("宋体",Font.BOLD,20));//设置字体
Random random = new Random();
g2d.setColor(Color.BLACK);//设置字体颜色
for(int i=0;i<4;i++){//生成4为随机字符
int n = random.nextInt()%30;//字体旋转角度
double d = n*Math.PI/180;//字体旋转弧度
//字体旋转
g2d.rotate(d,i*20+15, 20);//根据当前字符旋转弧度
String num = str[random.nextInt(str.length)];
g2d.drawString(num, i*20+15, 20);
g2d.rotate(-d,i*20+15, 20);//旋转弧度复位
}
}
//页面不缓存
private void setNoCache(HttpServletResponse response) {
response.addHeader("Expires", "-1");
response.addHeader("Cache-Control", "no-cache");
response.addHeader("Pragma", "no-cache");
}
//设置边框
private void setBorder(Graphics g) {
g.setColor(Color.GRAY);
g.drawRect(1, 1, WIDTH-2, HEIGHT-2);
}
//释放资源
private void dispose(Graphics g) {
g.dispose();
}
//设置背景颜色
private void setBackgroup(Graphics g) {
g.setColor(Color.GRAY);
g.fillRect(0, 0, WIDTH, HEIGHT);
}
- servlet生成验证码
- servlet生成验证码
- servlet生成验证码
- Servlet 生成验证码
- Servlet 生成 验证码
- servlet生成验证码
- servlet生成验证码
- Servlet生成验证码
- servlet生成验证码
- servlet生成验证码
- servlet生成验证码
- servlet验证码生成
- Servlet生成验证码
- servlet随机生成验证码
- servlet随机生成验证码
- java servlet生成验证码
- Servlet生成随机验证码
- 生成验证码的Servlet
- 使用Java SE 6 创建独立 Web Services - 服务端
- lambda表达式的解析(三) 类型转换表达式
- exe也可以当Dll用
- Doxygen 使用总结
- Android setContentView的位置
- servlet生成验证码
- poj 1502 Dijkstra 求最短路径。
- xp asp.net 对路径*.xml的访问被拒绝
- 解决MySQL server has gone away
- 不让伤害再次发生
- android自定义TabHost扩展控件TabView
- SQL Server 2005 管道的另一端上无任何进程
- 迁移blog
- cocos2d的安装