zoukankan      html  css  js  c++  java
  • jsp使用servlet实现验证码

    在进行表单设计中,验证码的增加恰恰可以实现是否为“人为”操作,增加验证码可以防止网站数据库信息的冗杂等...

    现在,小编将讲述通过servlet实现验证码:

    验证码作为一个图片,在页面中为“画”出来的,它是如何画出来的呢?

    <生成图片>

    {

      生成图片的类:

      1.BufferedImage图像数据缓冲区

      2.Graphics绘制图片

      3.color获取颜色

      4.Random获取随机数

      5.ImageIO输出图片

    }

    ///////////////////////////////////////////////////////////////////////////

    <生成验证码图片>

    1.在index.jsp中写入以下代码

      <form action="<%= request.getContextPath()%>/servlet/LoginServlet" method="get" >
        验证码:<input  type="text" name="checkCode"/>
        <img alt="验证码" id="imagecode" src="<%= request.getContextPath()%>/servlet/ImageServlet"/>
        <a href="javascript:reloadCode();">看不清楚</a><br>
        <input type="submit" value="提交">
        </form>

    2.在src中创建ImageServlet类

     1 public class ImageServlet  extends HttpServlet{
     2     public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
     3         //这个方法实现验证码的生成
     4         BufferedImage bi=new BufferedImage(68, 22,BufferedImage.TYPE_INT_RGB);//创建图像缓冲区
     5          Graphics g=bi.getGraphics(); //通过缓冲区创建一个画布
     6          Color c=new Color(200,150,255); //创建颜色
     7          /*根据背景画了一个矩形框
     8           */
     9          g.setColor(c);//为画布创建背景颜色
    10          g.fillRect(0, 0, 68,22); //fillRect:填充指定的矩形
    11          
    12          char[] ch="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();//转化为字符型的数组
    13          Random r=new Random();
    14          int len=ch.length;
    15          int index; //index用于存放随机数字
    16          StringBuffer sb=new StringBuffer();
    17          for(int i=0;i<4;i++)
    18          {
    19              index=r.nextInt(len);//产生随机数字
    20              g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));  //设置颜色
    21              g.drawString(ch[index]+"",(i*15)+3, 18);//画数字以及数字的位置
    22              sb.append(ch[index]);
    23          }
    24          request.getSession().setAttribute("piccode",sb.toString()); //将数字保留在session中,便于后续的使用
    25          ImageIO.write(bi, "JPG", response.getOutputStream()); 
    26     }

    3.在WEB-INF进行配置文件

    1 <servlet>
    2         <servlet-name>ImageServlet</servlet-name>
    3         <servlet-class>code.sam.ImageServlet</servlet-class>
    4 </servlet>
    5 
    6 <servlet-mapping>
    7         <servlet-name>ImageServlet</servlet-name>
    8         <url-pattern>/servlet/ImageServlet</url-pattern>
    9 </servlet-mapping>

    ------华丽分割线-------

    <输入信息与图片中的数字进行校验>

    1.创建LoginServlet类

     1 public class LoginServlet extends HttpServlet {
     2     public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException
     3     //用于验证验证码
     4     {
     5         String piccode=(String) request.getSession().getAttribute("piccode");
     6         String checkCode=request.getParameter("checkCode");  //取值
     7         //checkCode=checkCode.toUpperCase();  //把字符全部转换为大写的(此语句可以用于验证码不区分大小写)
     8         response.setContentType("text/html;charset=gbk");//解决乱码问题
     9         PrintWriter out=response.getWriter();
    10         if(checkCode.equals(piccode))
    11         {
    12             out.println("验证码输入正确!");
    13         }
    14         else
    15         {
    16             out.println("验证码输入错误!!!");
    17         }
    18         out.flush();//将流刷新
    19         out.close();//将流关闭
    20     }

    2.配置WEB-INF

    1     <servlet>
    2         <servlet-name>LoginServlet</servlet-name>
    3         <servlet-class>code.sam.LoginServlet</servlet-class>
    4     </servlet>
    5 
    6     <servlet-mapping>
    7         <servlet-name>LoginServlet</servlet-name>
    8         <url-pattern>/servlet/LoginServlet</url-pattern>
    9     </servlet-mapping>

    ------华丽分割线-----

    在点击页面中的看不清楚时,需要进行刷新,在页面中书写一段JS代码

    1     function reloadCode()
    2     {
    3         var time=new Date().getTime();
    4         document.getElementById("imagecode").src="<%= request.getContextPath()%>/servlet/ImageServlet?d="+time;
    5     }

    ****************************************************

    代码全部完成

    结果如下图***

  • 相关阅读:
    移动端如何强制页面横屏
    css实现内容渐变隐藏效果,手机网页版知乎内容隐藏效果的实现
    css3中样式计算属性calc()的使用和总结
    如何使用JS操纵伪元素
    HTML5全局属性汇总
    20 个 CSS高级样式技巧汇总
    网页开发中利用CSS以图换字的多中实现方法总汇
    html/css解决inline-block内联元素间隙的多种方法总汇
    [算法] 泊松分布、指数分布
    [算法] 递归
  • 原文地址:https://www.cnblogs.com/boy1025/p/4250710.html
Copyright © 2011-2022 走看看