精华内容
下载资源
问答
  • 网页微信扫码登录功能实现
  • 苹果iOS app中登录功能实现
  • 主要介绍了android扫描网页二维码进行网页登录效果,扫描成功之后跳转进入主页,具体实现代码大家参考下本
  • jquery 网页分享功能实现

    热门讨论 2011-03-14 19:19:26
    轻松实现网页分享到QQ空间,人人网,百度,开心网等知名网站
  • 用js以及jQuery实现网页换肤功能,有选择存储功能,替换标签和样式即可
  • 网页登录时验证码功能实现

    千次阅读 2019-09-28 23:03:53
    网页登录时验证码功能实现 在我们日常上网时,经常会遇到要登录的界面,我们会发现他会让你输入账号,密码外,还需要输入随机生成的验证码。 作用: 不少网站为了防止用户利用机器人自动注册、登录、灌水,都...

    网页登录时验证码功能的实现

    • 在我们日常上网时,经常会遇到要登录的界面,我们会发现他会让你输入账号,密码外,还需要输入随机生成的验证码。

    • 作用: 不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。

    • 效果如下图所示:
      在这里插入图片描述

    • 点击图片或刷新页面,都可以刷新验证码图片。下面就为大家讲解这个功是如何实现的。

    • 在这里说明一下,针对这个功能的实现,我是在后端使用Java语言生成图像的方式来实现。我对其实现的代码进行了封装,将其做成一个工具类。以便再其他场景的使用,和代码移植的便捷性。

    • 以下就是该工具类:

    • ImageUtils类

    package com.wdhcr.tools;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import java.awt.*;
    import java.awt.geom.AffineTransform;
    import java.awt.geom.Line2D;
    import java.awt.image.BufferedImage;
    import java.util.Random;
    
    /*
     * 实现获取验证码图像功能的工具类
     * 返回一个BufferedImage对象
     *
     * */
    public class ImageUtils {
    
        // 随机字符集合中去除掉了0和o,O,1和l,因为这些不易区分
        private static String CHECK_CODES = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789";
    
    
        //  该方法主要作用是生成随机的颜色
        private static Color getRandColor(int s, int e) {
            Random random = new Random();
            if (s > 255)
                s = 255;
            if (e > 255)
                e = 255;
            int r, g, b;
            r = s + random.nextInt(e - s); // 随机生成RGB颜色中的r值
            g = s + random.nextInt(e - s); // 随机生成RGB颜色中的g值
            b = s + random.nextInt(e - s); // 随机生成RGB颜色中的b值
            return new Color(r, g, b);
        }
    
        /*
        @param:
         width , height 指定生成验证码的宽度和高度
         HttpServletRequest request 传入需要获取验证码图片的会话请求,将验证码四位验证码放入到session域中
        @return:
        BufferedImage image对象
        */
        public static BufferedImage getPicture(int width, int height, HttpServletRequest request) {
            // 创建BufferedImage对象,其作用相当于一图片
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics g = image.getGraphics(); // 创建Graphics对象,其作用相当于画笔
            Graphics2D g2d = (Graphics2D) g; // 创建Grapchics2D对象
    
            Random random = new Random();
            Font mfont = new Font("幼圆", Font.BOLD, 25); // 定义字体样式,显示大小
            g.setColor(getRandColor(200, 250));
            g.fillRect(0, 0, width, height); // 绘制背景图片大小
            g.setFont(mfont); // 设置字体
            g.setColor(getRandColor(180, 200));
    
            // 绘制50条颜色和位置全部为随机产生的线条,该线条为2f
            for (int i = 0; i < 50; i++) {
                int x = random.nextInt(width - 1);
                int y = random.nextInt(height - 1);
                int x1 = random.nextInt(6) + 1;
                int y1 = random.nextInt(12) + 1;
                BasicStroke bs = new BasicStroke(2f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL); // 定制线条样式
                Line2D line = new Line2D.Double(x, y, x + x1, y + y1);
                g2d.setStroke(bs);
                g2d.draw(line); // 绘制直线
            }
    
            //用来保存验证码字符串文本内容
            StringBuilder sb = new StringBuilder();
    
            for (int i = 0; i < 4; ++i) {// 随机生成4个字符
                /*random.nextInt(CHECK_CODES.length())使用这个方法获取到一个从0到CHECK_CODES.length()
                 *包含0,不包含    CHECK_CODES.length()的一个随机数
                 *使用charAt根据下标的方式取出字符。
                 */
                char charAt = CHECK_CODES.charAt(random.nextInt(CHECK_CODES.length()));
                String sTemp = String.valueOf(charAt);
                sb.append(sTemp);
    
                Color color = new Color(20 + random.nextInt(110), 20 + random.nextInt(110), random.nextInt(110));
                g.setColor(color);
                // 将生成的随机数进行随机缩放并旋转制定角度 PS.建议不要对文字进行缩放与旋转,因为这样图片可能不正常显示
    
                /* 将文字旋转制定角度 */
                Graphics2D g2d_word = (Graphics2D) g;
                AffineTransform trans = new AffineTransform();
                trans.rotate((45) * 3.14 / 180, 15 * i + 8, 7);
    
                /* 缩放文字 */
                float scaleSize = random.nextFloat() + 0.8f;
                if (scaleSize > 1f)
                    scaleSize = 1f;
                trans.scale(scaleSize, scaleSize);
                g2d_word.setTransform(trans);
                g.drawString(sTemp, 15 * i + 18, 14);
            }
            /*
             * 将生成的四位随机验证码,放入session域中,方便登录controller的获取,验证。
             *当有controller调用获取验证码工具类时,需要传入本次请求的会话request,并获取session域。将验证码数据放入其中。
             * */
            HttpSession session = request.getSession(true);
            session.setAttribute("randCheckCode", sb.toString());
            System.out.println("sRand=" + sb.toString());
            g.dispose(); // 释放g所占用的系统资源
    
            //返回画布
            return image;
        }
        
    }
    
    
    • controller层类,接收到前端请求
    package com.wdhcr.controller;
    
    
    import com.wdhcr.tools.ImageUtils;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.imageio.ImageIO;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    
    @Controller
    public class CheckController {
    
        /*
         * 当页面请求时,使用画布获取一个验证码图像
         * 返回到页面
    
         * 接收前端获取验证码的请求,使用画布随机生成一个四位数的验证码图像
         * 将生成的四位数字,数字或字母放在一个session域中使得登录验证的controller中可以获取到该值,判断登陆验证
         * 使用mageIO.write(image, "JPEG", response.getOutputStream());输出图片
         * 使其再前端可以接收再图片显示出来
         * */
        @RequestMapping(value = "/checkCode")
        public void checkCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
            //设置编码格式
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
    
            // 设置不缓存图片
            response.setHeader("Pragma", "No-cache");
            response.setHeader("Cache-Control", "No-cache");
            response.setDateHeader("Expires", 0);
    
            // 指定生成的响应图片,一定不能缺少这句话,否则错误.
            response.setContentType("image/jpeg");
            /*
            * @param
            * 传入生成图像长度和宽度,还有本次会话的请求HttpServletRequest对象request
            * @return
            * 返回一个BufferedImage对象
            * */
            BufferedImage image = ImageUtils.getPicture(80, 35, request);
            // 将图像输出到response输出流中。
            //response.getOutputStream()获取response输出流
            ImageIO.write(image, "JPEG", response.getOutputStream()); // 输出图片
        }
    }
    
    
    
    
    • 前端html或jsp页面代码
    <div class="control-group">
    
                <label class="control-label visible-ie8 visible-ie9">验证码</label>
    
                <div class="controls">
    
                    <div class="input-icon left">
    
                        <i class="icon-book"></i>
    
    <%--                    这里是输入验证码图片中的字符,传入后台进行验证--%>
                        <input style="width:49%;float:left;height: 24px;" type="text" placeholder="验证码" name="check"
                               id="check"/>
    
                        <span style="cursor:pointer;float: right;height: 34px; width: 30%;">
    <%--                        这里需要注意src的路径,为controller层指定的路径@RequestMapping(value = "/checkCode")的路径--%>
    <%--                        Reload()方法实现点击一次请求一次后台controller--%>
                            <img id="CreateCheckCode" style="width: 100%;height:100%;" src="checkCode.do" onclick="Reload()" />
                        </span>
    
                    </div>
    
                </div>
    
            </div>
    
    • 这里的前端代码主要实现功能的是

        <%-- 这里是输入验证码图片中的字符,传入后台进行验证--%>
          	    <input style="width:49%;float:left;height: 24px;" type="text" placeholder="验证码" name="check"
                    	       id="check"/>
      
            	   <span style="cursor:pointer;float: right;height: 34px; width: 30%;">
            	    <%-- 这里需要注意src的路径,为controller层指定的路径@RequestMapping(value = 	"/checkCode")的路径--%>
                    <%--Reload()方法实现点击一次请求一次后台controller--%>
                        <img id="CreateCheckCode" style="width: 100%;height:100%;" src="checkCode.do"
                             onclick="Reload()"/>
      
    • 实现点击换验证码图片的js代码

        <!-- 验证码图片点击切换 -->
        <!-- 通过Date来改变每次访问的url不同 -->
    <script>
        function Reload() {
            document.getElementById("CreateCheckCode").src =
                // 获取当前时间使其请求不重复
                document.getElementById("CreateCheckCode").src + "?nocache=" + new Date().getTime() + ".do";
        }
    
    </script>
    
    • 在工具类中我将四位字符放到了本次会话的session域中,所以在登录的controller验证时加入如下代码:
    //创建session域的对象,获取域中的数据
     if (session.getAttribute("randCheckCode").toString().equalsIgnoreCase(check)) {
                            try {
                                //验证成功后,转发到index页面
                                request.getRequestDispatcher("index.jsp").forward(request, response);
                            } catch (ServletException e) {
                                e.printStackTrace();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }else {
    
                            //验证码输入错误,弹窗提示,并返回到login页面
                            writer.println("<script>alert('登录失败了!验证码错误!!!');</script>");
                        }
    
    • 以上就是登录时验证码功能实现的步骤以及源码。
    展开全文
  • C#实现网页截图功能

    2020-09-04 06:25:10
    主要介绍了C#实现网页截图功能,是非常实用的一个功能,需要的朋友可以参考下
  • js实现网页计算器功能是一款简洁实用,带有时间功能网页计算器特效代码。
  • 主要为大家详细介绍了js简单实现网页换肤功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • C#实现网页画图功能

    2020-08-19 11:05:53
    主要为大家详细介绍了C#实现网页画图功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • php 实现图片网页上传功能
  • js实现网页收藏功能

    2020-10-23 03:37:58
    主要介绍了js实现动态添加或删除网址功能,以及js实现网页收藏功能,感兴趣的小伙伴们可以参考一下
  • 主要介绍了基于jQuery实现网页打印功能实现的打印功能大致跟浏览器的Ctrl+P效果一样,感兴趣的小伙伴们可以参考一下
  • 服务器是Eclipse+Tomcat7实现,创建Servlet:LoginServlet,他的POST方法中接受提交的信息,我已经可以成功提取提交信息。 在服务器端的POST方法中使用 response.getWrite().write(...
  • 主要介绍了C#实现网页保存成图片的网页拍照功能,很实用的一个功能,需要的朋友可以参考下
  • 网页实现照片墙功能

    2017-12-14 16:43:15
    网页端的照片墙,使用html,css,js实现照片墙的效果,包含文档
  • 主要介绍了手机中点击网页链接实现拨号或保存电话功能实现代码,需要的朋友可以参考下
  • 如何实现一个简易网页登录功能

    千次阅读 2020-08-24 22:37:14
    这篇文章具体实现了接收从网页输入的数据与数据库中数据进行匹配并返回结果的这个一个简易登录功能 第一步:设置xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns=...

    这篇文章具体实现了接收从网页输入的数据与数据库中数据进行匹配并返回结果的这个一个简易登录功能

    重在逻辑学习

    第一步:设置xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <welcome-file-list>
                <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
        <servlet>
            <servlet-name>login</servlet-name>
            <servlet-class>cn.kgc.kb09.controller.LoginServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>login</servlet-name>
            <url-pattern>/login.html</url-pattern>
        </servlet-mapping>
    </web-app>
    

    第二步:简易登录界面html

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>首页</title>
    </head>
    <body>
    <h1>登录功能测试</h1>
    <form action="login.html" method="get">
        <p><input type="text" name="username"></p>
        <p><input type="password" name="password"></p>
        <p><input type="submit" value="点我登录"></p>
    </form>
    </body> 
    </html>
    
    

    第三步LoginServlet:接收网页数据

    //用于接收网页数据并处理(该方法需要继承HttpServlet,该类需要配置Tomcat)
    public class LoginServlet extends HttpServlet {
        //该对象的功能是连接数据库并处理接收数据对比并返回结果,在后面会实现
        private  LoginService service;
        //重载HttpServlet中的doGet或doPost或service方法
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //先获取到前台传回的数据
            //接收页面username框中输入的数据
            String username = req.getParameter("username");
            //接收页面password框中输入的数据
            String password = req.getParameter("password");
            //实例化声明service对象(LoginService为接口/LoginServiceImpl为具体实现类)
            service =new LoginServiceImpl();
            //调用login方法,该功能是对比数据是否匹配存在的用户信息并返回结果
            boolean canlogin = service.login(username, password);
            if(canlogin){//可以登录
                req.setAttribute("rst","恭喜"+username+",登录成功!");
            }else {//不可以登录
                req.setAttribute("rst","对不起登陆失败");
            }
            //转发请求到新的页面
            req.getRequestDispatcher("result.jsp").forward(req,resp);
        }
    }
    

    第四步LoginServiceImpl:处理接收数据是否合法在进行匹配数据

    //该类实现用户输入的数据是否合法在进行匹配最后返回的结果
    public class LoginServiceImpl implements LoginService{
        //声明LoginDao对象,该功能为具体实现处理接收的数据与数据库中数据的匹配
        LiginDao dao;
        @Override
        public boolean login(String username, String password) {
            //实例化对象
            dao=new LoginDaoImpl();
            //合法性判断
            //如果用户名或密码是否合法
            //username.trim().equals("")为判断是否为空字符或存在空格
            if (username==null || password==null || username.trim().equals("")
            || password.trim().equals("")){
                return false;
            }
            //调用dao层进行数据匹配
            User user=dao.queryUserByNameAndPwd(username,password);
            //如果user不为空在代表匹配成功,则可以登录,否则不可以登录
            if (user!=null){
                return true;
            }
            return false;
        }
    }
    

    第五步LoginDaoImpl:匹配数据返回结果

    //连接数据库并返回查询结果
    public class LoginDaoImpl implements LiginDao {
        @Override
        public User queryUserByNameAndPwd(String username, String password) {
            //设置查询语句
            String sql="select * from user_info where uname=? and password=?;";
            //执行PstDao中的静态方法query方法来查询是否存在匹配数据
            ResultSet rs = PstDao.query(sql, username, password);
            //声明User类对象
            User user=null;
            try {
                //如果有匹配数据则将数据传入user对象中
                if (rs.next()){
                    user=new User();
                    user.setUsername(rs.getString("username"));
                    user.setPassword(rs.getString("password"));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            //并返回user
            return user;
        }
    }
    

    第六步PstDao:实现执行sql语句功能

    public class PstDao {
        private static String driver= Prop.getP("driver");//获取配置文件中driver对应数据
        private  static String url=Prop.getP("url");//获取配置文件中url连接地址数据
        private  static String user=Prop.getP("user");//获取配置文件中user用户名数据
        private  static  String pwd=Prop.getP("pwd");//获取配置文件中pwd密码数据
        //连接
        public static Connection getConn(){
            try {
            	//反射实现类driver
                Class.forName(driver);
                //完成连接功能并返回Connection类型对象
                return DriverManager.getConnection(url,user,pwd);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
    
        }
        //释放资源
        public static  void close(Connection conn, PreparedStatement pst, ResultSet res){
            if (conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (pst!=null){
                try {
                    pst.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (res!=null){
                try {
                    res.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        //查询方法
        public static ResultSet query(String sql,Object ...params){
            //连接数据库
            Connection conn = getConn();
            //创建执行sql语句对象
            PreparedStatement pst=null;
            //创建ResultSet对象用于接收查询到的数据
            ResultSet rst=null;
            try {
            	//载入sql语句
                pst = conn.prepareStatement(sql);
                for (int i = 0; i < params.length; i++) {
                	//匹配对应条件语句
                    pst.setObject(i+1,params[i]);
                }
                //执行语句并将查询结果传入ResultSet
                rst = pst.executeQuery();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return rst;
    
        }
        public  static  int update(String sql,Object... params){
            Connection conn = getConn();
            PreparedStatement pst=null;
            try {
                pst =conn.prepareStatement(sql);
                for (int i = 0; i < params.length; i++) {
                    pst.setObject(i+1,params[i]);
                }
                return pst.executeUpdate();//执行修改语句并返回被影响的数量
    
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return -1;//修改失败返回-1
        }}
    

    第七步Prop:实现获取配置文件信息功能

    public class Prop {
    	//实例化Properties类型对象
       private  static  Properties p=new Properties();
        public static String getP(String param){
            try {
            //读取指定位置的配置文件信息
                p.load(new FileInputStream("D:\\idea开发文件\\20200821-web\\resourse\\db.properties"));
            } catch (IOException e) {
                e.printStackTrace();
            }
            //返回需要的属性信息
            return p.getProperty(param);
        }
    }
    

    第八步:设置配置文件信息

        driver=com.mysql.jdbc.Driver
        //数据库的地址以及你想访问的库名
        url=jdbc:mysql://192.168.12.123:3306/userControl
        //数据库用户名
        user=root
        //数据库密码
        pwd=ok
    

    第九步:跳转新的页面html

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登录结果页面</title>
    </head>
    <body>
    <%
    //执行java代码,显示rst对应的字符串信息
        Object rst = request.getAttribute("rst");
    %>
    <h1><%=rst%></h1>
    </body>
    </html>
    
    

    到这里简易登录功能就可以实现了,快去试试把!

    展开全文
  • 主要介绍了Python使用selenium实现网页用户名 密码 验证码自动登录功能实现思路很简单,感兴趣的朋友跟随脚本之家小编一起学习吧
  • 主要介绍了Python实现的下载网页源码功能,涉及Python基于http请求与响应实现网页源码读取功能相关操作技巧,需要的朋友可以参考下
  • 主要介绍了Java实现的简单网页截屏功能,涉及java网页打开及屏幕截图功能相关操作技巧,需要的朋友可以参考下
  • 网页调用摄像头实现二维码扫描功能,很强大,,,网上搜的很多H5调用MUI的二维码扫描功能都用不了,不支持,。这个很强大,实现网页调用摄像头进行二维码扫描功能,帅!
  • Web网页实现登录验证码功能

    万次阅读 多人点赞 2018-03-27 14:10:47
    三部分内容1、在登录页面生成验证码图片2、点击图片更换新的验证码图片3、点击登录,判定输入验证码与实际验证码是否一致1、如何生成一个验证码图片,放置在登录页面?servlet:package com.zs.ssh.yzmServlet; ...

    三部分内容

    1、在登录页面生成验证码图片

    2、点击图片更换新的验证码图片

    3、点击登录,判定输入验证码与实际验证码是否一致


    1、如何生成一个验证码图片,放置在登录页面?

    servlet:

    package com.zs.ssh.yzmServlet;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.util.Random;
    
    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    /**
     * Servlet implementation class yzmServlet
     */
    @WebServlet("/yzmServlet")
    public class yzmServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public yzmServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		this.doPost(request, response);
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// 首先设置浏览器不缓存
    	    response.setHeader("cache-control", "no-cache");
    
    	    response.setHeader("Expire", "-1"); // >0为缓存
    
    	    response.setHeader("pragma", "no-cache");
    
    	    // 存储正确的验证码
    
    	    String vali_code = "";
    
    	    String Vali_str = "abcdefghijklmnopqrstuvwsyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
    	    Color[] colors =
    
    	        { Color.BLACK, Color.RED, Color.BLUE };
    
    	    // 1.创建图像
    
    	    int width = 110, height = 40;
    
    	    int x_offset = 5, y_offset = 28;
    
    	    BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
    
    	    // 2.创建画布
    
    	    Graphics2D g = img.createGraphics();
    
    	    // 3.为画布添加背景颜色为亮灰色
    
    	    g.setColor(Color.LIGHT_GRAY);
    
    	    g.fillRect(0, 0, width, height);//fillRect是包括矩形框内部
    
    	    // 4.为画布添加边框
    
    	    g.setColor(Color.BLUE);
    
    	    g.drawRect(0, 0, width - 1, height - 1);//drawRect是绘制矩形边框
    
    	    // 5.绘制干扰线
    
    	    for (int i = 0; i < 10; i++)
    	    {
    	        g.setColor(new Color(randNum(0, 255), randNum(0, 255), randNum(0, 255)));
    
    	        g.drawLine(randNum(0, width), randNum(0, height), randNum(0, width), randNum(0, height));
    
    	    }
    	    g.setFont(new Font("黑体", Font.BOLD, 20));
    	    for (int i = 0; i < 4; i++)
    	    {
    	        int r = randNum(-180, 180);
    
    	        String code = Vali_str.charAt(randNum(0, Vali_str.length() - 1)) + "";
    
    	        g.rotate(r / 180 * Math.PI);
    
    	        g.setColor(colors[randNum(0, colors.length)]);
    
    	        g.drawString(code, x_offset + i * 30, y_offset);
    
    	        g.rotate(-r / 180 * Math.PI);
    
    	        vali_code += code;
    
    	    }
    
    	    //将验证码的内容存储在HttpSession中
    
    	    HttpSession session = request.getSession();
    	    
    	    session.setAttribute("Valicode", vali_code);
    
    	    // 通过response的输出流打给浏览器
    
    	    ImageIO.write(img, "jpg", response.getOutputStream());
    	}
    	private Random random = new Random();
    
    	//随机生成begin和end之间的一个int值
    
    	private int randNum(int begin, int end)
    
    	{
    
    	    return random.nextInt(end - begin) + begin;
    
    	}
    }
    
    html页面:
    <input type="text" placeholder="用户名" /><!-- 用户名 -->
    <input type="password"  id="password"/><!-- 密码 -->
    <img src="/ZXTM/yzmServlet" οnclick="changeValiImage(this)" /><!-- 验证码图片 -->
    <input type="text" placeholder="输入验证码" name="ValiImage" /><!-- 输入验证码文本 -->
    <button οnclick="doLogin()" >登录</button>

    2、如何切换验证图片?

    <!-- 验证码图片点击切换 -->
    <!-- 通过Date来改变每次访问的url不同 -->
    <script type="text/javascript">
        function changeValiImage(img){
    	img.src = "/ZXTM/yzmServlet?time=" + new Date().getTime();
        }
    </script>

    2、如何判定验证码的一致性?

    在  doLogin() 登录的方法里面:

    获取网页文本信息

    再获取getSession().getAttribute("Valicode")里面保存的生成的验证码信息

    String vali_user = getRequest().getParameter("ValiImage");
    String vali_sys =  getSession().getAttribute("Valicode").toString();




    展开全文
  • js实现网页计算器功能是一款简洁实用,带有时间功能网页计算器特效代码。
  • 主要为大家详细介绍了js实现网页定位导航功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 借助Jquery Jqprint实现网页打印功能.zip欢迎下载
  • 主要介绍了JS实现基本的网页计算器功能,涉及JavaScript事件响应及数值运算相关操作技巧,需要的朋友可以参考下
  • JavaScript简单实现网页回到顶部功能,大家可以参考一下
  • asp.net 实现网页软键盘功能,asp.net源码,实现网页软键盘

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 515,881
精华内容 206,352
关键字:

网页登录功能实现