当前位置: 首页 > news >正文

16、JavaEE核心技术-EL与 JSTL

EL与 JSTL 实践


一. EL(Expression Language)

EL(表达式语言)是 JSP 2.0 中引入的一种简单的脚本语言,用于在 JSP 页面中简化数据的访问和显示。它通过一种类似于 JavaScript 的语法,允许开发者在 JSP 页面中直接访问 JavaBean 的属性、集合、甚至是 Java 类的静态字段和方法。


1、 EL 的基本语法

EL 表达式的语法格式为 ${},例如:

${requestScope.userName}  
2、 EL 的变量

EL 变量是自动创建的,您无需显式声明。以下是一些常见的变量:

  1. 隐式变量

    • pageScope:当前页面的作用域。
    • requestScope:请求作用域。
    • sessionScope:会话作用域。
    • applicationScope:应用作用域。
  2. 用户定义变量
    使用 JSTL 的 <c:set> 标签可以自定义变量,例如:

    <c:set var="title" value="EL 示例" scope="page"/>  
    ${title}  
    

3、EL 的操作符

EL 支持多种操作符,包括:

  • 算术操作符+, -, *, /, %, div, mul
  • 比较操作符==, eq, !=, neq, >, gt, <, lt
  • 逻辑操作符&&, and, ||, or, not, !
  • 空检查操作符empty(检查对象是否为空)。

示例

${10 + 5}  <!-- 算术操作 -->  
${user.age > 18}  <!-- 比较操作 -->  
${!empty user.name}  <!-- 空检查 -->  

4、EL 的使用场景
  1. 访问 JavaBean 的属性

    <jsp:useBean id="user" class="com.example.User" scope="request"/>  
    用户名称:${user.name}  
    
  2. 遍历集合

    <c:forEach items="${users}" var="user">  ${user.name}  
    </c:forEach>  
    
  3. 条件判断

    <c:if test="${user.age > 18}">  成人用户  
    </c:if>  
    
  4. 格式化输出

    <fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd"/>  
    

二. JSTL(JavaServer Pages Standard Tag Library)

JSTL 是 Java 社区为了简化 JSP 页面开发而推出的一组标准标签库。它提供了多种功能标签,涵盖了常见的 Web 开发需求。


1、 JSTL 的核心标签库

JSTL 分为四个主要模块:

  1. 核心标签库:用于流程控制、集合操作、数据处理等。
  2. 格式化标签库:用于日期、时间、数字等格式化。
  3. 数据库标签库:用于简化 JDBC 操作。
  4. XML 标签库:用于 XML 数据的处理。
核心标签库(core)

以下是核心标签库中常用的标签:

  1. <c:out>
    用于输出数据,支持 HTML 转义。

    <c:out value="${user.name}" default="未知"/>  
    
  2. <c:forEach>
    用于遍历集合或数组。

    <c:forEach items="${users}" var="user" varStatus="status">  ${status.index}: ${user.name}  
    </c:forEach>  
    
  3. <c:forTokens>
    用于遍历字符串标记。

    <c:forTokens items="a,b,c" delims=",">  ${token}  
    </c:forTokens>  
    
  4. <c:if>
    用于条件判断。

    <c:if test="${user.age > 18}">  成人用户  
    </c:if>  
    
  5. <c:choose>
    用于多分支条件判断。

    <c:choose>  <c:when test="${user.age > 18}">成人用户</c:when>  <c:otherwise>未成年用户</c:otherwise>  
    </c:choose>  
    
  6. <c:set>
    用于设置变量。

    <c:set var="title" value="JSTL 示例" scope="page"/>  
    ${title}  
    
  7. <c:remove>
    用于删除变量。

    <c:remove var="title" scope="page"/>  
    
  8. <c:import>
    用于导入其他资源(如 HTML 文件、JSP 页面)。

    <c:import url="http://example.com/header.html"/>  
    
  9. <c:param>
    用于在导入资源时传递参数。

    <c:import url="detail.jsp">  <c:param name="id" value="123"/>  
    </c:import>  
    
  10. <c:redirect>
    用于页面跳转。

    <c:redirect url="/login.jsp"/>  
    

