【Layui】入门必看:登录注册界面搭建与功能开发解析

简介: Layui是一款面向前端开发者的轻量级JavaScript库,旨在简化网页开发过程。它提供了丰富的基础UI组件和常用的工具函数,使开发者可以更快速地构建出优秀的网页界面。Layui具备以下特点和功能:简洁易用:Layui的设计理念是简洁而易用,它提供了直观的API和简单的配置,使开发者可以更快速地上手并快速构建界面。模块化加载:Layui采用模块化的加载方式,每个功能都是以独立的模块形式存在,开发者可以根据自己的需求按需加载所需的模块,避免了不必要的资源浪费。基础UI组件。


Layui介绍

Layui是一款面向前端开发者的轻量级JavaScript库,旨在简化网页开发过程。它提供了丰富的基础UI组件和常用的工具函数,使开发者可以更快速地构建出优秀的网页界面。

Layui具备以下特点和功能:

    1. 简洁易用:Layui的设计理念是简洁而易用,它提供了直观的API和简单的配置,使开发者可以更快速地上手并快速构建界面。
    2. 模块化加载:Layui采用模块化的加载方式,每个功能都是以独立的模块形式存在,开发者可以根据自己的需求按需加载所需的模块,避免了不必要的资源浪费。
    3. 基础UI组件:Layui提供了丰富的基础UI组件,如按钮、表单、导航、选项卡、弹层等,这些组件已经封装好了常用的功能和特性,开发者只需要简单配置即可使用。
    4. 插件扩展:Layui支持插件扩展,开发者可以通过引入扩展插件来增加更多的功能和效果,如日期选择器、分页、弹窗等。
    5. 兼容性强:Layui兼容大部分现代浏览器,并且对移动端适配也较为友好,可以在不同平台上良好地展现页面效果。

    总体而言,Layui是一款功能强大、轻量级、易用的前端开发库,适用于各种规模的项目,帮助开发者快速实现出美观、高效的网页界面。

    什么是Layui?

    layui(谐音:类 UI) 是一套开源的 Web UI 解决方案,采用自身经典的模块化规范,并遵循原生 HTML/CSS/JS 的开发方式,极易上手,拿来即用。其风格简约轻盈,而组件优雅丰盈,从源代码到使用方法的每一处细节都经过精心雕琢,非常适合网页界面的快速开发。layui 区别于那些基于    MVVM 底层的前端框架,却并非逆道而行,而是信奉返璞归真之道。准确地说,它更多是面向后端开发者,你无需涉足前端各种工具,只需面对浏览器本身,让一切你所需要的元素与交互,从这里信手拈来。


    由国人开发(作者贤心),16年出厂的框架,其主要提供了很多好看、方便的样式,并且基本拿来即用,和Bootstrap有些相似,但该框架有个极大的好处就是定义了很多前后端交互的样式接口,如分页表格,只需在前端配置好接口,后端则按照定义好的接口规则返回数据,即可完成页面的展示,极大减少了后端人员的开发成本。

    Layui入门

    1. 下载Layui:首先,你需要从Layui官网(https://www.layui.com/)下载Layui的压缩包,解压后可以得到相关的文件。

           Layui的官网进不去了我这里提供镜像网站

    http://layui.org.cn/demo/index.html

    https://layui.org.cn/docs/docs.html

    https://www.layuiweb.com/doc/index.htm

    2. 引入Layui:在你的HTML文件中,使用<link>标签引入Layui的CSS文件和<script>标签引入Layui的JavaScript文件。例如:

    <!-- 引入 layui.css -->
       <link rel="stylesheet" href="xxx/layui.css">
       <!-- 引入 layui.js -->
       <script src="xxx/layui.js"></script>

    image.gif

    3. 使用Layui组件:Layui提供了一系列的UI组件,你可以根据自己的需求使用这些组件。例如,如果你想使用一个按钮组件,可以在HTML中添加如下代码:

     

    <button class="layui-btn">按钮</button>

    image.gif

    4. 初始化Layui:在你的JavaScript代码中,加入初始化Layui的语句,以确保Layui工作正常。例如:

     

    layui.use(['layer', 'form'], function(){
      var layer = layui.layer //加载layer模块
      ,form = layui.form; //加载form模块
      // 这里可以写一些其他的代码或事件监听
      layer.msg('Hello World');
    });

    image.gif

    image.gif编辑

    5. 进一步学习:以上是一个简单的Layui入门示例,但Layui还提供了更多功能和组件,比如表格、弹层、分页等。你可以通过查看Layui官方文档,了解更多关于每个组件的使用方法,并根据自己的需求深入学习和应用。

    值得注意的是,Layui是一个相对简单易用的前端框架,但为了更好地使用它,你可能需要对HTML、CSS和JavaScript有一定的基础知识。如果你对前端开发不太熟悉,建议先学习相关的基础知识,再进一步使用Layui。

    Layui登录实例

    导入jar

    在我们的项目里面导入需要的jar包

    image.gif编辑

    配置

    配置mvc.xml文件

    image.gif编辑

     

    <?xml version="1.0" encoding="UTF-8"?>
    <config>
      <action path="/blog" type="com.zking.web.BlogAction">
        <forward name="list" path="/blogList.jsp" redirect="false" />
        <forward name="toList" path="/blog.action?methodName=list"
          redirect="true" />
        <forward name="toEdit" path="/blogEdit.jsp" redirect="false" />
      </action>
      <action path="/user" type="com.zking.web.UserAction">
      </action>
    </config>
    image.gif

    导入Layui

    我们把我们下载的Layui放在一个静态的文件夹里面

    image.gif编辑

    编写公共jsp

    编写公共的header.jsp文件


    image.gif编辑

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>header</title>
    <!-- 引入 layui.css -->
    <link rel="stylesheet" href="${pageContext.request.contextPath }/static/layui/css/layui.css">
    <!-- 引入 layui.js -->
    <script src="${pageContext.request.contextPath }/static/layui/layui.js"></script>
    </head>
    </html>
    image.gif

    编写代码

    我们依次编写实体类===》dao方法===》Action===》login.jsp


    image.gif编辑

    实体类

     

    package com.zking.entity;
    /**
     * 
     * @author tgq
     *
     */
    public class User {
      private long id;
      private String name;
      private String loginname;
      private String pwd;
      private long rid;
      public User() {
        // TODO Auto-generated constructor stub
      }
      public long getId() {
        return id;
      }
      public void setId(long id) {
        this.id = id;
      }
      public String getName() {
        return name;
      }
      public void setName(String name) {
        this.name = name;
      }
      public String getLoginname() {
        return loginname;
      }
      public void setLoginname(String loginname) {
        this.loginname = loginname;
      }
      public String getPwd() {
        return pwd;
      }
      public void setPwd(String pwd) {
        this.pwd = pwd;
      }
      public long getRid() {
        return rid;
      }
      public void setRid(long rid) {
        this.rid = rid;
      }
      public User(long id, String name, String loginname, String pwd, long rid) {
        super();
        this.id = id;
        this.name = name;
        this.loginname = loginname;
        this.pwd = pwd;
        this.rid = rid;
      }
      @Override
      public String toString() {
        return "User [id=" + id + ", name=" + name + ", loginname=" + loginname + ", pwd=" + pwd + ", rid=" + rid + "]";
      }
    }
    image.gif

    UserDao方法

    package com.zking.dao;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.List;
    import com.zking.entity.User;
    import com.zking.util.BaseDao;
    import com.zking.util.DBAccess;
    import com.zking.util.PageBean;
    /**
     * 用户dao方法
     * 
     * @author tgq
     *
     */
    public class UserDao extends BaseDao<User> {
      /**
       * 查询所有用户
       * 
       * @param user
       * @param pageBean
       * @return
       * @throws Exception
       */
      public List<User> list(User user, PageBean pageBean) throws Exception {
        String sql = "select * from t_oa_user where 1=1";
        return super.executeQuery(sql, User.class, pageBean);
      }
      /**
       * 获取实体类
       * 
       * @param user
       * @return
       * @throws Exception
       */
      public User login(User user) throws Exception {
        String sql = "select * from t_oa_user where loginname = '" + user.getLoginname() + "' and pwd = '"
            + user.getPwd() + "'";
        List<User> list = super.executeQuery(sql, User.class, null);
        if (list != null && list.size() == 1) {
          return list.get(0);
        }
        return null;
      }
    }
    image.gif

    编写Action

     

    package com.zking.web;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.zking.dao.UserDao;
    import com.zking.entity.User;
    import com.zking.framework.ActionSupport;
    import com.zking.framework.ModelDriver;
    import com.zking.util.ResponseUtil;
    public class UserAction extends ActionSupport implements ModelDriver<User> {
      private User user = new User();
      private UserDao userDao = new UserDao();
      public String login(HttpServletRequest req, HttpServletResponse resp) throws Exception {
        User u = userDao.login(user);
        ResponseUtil.writeJson(resp, u);
        return super.execute(req, resp);
      }
      @Override
      public User getModel() {
        return user;
      }
    }
    image.gif

    login.jsp

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
    <html>
    <head>
    <title>login</title>
    <link rel="stylesheet" href="static/css/iconfont.css">
    <link rel="stylesheet" href="static/css/login.css">
    <%@include file="/common/header.jsp"%>
    <style>
    body {
      color: #;
    }
    a {
      color: #;
    }
    a:hover {
      color: #;
    }
    .bg-black {
      background-color: #;
    }
    .tx-login-bg {
      background: url(static/images/bg.jpg) no-repeat 0 0;
    }
    </style>
    <script type="text/javascript">
      layui.use([ 'jquery', 'layer' ],function() {
                let $ = layui.jquery;
                let layer = layui.layer;
                $("#login").click(function() {
                  $.ajax({
                                url : '${pageContext.request.contextPath }/userAction.action?methodName=login',
                                data : {
                                  loginname :$("#username").val(),
                                  pwd : $("#password").val()
                                },
                                method : 'post',
                                dataType : 'json',
                                success : function(resp) {
                                  layer.alert(resp,{icon : 1});
                                  if (resp.code == 1) {
                                    layer.alert('登录成功',{icon : 1});
                                  } else {
                                    layer.alert('失败了',{icon: 5});
                                  }
                                }
                              })
                        })
              });
    </script>
    </head>
    <body class="tx-login-bg">
      <div class="tx-login-box">
        <div class="login-avatar bg-black">
          <i class="iconfont icon-wode"></i>
        </div>
        <ul class="tx-form-li row">
          <li class="col-24 col-m-24"><p>
              <input type="text" id="username" placeholder="登录账号"
                class="tx-input">
            </p></li>
          <li class="col-24 col-m-24"><p>
              <input type="password" id="password" placeholder="登录密码"
                class="tx-input">
            </p></li>
          <li class="col-24 col-m-24"><p class="tx-input-full">
              <button id="login" class="tx-btn tx-btn-big bg-black">登录</button>
            </p></li>
          <li class="col-12 col-m-12"><p>
              <a href="#" class="f-12 f-gray">新用户注册</a>
            </p></li>
          <li class="col-12 col-m-12"><p class="ta-r">
              <a href="#" class="f-12 f-gray">忘记密码</a>
            </p></li>
        </ul>
      </div>
    </body>
    </html>
    image.gif

    image.gif编辑

     

    Layui注册实例

    代码实例

    根据以上的步骤,我们只需要添加一些方法就行

    Dao方法===》UserAction

    Dao方法

    package com.zking.dao;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.List;
    import com.zking.entity.User;
    import com.zking.util.BaseDao;
    import com.zking.util.DBAccess;
    import com.zking.util.PageBean;
    /**
     * 用户dao方法
     * 
     * @author tgq
     *
     */
    public class UserDao extends BaseDao<User> {
      /**
       * 查询所有用户
       * 
       * @param user
       * @param pageBean
       * @return
       * @throws Exception
       */
      public List<User> list(User user, PageBean pageBean) throws Exception {
        String sql = "select * from t_oa_user where 1=1";
        return super.executeQuery(sql, User.class, pageBean);
      }
      /**
       * 获取实体类
       * 
       * @param user
       * @return
       * @throws Exception
       */
      public User login(User user) throws Exception {
        String sql = "select * from t_oa_user where loginname = '" + user.getLoginname() + "' and pwd = '"
            + user.getPwd() + "'";
        List<User> list = super.executeQuery(sql, User.class, null);
        if (list != null && list.size() == 1) {
          return list.get(0);
        }
        return null;
      }
      /**
       * 获取最大id
       */
      public int getMaxId() throws Exception {
        // 创建连接
        Connection conn = DBAccess.getConnection();
        int id = 0;
        String sql = "select MAX(id) from t_oa_user";
        PreparedStatement ps = conn.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
          id = rs.getInt("max_id");
        }
        return id;
      }
      /**
       * 注册的方法
       */
      public int register(User user) throws Exception {
        // 创建连接
        Connection conn = DBAccess.getConnection();
        String sql = "insert into t_oa_user values(" + user.getId() + "," + user.getName() + "," + user.getLoginname()
            + "," + user.getPwd() + "," + user.getRid() + ")";
        PreparedStatement ps = conn.prepareStatement(sql);
        int n = ps.executeUpdate();
        return n;
      }
    }
    image.gif

    UserAction

     

    package com.zking.web;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.zking.dao.UserDao;
    import com.zking.entity.User;
    import com.zking.framework.ActionSupport;
    import com.zking.framework.ModelDriver;
    import com.zking.util.ResponseUtil;
    public class UserAction extends ActionSupport implements ModelDriver<User> {
      private User user = new User();
      private UserDao userDao = new UserDao();
      /**
       * 登录
       * 
       * @param req
       * @param resp
       * @return
       * @throws Exception
       */
      public String login(HttpServletRequest req, HttpServletResponse resp) throws Exception {
        User u = userDao.login(user);
        ResponseUtil.writeJson(resp, u);
        return super.execute(req, resp);
      }
      /**
       * 注册
       * 
       * @param req
       * @param reps
       */
      public void Register(HttpServletRequest req, HttpServletResponse reps) {
        try {
          // 先获取最大的id数
          int maxId = userDao.getMaxId();
          user = new User(maxId, req.getParameter("name"), req.getParameter("name"), req.getParameter("name"),
              Integer.parseInt(req.getParameter("name")));
          int register = userDao.register(user);
          ResponseUtil.writeJson(reps, user);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
      @Override
      public User getModel() {
        return user;
      }
    }
    image.gif

    Register.jsp


     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
    <html>
    <title>注册</title>
    <link rel="stylesheet" href="static/css/iconfont.css">
    <link rel="stylesheet" href="static/css/login.css">
    <head>
    <%@include file="common/header.jsp"%>
    <style>
    body {
      color: #;
    }
    a {
      color: #;
    }
    a:hover {
      color: #;
    }
    .bg-black {
      background-color: #;
    }
    .tx-login-bg {
      background: url(static/images/bg.jpg) no-repeat 0 0;
    }
    </style>
    <script type="text/javascript">
      layui.use([ 'jquery', 'layer' ], function() {
        let $ = layui.jquery;
        let layer = layui.layer;
        $("#register").click(function() {
          $.ajax({
            url : "${pageContext.request.contextPath }/UserAction.action?methodName=register",
            data : {
              name : $("#username").val(),
              loginname : $("#loginname").val(),
              pwd : $("#password").val(),
              rid : $("#rid").val()
            },
            type : 'post',
            dataType : 'json',
            success : function(data) {
              if (resp.code == 1) {
                layer.alert('注册成功', {
                  icon : 1
                });
              } else {
                layer.alert('注册失败', {
                  icon : 5
                });
              }
            }
          })
        })
      });
    </script>
    </head>
    <body class="tx-login-bg">
      <div class="tx-login-box">
        <div class="login-avatar bg-black">
          <i class="iconfont icon-wode"></i>
        </div>
        <ul class="tx-form-li row">
          <li class="col-24 col-m-24"><p>
              <input type="text" id="username" placeholder="请输入姓名"
                class="tx-input">
            </p></li>
          <li class="col-24 col-m-24"><p>
              <input type="text" id="loginname" placeholder="请输入登录名"
                class="tx-input">
            </p></li>
          <li class="col-24 col-m-24"><p>
              <input type="password" id="password" placeholder="请输入密码"
                class="tx-input">
            </p></li>
          <li class="col-24 col-m-24"><p>
              <input type="text" id="rid" placeholder="请输入身份id" class="tx-input">
            </p></li>
          <li class="col-24 col-m-24"><p class="tx-input-full">
              <button id="register" class="tx-btn tx-btn-big bg-black">注册</button>
            </p></li>
          <li class="col-12 col-m-12"><p>
              <a href="#" class="f-12 f-gray">返回登录</a>
            </p></li>
        </ul>
      </div>
    </body>
    </html>
    image.gif

    image.gif编辑

     


    相关文章
    |
    7月前
    |
    监控
    新功能上线:云解析DNS-重点域名监控功能发布
    新功能上线:云解析DNS-重点域名监控功能发布
    |
    弹性计算 运维 安全
    优化管理与服务:操作系统控制平台的订阅功能解析
    本文介绍了如何通过操作系统控制平台提升系统效率,优化资源利用。首先,通过阿里云官方平台开通服务并安装SysOM组件,体验操作系统控制平台的功能。接着,详细讲解了订阅管理功能,包括创建订阅、查看和管理ECS实例的私有YUM仓库权限。订阅私有YUM仓库能够集中管理软件包版本、提升安全性,并提供灵活的配置选项。最后总结指出,使用阿里云的订阅和私有YUM仓库功能,可以提高系统可靠性和运维效率,确保业务顺畅运行。
    |
    存储 前端开发 JavaScript
    调用DeepSeek API增强版纯前端实现方案,支持文件上传和内容解析功能
    本方案基于DeepSeek API增强版,提供纯前端实现的文件上传与内容解析功能。通过HTML和JavaScript,用户可选择文件并调用API完成上传及解析操作。方案支持多种文件格式(如PDF、TXT、DOCX),具备简化架构、提高响应速度和增强安全性等优势。示例代码展示了文件上传、内容解析及结果展示的完整流程,适合快速构建高效Web应用。开发者可根据需求扩展功能,满足多样化场景要求。
    3809 64
    |
    人工智能 API 开发者
    HarmonyOS Next~鸿蒙应用框架开发实战:Ability Kit与Accessibility Kit深度解析
    本书深入解析HarmonyOS应用框架开发,聚焦Ability Kit与Accessibility Kit两大核心组件。Ability Kit通过FA/PA双引擎架构实现跨设备协同,支持分布式能力开发;Accessibility Kit提供无障碍服务构建方案,优化用户体验。内容涵盖设计理念、实践案例、调试优化及未来演进方向,助力开发者打造高效、包容的分布式应用,体现HarmonyOS生态价值。
    836 27
    |
    存储 人工智能 API
    离线VS强制登录?Apipost与Apifox的API工具理念差异深度解析
    在代码开发中,工具是助手还是枷锁?本文通过对比Apipost和Apifox在断网环境下的表现,探讨API工具的选择对开发自由度的影响。Apifox强制登录限制了离线使用,而Apipost支持游客模式与本地存储,尊重开发者数据主权。文章从登录策略、离线能力、协作模式等方面深入分析,揭示工具背后的设计理念与行业趋势,帮助开发者明智选择,掌握数据控制权并提升工作效率。
    1095 19
    |
    供应链 监控 搜索推荐
    反向海淘代购独立站:功能解析与搭建指南
    “反向海淘”指海外消费者购买中国商品的现象,体现了中国制造的创新与强大。国产商品凭借高性价比和丰富功能,在全球市场备受欢迎。跨境电商平台的兴起为“反向海淘”提供了桥梁,而独立站因其自主权和品牌溢价能力逐渐成为趋势。一个成功的反向海淘代购独立站需具备多语言支持、多币种支付、物流跟踪、商品展示、购物车管理等功能,并通过SEO优化、社交媒体营销等手段提升运营效果。这不仅助力中国企业开拓海外市场,还推动了品牌全球化进程。
    404 19
    |
    SQL 运维 监控
    高效定位 Go 应用问题:Go 可观测性功能深度解析
    为进一步赋能用户在复杂场景下快速定位与解决问题,我们结合近期发布的一系列全新功能,精心梳理了一套从接入到问题发现、再到问题排查与精准定位的最佳实践指南。
    |
    Web App开发 移动开发 前端开发
    React音频播放器样式自定义全解析:从入门到避坑指南
    在React中使用HTML5原生&lt;audio&gt;标签时,开发者常面临视觉一致性缺失、样式定制局限和交互体验割裂等问题。通过隐藏原生控件并构建自定义UI层,可以实现完全可控的播放器视觉风格,避免状态不同步等典型问题。结合事件监听、进度条拖拽、浏览器兼容性处理及性能优化技巧,可构建高性能、可维护的音频组件,满足跨平台需求。建议优先使用成熟音频库(如react-player),仅在深度定制需求时采用原生方案。
    582 12
    |
    人工智能 小程序 前端开发
    【一步步开发AI运动小程序】十九、运动识别中如何解析RGBA帧图片?
    本文介绍了如何将相机抽取的RGBA帧图像解析为`.jpg`或`.png`格式,适用于体测、赛事等场景。首先讲解了RGBA图像结构,其为一维数组,每四个元素表示一个像素的颜色与透明度值。接着通过`uni.createOffscreenCanvas()`创建离屏画布以减少绘制干扰,并提供代码实现,将RGBA数据逐像素绘制到画布上生成图片。最后说明了为何不直接使用拍照API及图像转换的调用频率建议,强调应先暂存帧数据,运动结束后再进行转换和上传,以优化性能。

    推荐镜像

    更多
  1. DNS