/**
*1、实现随机生成4个字符0-9|a-z|A-Z
*2、将这4个字符绘制成一张图片
*/
public class CodeServlet extends HttpServlet
{
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
//获取0-1之间的随机数
Random random =new Random();
String code="";
for(int i=0;i<4;i++)
{
//nextInt(int n),在 0(包括)和n(不包括)之间均匀分布的 int 值
int n =random.nextInt(62);
//0-9,直接输出0-9
if(n<10)
{
code+=n;
}
//大于等于10,小于36输出a-z中的任意字符
else if(n<36)
{
code+=(char)(n-10+'a');
}
//大于等于36,小于62输出A-Z中的任意字符
else if(n<62)
{
code+=(char)(n-36+'A');
}
}
//遍历结束后,生成4个字符0-9|a-z|A-Z
System.out.println(code);
HttpSession session=req.getSession();
//将验证码字符存入session作用域
session.setAttribute("code",code);
//2、将这4个字符绘制成一张图片
//创建img对象
BufferedImage image= new BufferedImage(68,28,BufferedImage.TYPE_INT_RGB);
//获取画笔
Graphics gra =image.getGraphics();
//设置背景色
gra.setColor(Color.YELLOW);
//绘制边框
gra.fillRect(2, 2, 64, 24);
Font font =new Font("Courier NEW",Font.BOLD|Font.ITALIC,20);
//设置字体
gra.setFont(font);
//遍历该字符串,绘制图形
for(int i=0;i<code.length();i++)
{
String ch=code.substring(i,i+1);
gra.setColor(new Color(255,0,0));
//绘制文字
gra.drawString(ch,5+i*15, 18);
}
//设置响应页面
resp.setContentType("image/jpeg");
//获取输出流
OutputStream out = resp.getOutputStream();
//在该输出流上创建图像编码器
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
//编码图片
encoder.encode(image);
out.flush();
out.close();
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
doGet(req, resp);
}
}
code.jsp
<img id ="img" src="code.jpg" title="看不清,换一张" style="cursor:pointer" οnclick="changeImg()"/>
code.js
function changeImg()
{
//定义时间戳
var timestamp =new Date().getTime();
//找到img元素
var img = document.getElementById("img");
img.src="code.jpg?t="+timestamp;
}