格式化标签库(fmt)
  1. fmt:setLocale
    设置Locale。

    <fmt:setLocale value="zh_CN"/>  
    
  2. fmt:bundle
    加载资源文件。

    <fmt:bundle basename="messages">  <fmt:message key="welcome.message"/>  
    </fmt:bundle>  
    
  3. fmt:formatDate
    格式化日期。

    <fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd"/>  
    
  4. fmt:formatNumber
    格式化数字。

    <fmt:formatNumber value="12345.678" pattern="#,###.##"/>  
    

数据库标签库(sql)
  1. sql:setDataSource
    设置数据源。

    <sql:setDataSource var="dataSource"   driver="com.mysql.cj.jdbc.Driver"   url="jdbc:mysql://localhost:3306/testdb"  user="root"   password="password"/>  
    
  2. sql:query
    执行查询。

    <sql:query dataSource="${dataSource}" sql="SELECT * FROM users">  ${users}  
    </sql:query>  
    
  3. sql:update
    执行更新(插入、删除、修改)。

    <sql:update dataSource="${dataSource}" sql="INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')"/>  
    

2、 JSTL 的使用场景
  1. 简化流程控制

    <c:forEach items="${users}" var="user">  <p>用户 ${user.name}</p>  
    </c:forEach>  
    
  2. 格式化数据

    <fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd"/>  
    
  3. 数据库操作

    <sql:query var="users" sql="SELECT * FROM users">  <c:forEach items="${users.rows}" var="user">  ${user.name}  </c:forEach>  
    </sql:query>  
    
  4. 国际化

    <fmt:setLocale value="${param.locale}"/>  
    <fmt:bundle basename="messages">  <h1><fmt:message key="welcome.message"/></h1>  
    </fmt:bundle>  
    

三. 实践:数据显示与分页

以下是一个完整的实践示例,展示如何使用 EL 和 JSTL 实现数据显示与分页功能。


1、 准备工作
  1. 创建数据库表

    CREATE TABLE users (  id INT AUTO_INCREMENT PRIMARY KEY,  name VARCHAR(50),  email VARCHAR(100)  
    );  
    
  2. 添加测试数据

    INSERT INTO users (name, email) VALUES  ('John Doe', 'john@example.com'),  ('Jane Smith', 'jane@example.com'),  ('Bob Johnson', 'bob@example.com');  
    
  3. 添加依赖
    pom.xml 中添加 JSTL 和 MySQL Connector/J 的依赖:

    <dependency>  <groupId>jstl</groupId>  <artifactId>jstl</artifactId>  <version>1.2</version>  
    </dependency>  
    <dependency>  <groupId>mysql</groupId>  <artifactId>mysql-connector-java</artifactId>  <version>8.0.33</version>  
    </dependency>  
    

2、 JSP 页面实现

以下是一个完整的 JSP 页面示例,展示数据显示和分页功能。

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8" import="java.util.*" %>  
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>  
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>  <html>  
<head>  <title>用户管理 - 数据显示与分页</title>  
</head>  
<body>  <h1>用户管理系统</h1>  <%  // 定义每页显示的记录数  int pageSize = 5;  // 获取当前页码(默认为第 1 页)  int currentPage = 1;  if (request.getParameter("currentPage") != null) {  currentPage = Integer.parseInt(request.getParameter("currentPage"));  }  // 总记录数  int totalRecords = 0;  // 计算总记录数  try {  Class.forName("com.mysql.cj.jdbc.Driver");  Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", "password");  Statement stmt = conn.createStatement();  ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM users");  if (rs.next()) {  totalRecords = rs.getInt(1);  }  rs.close();  stmt.close();  conn.close();  } catch (SQLException e) {  e.printStackTrace();  }  %>  <c:set var="pageSize" value="<%=pageSize%>"/>  <c:set var="currentPage" value="<%=currentPage%>"/>  <c:set var="totalRecords" value="<%=totalRecords%>"/>  <c:if test="${totalRecords > 0}">  <sql:setDataSource var="dataSource"  driver="com.mysql.cj.jdbc.Driver"  url="jdbc:mysql://localhost:3306/testdb"  user="root"  password="password"/>  <sql:query dataSource="${dataSource}" sql="SELECT * FROM users LIMIT ${currentPage-1}, ${pageSize}" var="users"/>  <div>  <h2>用户列表(第 ${currentPage} 页 / 共 ${totalRecords} 条记录)</h2>  <table border="1">  <tr>  <th>序号</th>  <th>用户姓名</th>  <th>用户邮箱</th>  </tr>  <c:forEach items="${users.rows}" var="user" varStatus="status">  <tr>  <td>${status.index + 1}</td>  <td>${user.name}</td>  <td>${user.email}</td>  </tr>  </c:forEach>  </table>  </div>  <!-- 分页导航 -->  <div style="margin-top: 20px;">  <c:if test="${currentPage > 1}">  <a href="?currentPage=${currentPage-1}">上一页</a>  </c:if>  <c:forEach begin="1" end="${totalRecords / pageSize + 1}" var="page">  <c:choose>  <c:when test="${page == currentPage}">  <span style="color: red;">${page}</span>  </c:when>  <c:otherwise>  <a href="?currentPage=${page}">${page}</a>  </c:otherwise>  </c:choose>  </c:forEach>  <c:if test="${currentPage < totalRecords / pageSize + 1}">  <a href="?currentPage=${currentPage+1}">下一页</a>  </c:if>  </div>  </c:if>  </body>  
</html>  

