动态验证码

@XML代码

<?xmlversion="1.0"encoding="UTF-8"?>

<web-app>

    <servlet>

       <servlet-name>randomCodeServlet</servlet-name>

       <servlet-class>RandomCodeServlet</servlet-class>

    </servlet>

    <servlet-mapping>

       <servlet-name>randomCodeServlet</servlet-name>

       <url-pattern>/imgcode</url-pattern>

    </servlet-mapping>

    <servlet>

      <servlet-name>loginCheckServlet</servlet-name>

      <servlet-class>LoginCheckServlet</servlet-class>

    </servlet>

    <servlet-mapping>

      <servlet-name>loginCheckServlet</servlet-name>

      <url-pattern>/loginchk</url-pattern>

    </servlet-mapping>

</web-app>


@HTML代码

<%@pagepageEncoding="utf-8"%>

<html>

   <head><title>登录</title></head>

   <body>

       <form method="POST"action="loginchk">

            <table>

                 <tr>

                       <td>名称:  </td>

                       <td><inputtype="text" name="username" /></td>

                 </tr>

                 <tr>

                       <td>密码:  </td>

                       <td><inputtype="password" name="password"/></td>

                 </tr>

<tr>

                       <td>验证码:</td>

                       <td>

                               <inputtype="text" name="random"/>

                               <imgsrc="imgcode">

                       </td>

                 </tr>

                 <tr>

                       <td colspan=2align=center>       <input type="reset"value="重填"/>

                               <inputtype="submit" value="提交"/>

                       </td>

                 </tr>

            </table>

       </form>

   </body>

</html>


@JAVA代码

importjava.awt.*;

importjava.awt.image.*;

importjava.io.IOException;

importjavax.servlet.*;

importjavax.servlet.http.*;

publicclass RandomCodeServlet extends HttpServlet {

   private final int width = 60;  //图片宽度

   private final int height = 20;  //图片高度

//由于没用通过提交按钮访问,应实现service()方法

   protected voidservice(HttpServletRequest req,

         HttpServletResponseresp)

         throws ServletException,IOException{

      BufferedImage buffImg = newBufferedImage(width, height,

             BufferedImage.TYPE_INT_RGB);

      Graphics2D g = buffImg.createGraphics();

      g.setColor(Color.WHITE);  //背景颜色

      g.fillRect(0, 0, width, height);

      Font font = new Font("Times NewRoman", Font.PLAIN, 18);

      g.setFont(font);  //设置字体,字号与图片高度相关

      g.setColor(Color.black);  //图片边框

      g.drawRect(0, 0, width - 1, height - 1);

      g.setColor(Color.gray);  //干扰线颜色

      for (int i = 0; i < 16; i++) {  // 随机产生16条干扰线

          int x = (int)(Math.random()*width);

          int y = (int)(Math.random()*height);

          int x1 = (int)(Math.random()*12);

          int y1 = (int)(Math.random()*12);

          g.drawLine(x, y, x + x1, y + y1);

      }

      StringBuffer randomCode = newStringBuffer();

      for (int i = 0; i < 4; i++) {  // 随机产生4位数字的验证玛

          String strRand =String.valueOf((int)(Math.random()*10));

//产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色都不一样

          int red = (int)(Math.random()*255);

intgreen = (int)(Math.random()*255);

          int blue = (int)(Math.random()*255);

          g.setColor(new Color(red, green,blue));

          g.drawString(strRand, 13 * i + 6,16);

          randomCode.append(strRand); // 将产生的四个随机数组合起来

      }

//将四位数字保存到session

      HttpSession session = req.getSession();

     session.setAttribute("randomCode", randomCode.toString());

//禁止图像的缓存

      resp.setHeader("Cache-Control","no-cache");   

     resp.setContentType("image/jpeg");

//将图像输出到servlet输出流中

     ServletOutputStream sos =resp.getOutputStream();

      javax.imageio.ImageIO.write(buffImg,"jpeg", sos);

      sos.close();

  }

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值