模拟登陆验证码操作
package com.project.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; 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; /** * 验证码 * Servlet implementation class CheckCodeServlet */ @WebServlet("/checkCode") public class CheckCodeServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @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 { //设置响应信息的MIME类型为jpeg图片 response.setContentType("image/jpeg"); //创建130*53的内存图片 BufferedImage img = new BufferedImage(130,53,BufferedImage.TYPE_INT_RGB); //得到画笔 Graphics g = img.getGraphics(); //随机产生背景颜色 g.setColor(new Color((int)(Math.random()*50+175),(int)(Math.random()*50+175),(int)(Math.random()*50+175))); //绘制实心矩形 g.fillRect(0, 0, 130, 53); //设置字体格式 g.setFont(new Font("宋体",Font.BOLD,30)); //设置字体颜色 g.setColor(new Color((int)(Math.random()*70+50),(int)(Math.random()*70+50),(int)(Math.random()*70+50))); for (int i=0; i<4; i++){ //随机产生大写字母(A-Z) char c = (char) (Math.random()*26+65); //向图片写入文字,x每次增加12pix,y每次随机变化(22-52)pix g.drawString(c+"",24*i+12,(int)(Math.random()*30+22)); //g.drawString(c+"",(int)(Math.random()*117+22),(int)(Math.random()*30+22)); } //将img随机产生的图片,以二进制方式输出到客户端 ImageIO.write(img, "jpeg", response.getOutputStream()); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录界面</title> <script type="text/javascript" src="/testweb/jquery-1.12.1.js"></script> <script type="text/javascript"> function imgChange(){ //"/testweb/checkCode?a="+Math.random()清除浏览器缓存 //随机从服务器产生随机数,不会从缓存中去取 //浏览器存在缓存,当客户端浏览器向服务器发送请求时,会将下载的内容在浏览器缓存起来 //如果客户端再次请求服务器的同一个页面,会先看浏览器缓存中是否有下载的资源, //如果有,会从浏览器缓存中获取资源如果没有,再从服务器下载 $("#codeImg").attr("src","/testweb/checkCode?a="+Math.random()); } $(function(){ $("#clc").click(function(){ $("#codeImg").attr("src","/testweb/checkCode?a="+Math.random()); }) }); </script> </head> <body> <form action="login" method="post"> 用户名:<input type="text" name="userName"><br/> 密码:<input type="password" name="pwd"><br/> <img alt="" src="/testweb/checkCode" id="codeImg"> <input type="button" id="clc" value="点击切换验证码"><br/> <a href="javascript:imgChange()">看不清楚,换一张</a><br/> 验证码:<input type="text" name="check"> </form> </body> </html>