3、 功能说明
  1. 数据显示
    • 使用 <sql:query> 标签执行 SQL 查询,获取用户数据。
    • 使用 <c:forEach> 标签遍历结果集,显示用户信息。
  2. 分页功能
    • 计算总记录数和每页显示的记录数。
    • 使用 <c:forEach> 标签生成分页导航链接。
    • 通过 currentPage 参数控制当前显示的页码。
  3. EL 的使用
    • 使用 EL 表达式 ${} 来访问变量和显示数据。
    • 支持复杂的逻辑操作和格式化输出。

四. 总结

通过本讲义,您已经掌握了 EL 和 JSTL 的核心功能及其在实际开发中的应用。EL 和 JSTL 的优势在于:

  1. 简化代码:通过标签代替 Java 脚本,降低代码复杂度。
  2. 提高可维护性:将逻辑和展示分离,使代码更易维护。
  3. 跨平台支持:支持多种数据源和数据库。

相关文章:

16、JavaEE核心技术-EL与 JSTL

EL与 JSTL 实践 一. EL&#xff08;Expression Language&#xff09; EL&#xff08;表达式语言&#xff09;是 JSP 2.0 中引入的一种简单的脚本语言&#xff0c;用于在 JSP 页面中简化数据的访问和显示。它通过一种类似于 JavaScript 的语法&#xff0c;允许开发者在 JSP 页面…...

RabbitMQ报错:Shutdown Signal channel error; protocol method

报错信息&#xff1a; Shutdown Signal: channel error; protocol method: #method<channel.close>(reply-code406, reply-textPRECONDITION_FAILED - unknown delivery tag 1, class-id60, method-id80) 原因 默认情况下 RabbitMQ 是自动ACK&#xff08;确认签收&…...

使用DeepSeek完成一个简单嵌入式开发

开启DeepSeek对话 请帮我使用Altium Designer设计原理图、PCB&#xff0c;使用keil完成代码编写&#xff1b;要求&#xff1a;使用stm32F103RCT6为主控芯片&#xff0c;控制3个流水灯的原理图 这里需要注意&#xff0c;每次DeepSeek的回答都不太一样。 DeepSeek回答 以下是使…...

NLP技术介绍

NLP技术介绍 语言分析技术分词词性标注命令实体识别句法分析语义分析文本处理技术文本分类文本聚类情感分析文本生成机器翻译对话系统与交互技术聊天机器人问答系统语音识别与合成知识图谱与语义理解技术知识图谱语义搜索语义推理深度学习与预训练模型循环神经网络(RNN)及其变…...

pycharm + anaconda + yolo11(ultralytics) 的视频流实时检测,保存推流简单实现

目录 背景pycharm安装配置代码实现创建本地视频配置 和 推流配置视频帧的处理和检测框绘制主要流程遇到的一些问题 背景 首先这个基于完整安装配置了anaconda和yolo11的环境&#xff0c;如果需要配置开始的话&#xff0c;先看下专栏里另一个文章。 这次的目的是实现拉取视频流…...

C++编译问题——1模板函数的实现必须在头文件中

