下午在JAVAEYE逛了一会 手有点痒了 可是一时又不知道写点什么 于是想起来几个月前 有位网友问我的 网站的随机图片的生成的问题 当时没有太在意 因为这个东西没有深接触过 只是知道有这种轻量级的东西 况且网上一GOOGLE会有一大片 出于好奇 俺动手写了一写 写的DEMO级别的 超简单 好了 俺上代码
下面我说一下思路吧 首先是随机图片的生成过程 绘制出一定尺寸的图片,产生一组随机数,一般是4个。这里要记得 要把产生的随机数存入到session里面 因为后面的校验还要用到。校验的时候就是获取用户的输入的验证码与session里面已经存取的那个做比较,匹配 则放行。
首先是Login.jsp
<h1> 带有验证码的登录的页面</h1>
<form action="servlet/LogonServlet" method="post">
用户名 : <input type="text" name="name" /><br/>
密 码 : <input type="text" name="password" /><br/>
验证码 : <input type="text" name="check_code" />
<img src="servlet/CheckCodeServlet"><br/>
<input type="submit" value="登录"/>
然后是产生图片的Servlet CheckCodeServlet 写图片的样式绘制的时候比较郁闷 很少用 所以查了一会API 不过最后终于搞定 不过不是很漂亮。。。。随机生成120个干扰点
这个没有实现。。。
package com.blacklee.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
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;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class CheckCodeServlet
*/
public class CheckCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static int WIDTH = 60;
private static int HEIGHT = 20;
/**
* @see HttpServlet#HttpServlet()
*/
public CheckCodeServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
HttpSession session = request.getSession();
response.setContentType("image/jpeg");
ServletOutputStream sos = response .getOutputStream();
//设置浏览器不要缓存图片
response .setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
//创建内存图像 并获得其上下文
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
//产生随机的验证码
char[] rands = createCheckCode();
//产生图像
drawBackGround(g);
drawRands(g,rands);
//结束图像的绘制
g.dispose();
//将图像输出到客户端
ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
ImageIO.write(image, "JPEG", bos);
byte[] buff = bos.toByteArray();
response.setContentLength(buff.length);
//写入到页面的输出流里面去 简单的写可以这样写 bos.writeTo(sos);
sos.write(buff);
bos.close();
sos.close();
//把当前生成的验证码存进session里面去
session.setAttribute("check_code", new String(rands));
}
private void drawRands(Graphics g, char[] rands) {
// TODO Auto-generated method stub
g.setColor(Color.BLACK);
g.setFont(new Font(null, Font.BOLD, 18));
//在不同的高度进行随机数的显示
g.drawString(""+rands[0], 1, 17);
g.drawString(""+rands[1], 16, 15);
g.drawString(""+rands[2], 31, 18);
g.drawString(""+rands[3], 46, 16);
}
private void drawBackGround(Graphics g) {
// TODO Auto-generated method stub
//画背景
g.setColor(new Color(0xDCDCDC));
g.fillRect(0, 0, WIDTH, HEIGHT);
//随机生成120个干扰点
}
private char[] createCheckCode() {
//定义验证码的字符集
String chars = "0123456789abcdefghigklmnopqrstuvwxyz";
char[] rands1 = new char[4];
for(int i = 0 ; i<4 ;i++){
rands1[i] = chars.charAt(new Random().nextInt(37));
}
return rands1;
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
然后是校验的servlet LogonServlet
package com.blacklee.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class LogonServlet
*/
public class LogonServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LogonServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
HttpSession session = request.getSession(false);
if(session==null){
writer.println("验证码处理问题!!!!");
return ;
}
String saveCode = (String) session.getAttribute("check_code");
if(saveCode==null){
writer.println("验证码处理问题!!!");
return ;
}
String checkCode = request.getParameter("check_code");
if(!saveCode.equals(checkCode)){
writer.println("验证码错误");
return ;
}
session.removeAttribute("check_code");
writer.println("验证通过服务器正在校验用户名和密码");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
程序到了这里大体上就完成了 很简单的一个demo
分享到:
相关推荐
servlet动态生成登陆验证图片 pdf
使用Servlet生成验证码图片。 一个生成验证码图片的工具类。
servlet生成验证码图片
通过Servlet生成图片验证码,提供给jsp页面展示,并验证。
登陆验证+servlet动态生成图片验证码
在servlet中动态生成验证码图片,可被JSP或servlet引用,每次刷新都会改变验证码
用Servlet实现的二维码图片生成,完整打jsp页面,和源代码
代码是可以运行的,,前提是你要搭建好web开发环境,
Java servlet 自动生成 图片验证码 生成 Java源码
java使用Servlet动态生成图片使用Servlet动态生成图片使用Servlet动态生成图片
java web笔记之servlet生成验证码java web笔记之servlet生成验证码
这是一个完整的功能,实现了动态生成验证码及验证填入信息是否正确的功能,是入门者非常不错的参考资料,是我在课堂上演示的代码。
生成图片验证码原理是:随机生成一张图片,里面有一些随机字符,用户需要输入里面的验证字符,才能进入某一系统里面。本示例利用的是Servlet的response对象将生成的图片直接输出到了客户端的页面上。
NULL 博文链接:https://yangweixu.iteye.com/blog/1973432
在用户注册时常常会看到随机图片,此代码介绍了随机图片的生成的方法。涉及到servlet java图形界面编程。
利用servlet和json生成easyUI图表
这是当初初学zxing和sevlet的时候写的,保存路径在ToBeZxing里,这里用的是绝对路径所以在你的电脑上多半需要更改,有注释应该一眼能看出来。为了防止名字的重复,我使用的md5来为每一个二维码命名。谢谢采纳并给予...
Servlet实现登录验证
使用jsp+servlet生成验证码并刷新验证码
实验1: 利用servlet实现一个简单的聊天室 实验目的 (1) 理解servlet的工作原理 (2) 掌握servlet编程基本技能 实验内容及要求 1. 利用servlet技术实现一个简单的聊天室,实现多人同时交流。当发送聊天信息时,信息...