zoukankan      html  css  js  c++  java
  • 一、手写实现验证码

    1.新建web项目,修改index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
      </head>
      <script type="text/javascript">
          function reloadCode(){
              var time = new Date().getTime();
              document.getElementById("codeImage").src="<%=request.getContextPath()%>/servlet/ImageServlet?d="+time;
          }
      </script>
      
      <body>
      <form action="<%=request.getContextPath()%>/servlet/loginServlet" method="post">
        <input type="text" name="checkCode">
        <input type="submit" value="提交">
      </form>
        <img name="codeImage" alt="验证码" src="<%=request.getContextPath()%>/servlet/ImageServlet">
          <a href="javascript:reloadCode();">换一张</a>
      </body>
    </html>

    2.生成图片的servlet

    package com.servlet;
    
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Random;
    
    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class ImageServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            doPost(request, response);
        }
    
        //生成图片
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            BufferedImage bi=new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);//创建图片
            Graphics g = bi.getGraphics();//获取画笔
            g.setColor(Color.LIGHT_GRAY);//设置画笔颜色
            g.fillRect(0, 0, 68, 22);//填充背景
            
            char[] ch="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".toCharArray();//字符库
            Random r=new Random();
            StringBuilder sb=new StringBuilder();
            for(int i=0;i<4;i++){
                int index=r.nextInt(ch.length);//随机获取一个字符库里的字符库下标
                g.setColor(new Color(r.nextInt(100), r.nextInt(150), r.nextInt(250)));//给画笔设置随机颜色
                g.drawString(ch[index]+"", (i*15)+3, 15);//画刚才字符串下标的字符
                sb.append(ch[index]);//拼接,记录生成的字符内容
            }
            
            request.getSession().setAttribute("piccode", sb.toString());
            ImageIO.write(bi, "jpg", response.getOutputStream());
        }
    
    }

    3.登录验证

    package com.servlet;
    
    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 LoginServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            doPost(request, response);
        }
    
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            String userCode = request.getParameter("checkCode");//用户提交的字符串
            String imageCode=request.getSession().getAttribute("piccode").toString();//正确的字符串
            System.out.println(userCode+" "+imageCode);
            PrintWriter out = response.getWriter();
            try {
                if(userCode.toUpperCase().equals(imageCode)){//只要用户输入的正确(不论大小写)
                    out.print("验证码正确");
                }else{
                    out.print("验证码错误");
                }
            } catch (Exception e) {
                // TODO: handle exception
            }finally{
                out.flush();
                out.close();
            }
            
        }
    
    }

    4.配置servlet

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <servlet>
        <servlet-name>ImageServlet</servlet-name>
        <servlet-class>com.servlet.ImageServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.servlet.LoginServlet</servlet-class>
      </servlet>
    
    
      <servlet-mapping>
        <servlet-name>ImageServlet</servlet-name>
        <url-pattern>/servlet/ImageServlet</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/servlet/loginServlet</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

    5.项目源码

    链接:https://pan.baidu.com/s/1mkh6f8k 密码:ie6z

  • 相关阅读:
    android的左右滑动效果实现-ViewFlipper
    ios学习之UISwipeGestureRecognizer手势识别
    iOS使用AVFoundation实现二维码扫描
    IOS开发之Core Location
    iOS中如何创建一个滑出式导航面板(1)
    消息推送之百度云推送Android集成与使用方法
    IOS开发之Storyboard应用
    用CocoaPods做iOS程序的依赖管理
    RelativeLayout 布局参数
    Android中获取应用程序(包)的信息-----PackageManager的使用
  • 原文地址:https://www.cnblogs.com/myz666/p/8446419.html
Copyright © 2011-2022 走看看