今天编译数据结构时&#xff0c;遇见一个编译错误 假设你有一个头文件 SeqList.h 和一个源文件 SeqList.cpp。 SeqList.h #ifndef SEQLIST_H #define SEQLIST_H#include <stdexcept> #include <iostream>template<typename T> class SeqList { private:sta…...

深度学习PyTorch之数据加载DataLoader

深度学习pytorch之简单方法自定义9类卷积即插即用 文章目录 数据加载基础架构1、Dataset类详解2、DataLoader核心参数解析3、数据增强 数据加载基础架构 核心类关系图 torch.utils.data ├── Dataset (抽象基类) ├── DataLoader (数据加载器) ├── Sampler (采样策略)…...

使用Beanshell前置处理器对Jmeter的请求body进行加密

这里我们用HmacSHA256来进行加密举例&#xff1a; 步骤&#xff1a; 1.先获取请求参数并对请求参数进行处理&#xff08;处理成String类型&#xff09; //处理请求参数的两种方法&#xff1a; //方法一&#xff1a; //获取请求 Arguments args sampler.getArguments(); //转…...

前端面试:如何减少项目里面 if-else?

在前端开发中&#xff0c;大量使用 if-else 结构可能导致代码调试困难、可读性降低和冗长的逻辑。不妨考虑以下多种策略来减少项目中的 if-else 语句&#xff0c;提高代码的可维护性和可读性&#xff1a; 1. 使用对象字面量替代 用对象字面量来替代 if-else 语句&#xff0c;…...

05.基于 TCP 的远程计算器:从协议设计到高并发实现

&#x1f4d6; 目录 &#x1f4cc; 前言&#x1f50d; 需求分析 &#x1f914; 我们需要解决哪些问题&#xff1f; &#x1f3af; 方案设计 &#x1f4a1; 服务器架构 &#x1f680; 什么是协议&#xff1f;为什么要设计协议&#xff1f; &#x1f4cc; 结构化数据的传输问题 …...

Matlab:矩阵运算篇——矩阵数学运算

