zoukankan      html  css  js  c++  java
  • 在JSP+JAVA+XML+HTML下写的WEB图片验证码

    核心代码:以下代码使用时请自行调配好路径。

    HTML|:<form method="POST" action="LoginCheck">
                      <input type="text" name="random" maxlength="4">
                         <img src="ImageCheckCode">
                     <input type="submit" value="提交"></td>
                   </form>

    XML|: <servlet-class>fengyan.efly.CreateImageCheckCode</servlet-class>
        </servlet>
        <servlet>
            <servlet-name>LoginCheckServlet</servlet-name>
            <servlet-class>fengyan.efly.LoginCheckServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>CreateImageCheckCode</servlet-name>
            <url-pattern>/ImageCheckCode</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>LoginCheckServlet</servlet-name>
            <url-pattern>/LoginCheck</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
            </welcome-file-list>

    JAVA|:

    //LoginCheckServlet.java

    package fengyan.efly;

    import java.io.*;
    import java.net.*;

    import javax.servlet.*;
    import javax.servlet.http.*;


    public class LoginCheckServlet extends HttpServlet {

        protected void processRequest(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
         
            HttpSession session=req.getSession();
            String randomCode=(String)session.getAttribute("randomCode");
            if(null==randomCode)
            {
                resp.sendRedirect("login.html");
                return;
            }       
            String reqRandom=req.getParameter("random");       
            req.setCharacterEncoding("GBK");
            resp.setContentType("text/html;charset=GBK");
            PrintWriter out=resp.getWriter();       
            if(randomCode.equals(reqRandom))
            {           
                out.println("验证码匹配!");
            }
            else
            {
                out.println("验证码校验失败,请单击浏览器上的后退!");
            }
            out.close();
        }

        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }

        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }

        public String getServletInfo() {
            return "Short description";
        }
    }

    //CreateImageCheckCode.java

    package fengyan.efly;
    import java.io.*;
    import java.net.*;

    import javax.servlet.*;
    import javax.servlet.http.*;

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.util.Random;
    import javax.imageio.ImageIO;

    public class CreateImageCheckCode extends HttpServlet {   
        //验证码图片的宽度。
        private int width=60;
        //验证码图片的高度。
        private int height=20;
       
        protected void processRequest(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
            resp.setContentType("text/html;charset=UTF-8");
            BufferedImage buffImg=new BufferedImage(width,height,
                                                    BufferedImage.TYPE_INT_RGB);
            Graphics2D g=buffImg.createGraphics();
           
            //创建一个随机数生成器类。
            Random random=new Random();
           
            g.setColor(Color.WHITE);
            g.fillRect(0,0,width,height);
           
            //创建字体,字体的大小应该根据图片的高度来定。
            Font font=new Font("Times New Roman",Font.PLAIN,18);
            //设置字体。
            g.setFont(font);
           
            //画边框。
            g.setColor(Color.BLACK);
            g.drawRect(0,0,width-1,height-1);
           
            //随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
            g.setColor(Color.GRAY);
            for (int i=0;i<160;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);
            }       
            //randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
            StringBuffer randomCode=new StringBuffer();
            int red=0,green=0,blue=0;
           
            //随机产生4位数字的验证码。
            for (int i=0;i<4;i++)
            {
                //得到随机产生的验证码数字。
                String strRand=String.valueOf(random.nextInt(10));
               
                //产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
                red=random.nextInt(110);
                green=random.nextInt(50);
                blue=random.nextInt(50);
               
                //用随机产生的颜色将验证码绘制到图像中。
                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("Pragma","no-cache");
            resp.setHeader("Cache-Control","no-cache");
            resp.setDateHeader("Expires", 0);       
            resp.setContentType("image/jpeg");
           
            //将图像输出到Servlet输出流中。
            ServletOutputStream sos=resp.getOutputStream();
            ImageIO.write(buffImg, "jpeg",sos);
            sos.close();
        }

        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }

        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }

        public String getServletInfo() {
            return "Short description";
        }
    }

  • 相关阅读:
    jfinal 导出excle
    SpringBoot添加多数据源mysql和oracle
    Centos6.8搭建Git服务(git版本可选)(转)
    阿里云服务器搭建java环境(jdk+tomcat+oracle11g)
    Oracle 迁移数据库到 mysql
    mysql 迁移数据库到 oracle (sql注意问题)
    nginx学习之——虚拟主机配置
    mongodb 学习之——mongod --help 中文解释
    win 7 MongoDB 下载安装
    nginx学习之——信号控制和配置
  • 原文地址:https://www.cnblogs.com/phirothing/p/1798968.html
Copyright © 2011-2022 走看看