javaweb验证码代码

来源:互联网 发布:slam包括的算法 编辑:程序博客网 时间:2024/05/18 17:24

js部分

<script type="text/javascript">$(function(){$("#newPic").click(function(){$.ajax({type:"post",url:"ImageAction",success:function(){//$("#codePic").attr("src",img);  document.getElementById("codePic").src = "ImageAction";},});});$.ajax({type:"post",url:"ImageAction",success:function(){//$("#codePic").attr("src",img); document.getElementById("codePic").src = "ImageAction";},});});    /*  function getPic(){      alert("test");           $("#codePic").attr("src","http://127.0.0.1:8888/TP/codePic?flag="+Math.random());       }; */</script>


前台

<form action="GetCodeImgServlet" method="post">    <p><label class="lbright">验证码:</label>       <span>             <input type="text" name="code" style="width:70px; vertical-align:middle;" id="validcode"/>       <img id="codePic" src="http://127.0.0.1:8888/TP/codePic" width="60" height="21" style="vertical-align:middle;cursor:pointer;"/>                        </span>                      <a class="blurry" id="newPic" onclick="getPic();">看不清楚,换一张</a>    </p>     <input type="submit" value="提交">    </form>    


生成验证码的Servlet

package codenum;import java.awt.Color;  import java.awt.Font;  import java.awt.Graphics;  import java.awt.image.BufferedImage;  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;    public class ImageAction extends HttpServlet {      /**      * 执行登陆的业务处理      * @param request:发送上来的请求      * @return destJsp:目标URL      */      public void service(HttpServletRequest request,              HttpServletResponse response) throws IOException,ServletException{          //设置页面不缓存          response.setHeader("Pragma", "No-cache");          response.setHeader("Cache-Control", "no-cache");          response.setDateHeader("Expires", 0);          //在内存中创建图象          int width = 60, height = 20;          BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);          //获取图形上下文          Graphics g = image.getGraphics();          //生成随机类          Random random = new Random();          //设定背景色          g.setColor(getRandColor(220, 250));          g.fillRect(0, 0, width, height);          //设定字体          g.setFont(new Font("Times New Roman", Font.PLAIN, 18));          //画边框          //g.drawRect(0,0,width-1,height-1);          g.draw3DRect(0,0,width-1,height-1,true);          //随机产生155条干扰线,使图象中的认证码不易被其它程序探测到          g.setColor(getRandColor(160, 200));          for (int i = 0; i < 155; 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);          }          // 取随机产生的认证码(6位数字)          String sRand = "";          String s = "012345678901234567890123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ012345678901234567890123456789abcdefghijklmnopqrstuvwxyz";          for (int i = 0; i < 4; i++) {              char rand =s.charAt(random.nextInt(s.length()));              sRand += rand;              // 将认证码显示到图象中              g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));              //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成              g.drawString(String.valueOf(rand), 13 * i + 6, 16);          }          g.drawOval(0,12,60,11);          // 将认证码存入SESSION          request.getSession().setAttribute("rand", sRand);          // 图象生效          g.dispose();          ServletOutputStream output;          try {              output = response.getOutputStream();              // 输出图象到页面              ImageIO.write(image, "JPEG", output);          } catch (IOException e) {              e.printStackTrace();          }      }            /**      * 生成随机颜色      */      private Color getRandColor(int fc, int bc) {          Random random = new Random();          if (fc > 255)              fc = 255;          if (bc > 255)              bc = 255;          int r = fc + random.nextInt(bc - fc);          int g = fc + random.nextInt(bc - fc);          int b = fc + random.nextInt(bc - fc);          return new Color(r, g, b);      }  }  


验证验证码的Servlet

package codenum;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;public class GetCodeImgServlet extends HttpServlet {public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String code = request.getParameter("code");String rand = (String) request.getSession().getAttribute("rand");System.out.println(rand+code);}public void init() throws ServletException {// Put your code here}}



原创粉丝点击