目录 1.矩阵的加法运算 实例——验证加法法则 实例——矩阵求和 实例——矩阵求差 2.矩阵的乘法运算 1.数乘运算 2.乘运算 3.点乘运算 实例——矩阵乘法运算 3.矩阵的除法运算 1.左除运算 实例——验证矩阵的除法 2.右除运算 实例——矩阵的除法 ヾ(&#xffe3;…...

git reset的使用,以及解决还原后如何找回

文章目录 git reset 详解命令作用常用参数1. --soft2. --mixed&#xff08;默认参数&#xff0c;可省略&#xff09;3. --hard4. 提交引用 总结 git reset --hard HEAD^ 还原代码如何找回&#xff1f;利用 git reflog找回 git reset 详解 git reset 是 Git 中一个功能强大且较…...

react中字段响应式

class中用法: import React, { Component } from react export default class Index extends Component<any, any> { constructor(props) { super(props) this.state { settingInfo: {}, } } async componentDidMount() { let settingInfo awa…...

vue中,watch里,this为undefined的两种解决办法

提示&#xff1a;vue中&#xff0c;watch里&#xff0c;this为undefined的两种解决办法 文章目录 [TOC](文章目录) 前言一、问题二、方法1——使用function函数代替箭头函数()>{}三、方法2——使用that总结 前言 ‌‌‌‌‌尽量使用方法1——使用function函数代替箭头函数()…...

智能客服意图识别:结合知识库数据构建训练语料的专业流程

智能客服意图识别&#xff1a;结合知识库数据构建训练语料的专业流程 构建基于知识库的智能客服意图识别模型&#xff0c;需要综合运用 NLP&#xff08;自然语言处理&#xff09;、知识图谱、机器学习 等技术&#xff0c;确保意图识别的准确性和覆盖度。以下是专业的流程&…...

Spring Boot集成Spring Statemachine

Spring Statemachine 是 Spring 框架下的一个模块&#xff0c;用于简化状态机的创建和管理&#xff0c;它允许开发者使用 Spring 的特性&#xff08;如依赖注入、AOP 等&#xff09;来构建复杂的状态机应用。以下是关于 Spring Statemachine 的详细介绍&#xff1a; 主要特性 …...

压缩空气储能仿真simulink模型

压缩空气储能仿真simulink模型&#xff0c;适合matlab 2017及以上版本 CompressingGas.slx , 40474...

Tomcat 安装

一、Tomcat 下载 官网&#xff1a;Apache Tomcat - Welcome! 1.1.下载安装包 下载安装包&#xff1a; wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.102/bin/apache-tomcat-9.0.102.tar.gz 安装 javajdk。 yum install java-1.8.0-openjdk.x86_64 -y /etc/altern…...

贪心算法和遗传算法优劣对比——c#

项目背景&#xff1a;某钢管厂的钢筋原材料为 55米&#xff0c;工作需要需切割 40 米&#xff08;1段&#xff09;、11 米&#xff08;15 段&#xff09;等 4 种规格 &#xff0c;现用贪心算法和遗传算法两种算法进行计算&#xff1a; 第一局&#xff1a;{ 40, 1 }, { 11, 15…...

系统开发资源

一、前端篇 1.1 菜鸟CSS教程 1.2 HTML/CSS/JS 在线工具 二、后端篇 三、其他篇 3.1 菜鸟官网 3.2 黑马程序员学习路线 3.3 根据地区获取经纬度...

深度学习 bert与Transformer的区别联系

BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;和Transformer都是现代自然语言处理&#xff08;NLP&#xff09;中的重要概念&#xff0c;但它们代表不同的层面。理解这两者之间的区别与联系有助于更好地掌握它们在NLP任务中的应用。 …...

unity使用mesh 画图(1)

plane 圆 空心椭圆 椭圆 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class DrawMeshManager {static DrawMeshManager instance;public static DrawMeshManager Instance {get {if (instance ! null){retu…...

SpringMVC响应页面及不同类型的数据,

目录 响应页面 响应数据 文本数据 响应POJO对象 ​编辑 响应生命周期 视图解析器 控制器&#xff08;Controller&#xff09;处理完客户端请求后&#xff0c;生成的并返回给客户端的结果就是响应&#xff0c;响应的结果可以是静态页面&#xff0c;数据&#xff0c;HTM…...

地理信息系统(ArcGIS)在水文水资源及水环境中的应用:空间数据管理‌、空间分析功能‌、‌可视化表达‌

随着全球工业化和经济的快速发展&#xff0c;水资源短缺、水污染等问题日益严峻&#xff0c;成为制约可持续发展的重大瓶颈。地理信息系统&#xff08;GIS&#xff09;以其强大的空间数据管理和分析能力&#xff0c;在水文水资源及水环境的研究和管理中展现出独特优势。本文将深…...

电路原理(电容 集成电路NE555)

电容 1.特性&#xff1a;充放电&#xff0c;隔直流&#xff0c;通交流 2.电容是通过聚集正负电荷来存储电能的 3.电容充放电过程可等效为导通回路 4.多电容并联可以把容量叠加&#xff0c;但是多电容串联就不会&#xff0c;只会叠加电容的耐压值。 6.电容充放电时相当于通路&a…...

C++对象的初始化和对象所占资源的清理-----初始化列表

一、初始化列表 C 提供了 初始化列表&#xff08;initializer list&#xff09; 语法&#xff0c;可以在 构造函数 中用来初始化类的成员变量。它的主要优势是 提高效率&#xff0c;特别是在初始化 const 或 reference 类型的成员时&#xff0c;以及避免额外的赋值操作。 1.…...

零成本搭建Calibre个人数字图书馆支持EPUB MOBI格式远程直读

文章目录 前言1.网络书库软件下载安装2.网络书库服务器设置3.内网穿透工具设置4.公网使用kindle访问内网私人书库 前言 嘿&#xff0c;各位书虫们&#xff01;今天要给大家安利一个超级炫酷的技能——如何在本地Windows电脑上搭建自己的私人云端书库。亚马逊服务停了&#xff…...

Ansible命令行模式常用模块使用案例(二)

在Ansible中&#xff0c;命令行模式&#xff08;Ad-Hoc 模式&#xff09;是一种快速执行任务的方式&#xff0c;适合临时任务或简单操作。以下是 Ansible 命令行模式中常用模块的使用案例&#xff08;第二部分&#xff09;&#xff1a; 1 file模块 功能特性&#xff1a;主要用于…...

12. Pandas :使用pandas读Excel文件的常用方法

一 read_excel 函数 其他参数根据实际需要进行查找。 1.接受一个工作表 在 11 案例用到的 Excel 工作簿中&#xff0c;数据是从第一张工作表的 A1 单元格开始的。但在实际场景中&#xff0c; Excel 文件可能并没有这么规整。所以 panda 提供了一些参数来优化读取过程。 比如 s…...

Pytorch中矩阵乘法使用及案例

六种矩阵乘法 torch中包含许多矩阵乘法&#xff0c;大致可以分为以下几种&#xff1a; *&#xff1a;即a * b 按位相乘&#xff0c;要求a和b的形状必须一致&#xff0c;支持广播操作 torch.matmul()&#xff1a;最广泛的矩阵乘法 &#xff1a;与torch.matmul()效果一样&…...

【MySQL】增删改查进阶

目录 一、数据库约束 约束类型 NULL约束&#xff1a;非空约束 UNIQUE&#xff1a;唯一约束 DEFAULT&#xff1a;默认值约束 PRIMARY KEY&#xff1a;主键约束 FOREIGN KEY&#xff1a;外键约束 二、表的设计 三、新增 四、查询 聚合查询 聚合函数 GROUP BY子句 HA…...

【Linux 指北】常用 Linux 指令汇总

第一章、常用基本指令 # 注意&#xff1a; # #表示管理员 # $表示普通用户 [rootlocalhost Practice]# 说明此处表示管理员01. ls 指令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xf…...

父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法

提示&#xff1a;父组件中循环生成多个子组件时&#xff0c;有且只有最后一个子组件的watch对象生效问题及解决办法 文章目录 [TOC](文章目录) 前言一、问题二、解决方法——使用function函数代替箭头函数()>{}总结 前言 ‌‌‌‌‌问题&#xff1a;子组件用that解决watch无…...

stable Diffusion 中的 VAE是什么

在Stable Diffusion中&#xff0c;VAE&#xff08;Variational Autoencoder&#xff0c;变分自编码器&#xff09;是一个关键组件&#xff0c;用于生成高质量的图像。它通过将输入图像编码到潜在空间&#xff08;latent space&#xff09;&#xff0c;并在该空间中进行操作&…...

麒麟v10 ARM64架构系统升级mysql数据库从mysql-5.7.27到mysql-8.4.4图文教程

1、背景与问题说明 因mysql-5.2.27版本存在安全漏洞问题&#xff0c;为保障系统安全&#xff0c;需将处于生产环境的麒麟v10 ARM64架构系统服务器上当前部署的mysql-5.7.27版本升级到mysql-8.4.4&#xff0c;以规避潜在风险&#xff0c;提升系统整体的安全性和稳定性。 1.1 本…...

图论·拓扑排序

拓扑排序 有向无环图的遍历 检查有向图是否连通/有环 核心操作 统计度数&#xff0c;对于度为0的点作为起始点&#xff0c;添加度为0的点作为遍历 如何验证有环&#xff1f;注意不建议直接模拟&#xff0c;如果出现环这起始点的度一定不为0&#xff0c;肯定会少遍历一些点&…...

Uniapp组件 Textarea 字数统计和限制

Uniapp Textarea 字数统计和限制 在 Uniapp 中&#xff0c;可以通过监听 textarea 的 input 事件来实现字数统计功能。以下是一个简单的示例&#xff0c;展示如何在 textarea 的右下角显示输入的字符数。 示例代码 首先&#xff0c;在模板中定义一个 textarea 元素&#xff…...

一文了解JVM的垃圾回收

Java堆内存结构 java堆内存是垃圾回收器管理的主要区域&#xff0c;也被称为GC堆。 为了方便垃圾回收&#xff0c;堆内存被分为新生代、老年代和永久代。 新创建的对象的内存会在新生代中分配&#xff0c;达到一定存活时长后会移入老年代&#xff0c;而永久代存储的是类的元数…...

Vector底层结构和源码分析(JDK1.8)

参考视频&#xff1a;韩顺平Java集合 Vector 类的定义说明&#xff1a; Vector 的底层也是一个对象数组&#xff0c;protected Object[] elementData;Vector 是线程同步的&#xff0c;即线程安全&#xff0c;Vectoe 类的操作方法带有 synchronized 关键字&#xff1a;public sy…...

uni-app+vue3学习随笔

目录相关 static文件 编译器会把static目录中的内容整体复制到最终编译包内&#xff0c; 非 static 目录下的文件&#xff08;vue组件、js、css 等&#xff09;只有被引用时&#xff0c;才会被打包编译。 css、less/scss 等资源不要放在 static 目录下&#xff0c;建议这些…...

JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3+ 2025 版免费体验方案

JetBrains&#xff08;全家桶: IDEA、WebStorm、GoLand、PyCharm&#xff09; 2024.3 2025 版免费体验方案 前言 JetBrains IDE 是许多开发者的主力工具&#xff0c;但从 2024.02 版本起&#xff0c;JetBrains 调整了试用政策&#xff0c;新用户不再享有默认的 30 天免费试用…...

移远通信联合德壹发布全球首款搭载端侧大模型的AI具身理疗机器人

在汹涌澎湃的人工智能浪潮中&#xff0c;具身智能正从实验室构想迈向现实应用。移远通信凭借突破性的端侧AI整体解决方案&#xff0c;为AI机器人强势赋能&#xff0c;助力其实现跨行业拓展&#xff0c;从工业制造到服务接待&#xff0c;再到医疗康养&#xff0c;不断改写各行业…...

嵌入式硬件篇---手柄控制控制麦克纳姆轮子

文章目录 前言1. 变量定义2. 摇杆死区设置3. 模式检查4. 摇杆数据处理4.1 右摇杆垂直值&#xff08;psx_buf[7]&#xff09;4.2 右摇杆水平值&#xff08;psx_buf[8]&#xff09;4.3 左摇杆水平值&#xff08;psx_buf[5]&#xff09;4.4 左摇杆垂直值&#xff08;psx_buf[6]&am…...

XML Schema 实例

XML Schema 实例 引言 XML(可扩展标记语言)是一种用于标记电子文件使其具有结构性的标记语言。XML Schema 是一种用于定义 XML 文档结构的机制,它定义了 XML 文档中允许的数据类型、元素和属性。本文将详细探讨 XML Schema 实例,包括其基本概念、结构、用途以及实例分析。…...

Datax-web部署文档(超详细)

Datax-web部署文档&#xff08;超详细&#xff09; Datax部署 # 参考官方文档 https://github.com/alibaba/DataX/blob/master/userGuid.md# 下载datax已经封装好的文件&#xff0c;不推荐源码自己编译 https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.…...

基于javaweb的SSM敬老院养老院管理系统(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

专题地图的立体表达-基于QGIS和PPT的“千层饼”视图制作实践

目录 前言 一、QGIS准备基础数据 1、QGIS 相关插件 2、图层标绘操作 二、PPT中制作 1、调整图片的规格 2、设置旋转 3、添加文字 三、总结 前言 在信息爆炸的时代&#xff0c;数据的可视化呈现变得愈发关键&#xff0c;而专题地图作为传递地理空间信息的有力工具&#…...

DeepSeek-R1 论文阅读总结

1. QA问答&#xff08;我的笔记&#xff09; Q1: DeepSeek如何处理可读性问题&#xff1f; 通过构建冷启动数据&#xff08;数千条长CoT数据&#xff09;微调基础模型&#xff0c;结合多阶段训练流程&#xff08;RL训练、拒绝采样生成SFT数据&#xff09;&#xff0c;并优化输…...

如何选择适合您智能家居解决方案的通信协议?

如何选择适合您智能家居解决方案的通信协议&#xff1f; 在开发智能家居产品时&#xff0c;选择合适的通信协议对于设备的高效运行及其在智能家居系统中的互操作性至关重要。市面上协议众多&#xff0c;了解它们的特性并在做决定前考虑各种因素是非常必要的。以下是一些帮助您…...

蓝桥杯备考:set容器用法(lower_bound)---营业额统计

如图所示&#xff0c;这道题的暴力解法就是枚举每天的营业额&#xff0c;让该营业额和前面的天的营业额依次相减取最小值这样的话我们的时间复杂度就是N平方&#xff0c;我们是很有可能超时的 所以我们选择用set容器的二分查找功能 我们每次遍历到一个数的时候&#xff0c;前…...