Jsp技术入门指南【十三】基于 JSTL SQL 标签库实现 MySQL 数据库连接与数据分页展示

Jsp技术入门指南【十三】基于 JSTL SQL 标签库实现 MySQL 数据库连接与数据分页展示

  • 前言
  • 一、回顾SQL标签的内容
    • 1. 什么是JSTL SQL标签?
    • 2.为什么要用SQL标签?
    • 3.第一步:引入SQL标签库
    • 4. SQL标签的核心功能:连接数据库
      • 标签常用属性:
      • 示例代码(连接到名为“test”的数据库):
  • 二、实例演示
    • 第一步:加入驱动包
    • 第二步:配置maven
    • 第三步:创建并导入web库
    • 第四步:导入jsp文件
    • 第五步:根据jsp文件格式创建数据库
    • 第六步:利用SQL标签库实现MySQL数据库连接


前言

  • 在上一篇博客中,我们介绍了 JSTL 中 SQL 标签库和自定义标签库 的基础用法。
  • 本文将结合 MySQL 数据库连接 和 JSP 页面数据渲染,通过完整的技术方案实现「从数据库到前端页面」的数据流转。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的JSP知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12950980.html?spm=1001.2014.3001.5482


一、回顾SQL标签的内容

我的JSTL SQL标签详细讲解博客链接
Jsp技术入门指南【十一】SQL标签库
https://blog.csdn.net/2402_83322742/article/details/147838670
Jsp技术入门指南【九】详细讲解JSTL
https://blog.csdn.net/2402_83322742/article/details/147312023

1. 什么是JSTL SQL标签?

首先,我们需要知道两个关键词:JSTLSQL标签

  • JSTL:全称是 JSP Standard Tag Library(JSP标准标签库),是官方提供的一套现成的“标签工具”,专门用来简化JSP页面的开发。用它可以少写很多Java代码,让页面更干净、更易读。
  • SQL标签:是JSTL里专门用来操作数据库的一组标签,比如连接数据库、执行SQL语句、处理查询结果等。

2.为什么要用SQL标签?

假设你不用标签,直接在JSP里写Java代码连数据库,会像这样(非常麻烦):

<%
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
// 然后循环取数据...
rs.close(); stmt.close(); conn.close();
%>

而用 SQL标签,只需要几行标签代码就能搞定,不用写复杂的Java连接逻辑,对新手更友好!

3.第一步:引入SQL标签库

要使用SQL标签,必须先在JSP页面顶部“告诉浏览器”:我要用这个标签库!
添加一行代码(固定格式,记住就行):

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
  • prefix="sql":给标签库起个简称,后面用标签时都以 <sql:XXX> 形式调用(比如 <sql:setDataSource>)。
  • uri:标签库的“地址”,固定值,直接复制就行

4. SQL标签的核心功能:连接数据库

连接数据库是操作数据的第一步,SQL标签里用 <sql:setDataSource> 标签 来配置数据库信息,就像“告诉标签库你的数据库在哪、怎么登录”。

标签常用属性:

属性名作用示例值(以MySQL为例)
driver数据库驱动类(必须写对!)com.mysql.cj.jdbc.Driver
url数据库地址(格式固定)jdbc:mysql://localhost:3306/数据库名
user数据库用户名root
password数据库密码123456

示例代码(连接到名为“test”的数据库):

<sql:setDataSource driver="com.mysql.cj.jdbc.Driver"url="jdbc:mysql://localhost:3306/test"user="root"password="123456" var="dbConn"  <!-- 给这个连接起个变量名,后面用 -->
/>
  • 注意:需要提前把MySQL的JDBC驱动包(比如 mysql-connector-java-8.0.28.jar)放到项目的 WEB-INF/lib 目录下,否则会报错!

二、实例演示

接下来我们来实战一下

在这里插入图片描述

  • 题目要求创建一张HTML图片上的表,并且利用SQL标签库实现 MySQL 数据库连接,将数据库表中的信息打印到显示器上

第一步:加入驱动包

  • 首先我们按照之前的那样加入jsp,jdbc的驱动包来构建环境

在这里插入图片描述

<dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.3</version><scope>provided</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><!-- jstl表达式依赖--><dependency><groupId>javax.servlet.jsp.jstl</groupId><artifactId>jstl-api</artifactId><version>1.2</version></dependency><!-- taglibs 标签库依赖--><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency></dependencies>

在这里插入图片描述

第二步:配置maven

  • 接着我们需要配置好自己的maven环境
  • maven环境必须是全英文,不然运行不了

我的jsp环境搭建博客
JSP技术入门指南【一】利用IDEA从零开始搭建你的第一个JSP系统
https://blog.csdn.net/2402_83322742/article/details/146980845?spm=1001.2014.3001.5501
Java-servlet-Web环境搭建(下)详细讲解利用maven和tomcat搭建Java-servlet环境
https://blog.csdn.net/2402_83322742/article/details/145998804

第三步:创建并导入web库

  • 我们新建了一个MySQLtest的模块,在里面单击右键,打开模板设置
    在这里插入图片描述
  • 在MySQLtest里面添加web文件
    在这里插入图片描述
    在这里插入图片描述
  • 然后在工件里,找到web应用程序展开型,找到我们刚刚添加的MySQLweb文件
    在这里插入图片描述
  • 在web-INF文件里创建一个lib文件,并导入我们的库文件
    在这里插入图片描述
    在这里插入图片描述

第四步:导入jsp文件

  • 首先创建jsp文件
    在这里插入图片描述

在这里插入图片描述-

  • 导入我们的HTML代码

在这里插入图片描述

<%--Created by IntelliJ IDEA.User: DELLDate: 2025/5/13Time: 20:34To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1 , user-scalable=no"><title>pha-Admin</title><link rel="stylesheet" href="css/bootstrap.min.css"/><link rel="stylesheet" href="css/bootstrap-maizi.css"/><link rel="stylesheet" href="css/content-style.css"/><link rel="stylesheet" href="css/mricode.pagination.css"/><link rel="stylesheet" href="css/jquery.fancybox.css"/><link rel="stylesheet" href="css/sweetalert.css"/>
</head>
<body>
<!--导航-->
<nav class="navbar navbar-inverse navbar-fixed-top"><div class="container"><!--小屏幕导航按钮和logo--><div class="navbar-header"><button class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a href="index.html" class="navbar-brand"> pha-Admin</a></div><!--小屏幕导航按钮和logo--><!--导航--><div class="navbar-collapse collapse"><ul class="nav navbar-nav"><li><a href="index.html"><span class="glyphicon glyphicon-home"></span>&nbsp;&nbsp;后台首页</a></li><li><a href="user.html"><span class="glyphicon glyphicon-user"></span>&nbsp;&nbsp;用户管理</a></li><li class="active"><a href="machine.html"><span class="glyphicon glyphicon-expand"></span>&nbsp;&nbsp;机器管理</a></li><li><a href="service.html"><span class="glyphicon glyphicon-tasks"></span>&nbsp;&nbsp;服务管理</a></li><li><a href="log.html"><span class="glyphicon glyphicon-list-alt"></span>&nbsp;&nbsp;日志管理</a></li><li><a href="wiki.html"><span class="glyphicon glyphicon-book"></span>&nbsp;&nbsp;使用文档</a></li></ul><ul class="nav navbar-nav navbar-right"><li class="dropdown"><a id="dLabel" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">admin<span class="caret"></span></a><ul class="dropdown-menu" aria-labelledby="dLabel"><li><a href="index.html"><span class="glyphicon glyphicon-cog"></span>&nbsp;&nbsp;个人设置</a></li></ul></li><li><a href="#bbs"><span class="glyphicon glyphicon-off"></span>&nbsp;&nbsp;退出</a></li></ul></div><!--导航--></div>
</nav>
<!--导航-->
<div class="container"><div class="row"><div class="col-md-12"><div class="panel-body" style="padding: 15px 0;"><ul class="nav nav-tabs"><li class="active"><a href="#list" aria-controls="machine" role="tab" data-toggle="tab">机器列表</a></li><li><a href="#form" aria-controls="machine" role="tab" data-toggle="tab">添加机器</a></li></ul></div><div class="tab-content"><div role="tabpanel" class="tab-pane active" id="list"><div class="panel-body"><div class="row"><form><div class="col-md-3 col-lg-offset-9"><div class="input-group"><input class="form-control" type="text" value="" placeholder="用户名" name="keyword"><span class="input-group-btn"><button type="submit" class="btn btn-primary"><i class="glyphicon glyphicon-search"></i></button></span></div></div></form></div></div><div class="panel panel-default"><div class="table-responsive"><table class="table table-bordered"><thead><tr><th class="w8p">id</th><th class="w18p">域名</th><th class="w18p">ip</th><th class="w13p">sphinx路径</th><th class="w10p">备注</th><th class="w15p">创建时间</th><th class="w15p">操作</th></tr></thead><tbody><tr><td class="center">1</td><td>sphinx.test.com.cn</td><td>192.168.128.12</td><td>/usr/local/sphinx</td><td class="center">主机</td><td class="center">2017-03-28 12:21:09</td><td class="center"><a name="remove" onclick="Common.confirm('确认要删除吗?')"><i class="glyphicon glyphicon-remove"></i>删除</a></td></tr><tr><td class="center">2</td><td>sphinx.test.com.cn</td><td>192.168.128.13</td><td>/usr/local/sphinx</td><td class="center">备机</td><td class="center">2017-03-28 12:21:09</td><td class="center"><a name="remove" onclick="Common.confirm('确认要屏蔽吗?')"><i class="glyphicon glyphicon-remove"></i>删除</a></td></tr><tr><td class="center">3</td><td>sphinx.video.com.cn</td><td>192.168.158.13</td><td>/usr/local/sphinx</td><td class="center">主机</td><td class="center">2017-03-28 12:21:09</td><td class="center"><a name="remove" onclick="Common.confirm('确认要屏蔽吗?')"><i class="glyphicon glyphicon-remove"></i>删除</a></td></tr><tr><td class="center">4</td><td>sphinx.test.com.cn</td><td>192.168.158.14</td><td>/usr/local/sphinx</td><td class="center">备机</td><td class="center">2017-03-28 12:21:09</td><td class="center"><a name="remove" onclick="Common.confirm('确认要屏蔽吗?')"><i class="glyphicon glyphicon-remove"></i>删除</a></td></tr></tbody></table></div><div class="panel-footer"><div class="row"><div class="col-md-8 m-pagination" id="paginator"></div></div></div></div></div><div role="tabpanel" class="tab-pane" id="form"><div class="panel-body"><form class="form-horizontal"><div class="form-group"><label class="col-sm-1 control-label"><span class="text-danger"></span>域名</label><div class="col-sm-4"><input type="text" name="username" class="form-control" placeholder="机器域名" required></div></div><div class="form-group"><label class="col-sm-1 control-label"><span class="text-danger"> * </span>IP</label><div class="col-sm-4"><input type="email" name="email" class="form-control" placeholder="机器ip" required></div></div><div class="form-group"><label class="col-sm-1 control-label"><span class="text-danger"> * </span>Sphinx<br>安装目录</label><div class="col-sm-4"><input type="text" name="sphinx_path" class="form-control" placeholder="sphinx安装目录"></div></div><div class="form-group"><label class="col-sm-1 control-label"><span class="text-danger"></span>备注信息</label><div class="col-sm-4"><input type="text" class="form-control" placeholder="备注" required></div></div><div class="form-group"><div class="col-sm-offset-1 col-sm-10"><button type="submit" onclick="" class="btn btn-success">保存</button></div></div></form><hr></div></div></div></div></div>
</div>
<!--footer-->
<footer><div class="container"><div class="row"><div class="col-md-12"><p class="text-muted center">Copyright&nbsp;©&nbsp;2017-2018&nbsp;&nbsp;phachon@163.com&nbsp;&nbsp;</p></div></div></div>
</footer>
<!--footer-->
<script src="js/plugins/jquery/jquery.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/plugins/pagination/mricode.pagination.js"></script>
<script src="js/plugins/fancybox/jquery.fancybox.js"></script>
<script src="js/plugins/sweetalert/sweetalert.min.js"></script>
<script src="js/common/common.js"></script>
<script src="js/module/account.js"></script>
<script type="text/javascript">var pageData = [];pageData.push({'pageSize': '10', 'total': '1000', 'pageIndex': '2'});Common.paginator("#paginator", pageData);Account.bindFancyBox();
</script>
</body>
</html>
  • 可以看到HTML中
 <table class="table table-bordered"><thead><tr><th class="w8p">id</th><th class="w18p">域名</th><th class="w18p">ip</th><th class="w13p">sphinx路径</th><th class="w10p">备注</th><th class="w15p">创建时间</th><th class="w15p">操作</th></tr></thead><tbody><tr><td class="center">1</td><td>sphinx.test.com.cn</td><td>192.168.128.12</td><td>/usr/local/sphinx</td><td class="center">主机</td><td class="center">2017-03-28 12:21:09</td><td class="center"><a name="remove" onclick="Common.confirm('确认要删除吗?')"><i class="glyphicon glyphicon-remove"></i>删除</a></td></tr><tr><td class="center">2</td><td>sphinx.test.com.cn</td><td>192.168.128.13</td><td>/usr/local/sphinx</td><td class="center">备机</td><td class="center">2017-03-28 12:21:09</td><td class="center"><a name="remove" onclick="Common.confirm('确认要屏蔽吗?')"><i class="glyphicon glyphicon-remove"></i>删除</a></td></tr><tr><td class="center">3</td><td>sphinx.video.com.cn</td><td>192.168.158.13</td><td>/usr/local/sphinx</td><td class="center">主机</td><td class="center">2017-03-28 12:21:09</td><td class="center"><a name="remove" onclick="Common.confirm('确认要屏蔽吗?')"><i class="glyphicon glyphicon-remove"></i>删除</a></td></tr><tr><td class="center">4</td><td>sphinx.test.com.cn</td><td>192.168.158.14</td><td>/usr/local/sphinx</td><td class="center">备机</td><td class="center">2017-03-28 12:21:09</td><td class="center"><a name="remove" onclick="Common.confirm('确认要屏蔽吗?')"><i class="glyphicon glyphicon-remove"></i>删除</a></td></tr></tbody></table>

在这里插入图片描述

只能是静态的,接下来我们需要将这里的代码修改为与数据库连接,并遍历打印数据库里面表的信息

第五步:根据jsp文件格式创建数据库

  • 完成上面的代码之后,我们接着创建一个数据库,点击数据库按钮
    在这里插入图片描述
  • 然后找到加号,点击数据源,找到MySQL
    在这里插入图片描述
  • 在里面输入我们的密码和用户名
    在这里插入图片描述
  • 找到部署架构,里面就有我们的数据库文件
    在这里插入图片描述
    在这里插入图片描述
  • 在数据库里根据我们的HTML表格格式创建一张表
  • 新建查询语句

在这里插入图片描述

CREATE TABLE sphinx_info (id INT AUTO_INCREMENT PRIMARY KEY,domain VARCHAR(255) NOT NULL,ip VARCHAR(45) NOT NULL,sphinx_path VARCHAR(255) NOT NULL,remark VARCHAR(255) NOT NULL,create_time DATETIME NOT NULL,operation VARCHAR(20)
);
  • 然后加入数据
INSERT INTO sphinx_info (domain, ip, sphinx_path, remark, create_time, operation)
VALUES 
('sphinx.demo1.com', '192.168.100.1', '/usr/local/sphinx', '主机', '2025-05-13 09:30:00', '✖删除'),
('sphinx.demo2.net', '192.168.100.2', '/usr/local/sphinx', '备机', '2025-05-13 09:35:00', '✖删除'),
('sphinx.demo3.org', '192.168.100.3', '/usr/local/sphinx', '主机', '2025-05-13 09:40:00', '✖删除'),
('sphinx.demo4.cn', '192.168.100.4', '/usr/local/sphinx', '备机', '2025-05-13 09:45:00', '✖删除'),
('sphinx.demo5.io', '192.168.100.5', '/usr/local/sphinx', '主机', '2025-05-13 09:50:00', '✖删除');

在这里插入图片描述

第六步:利用SQL标签库实现MySQL数据库连接

  • 首先在表头添加
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>//核心标签声明<c:forEach>属于 JSTL 核心标签库,必须显式声明才能使用。若缺少此声明,会导致标签无法解析,数据无法遍历显示
  • 然后找到我们的jsp文件,将里面需要修改的代码
 <tbody><tr><td class="center">1</td><td>sphinx.test.com.cn</td><td>192.168.128.12</td><td>/usr/local/sphinx</td><td class="center">主机</td><td class="center">2017-03-28 12:21:09</td><td class="center"><a name="remove" onclick="Common.confirm('确认要删除吗?')"><i class="glyphicon glyphicon-remove"></i>删除</a></td></tr><tr><td class="center">2</td><td>sphinx.test.com.cn</td><td>192.168.128.13</td><td>/usr/local/sphinx</td><td class="center">备机</td><td class="center">2017-03-28 12:21:09</td><td class="center"><a name="remove" onclick="Common.confirm('确认要屏蔽吗?')"><i class="glyphicon glyphicon-remove"></i>删除</a></td></tr><tr><td class="center">3</td><td>sphinx.video.com.cn</td><td>192.168.158.13</td><td>/usr/local/sphinx</td><td class="center">主机</td><td class="center">2017-03-28 12:21:09</td><td class="center"><a name="remove" onclick="Common.confirm('确认要屏蔽吗?')"><i class="glyphicon glyphicon-remove"></i>删除</a></td></tr><tr><td class="center">4</td><td>sphinx.test.com.cn</td><td>192.168.158.14</td><td>/usr/local/sphinx</td><td class="center">备机</td><td class="center">2017-03-28 12:21:09</td><td class="center"><a name="remove" onclick="Common.confirm('确认要屏蔽吗?')"><i class="glyphicon glyphicon-remove"></i>删除</a></td></tr></tbody>
  • 修改为我们的 SQL 标签库实现 的代码
<tbody><!-- 配置数据源 --><sql:setDataSourcevar="dbConn"driver="com.mysql.cj.jdbc.Driver"url="jdbc:mysql://localhost:3306/2023se3"user="root"password="123456"/><!-- 执行查询 --><sql:query dataSource="${dbConn}" var="sphinxRs">SELECT id, domain, ip, sphinx_path, remark, create_time, operationFROM sphinx_info</sql:query><!-- 遍历结果 --><c:forEach items="${sphinxRs.rows}" var="row"><tr><td class="center">${row.id}</td><td>${row.domain}</td><td>${row.ip}</td><td>${row.sphinx_path}</td><td class="center">${row.remark}</td><td class="center">${row.create_time}</td><td class="center"><a href="deleteSphinx.jsp?id=${row.id}" onclick="return confirm('确认要删除吗?')"><i class="glyphicon glyphicon-remove"></i>${row.operation}</a></td></tr></c:forEach></tbody>
  • 下面我们来详细讲解一下代码
<sql:setDataSourcevar="dbConn"driver="com.mysql.cj.jdbc.Driver"url="jdbc:mysql://localhost:3306/2023se3"user="root"password="123456"
/>
  • 借助 <sql:setDataSource> 标签,创建了一个名为 dbConn 的数据源对象。
  • 该对象使用 MySQL 驱动程序,连接到本地 3306 端口的 2023se3 数据库,登录用户为 root,密码是 123456
<sql:query dataSource="${dbConn}" var="sphinxRs">SELECT id, domain, ip, sphinx_path, remark, create_time, operationFROM sphinx_info
</sql:query>
  • 利用 <sql:query> 标签执行 SQL 查询操作。
  • sphinx_info 表中选取 7 个字段的数据。
  • 查询结果会存放在 sphinxRs 变量里,这个变量是一个包含多行数据的集合。
<c:forEach items="${sphinxRs.rows}" var="row"><tr><td class="center">${row.id}</td><td>${row.domain}</td><td>${row.ip}</td><td>${row.sphinx_path}</td><td class="center">${row.remark}</td><td class="center">${row.create_time}</td><td class="center"><a href="deleteSphinx.jsp?id=${row.id}" onclick="return confirm('确认要删除吗?')"><i class="glyphicon glyphicon-remove"></i>${row.operation}</a></td></tr>
</c:forEach>
  • <c:forEach> 标签会遍历结果集里的每一行数据。

  • 针对每一行数据,都会生成一个 <tr>(表格行)。

  • 每个 <td>(表格单元格)会显示对应字段的值,像 ID、域名、IP 等。

  • 最后一列是操作列,包含一个删除链接,点击该链接会调用 deleteSphinx.jsp 并附带当前行的 ID。

  • onclick 事件会弹出确认对话框,防止用户误操作。

  • 然后点击运行
    在这里插入图片描述

  • 可以看到我们的数据库信息成功打印到屏幕上了

在这里插入图片描述


以上就是这篇博客的全部内容,下一篇我们将继续探索JSP的更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的JSP知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12950980.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

羽毛球订场小程序源码介绍

基于ThinkPHP、FastAdmin以及UniApp开发的羽毛球订场小程序源码&#xff0c;这款小程序旨在为羽毛球爱好者提供便捷的场地预订服务。 该小程序前端采用UniApp框架开发&#xff0c;具有良好的跨平台兼容性&#xff0c;可以一键发布至iOS和Android平台&#xff0c;极大地提高了开…

Unreal Engine: Windows 下打包 AirSim项目 为 Linux 平台项目

环境&#xff1a; Windows: win10, UE4.27, Visual Studio 2022 Community.Linux: 22.04 windows环境安装教程&#xff1a; 链接遇到的问题&#xff08;问题&#xff1a;解决方案&#xff09; 点击Linux打包按钮&#xff0c;跳转至网页而不是执行打包流程&#xff1a;用VS打开项…

SpringBoot 3.x 集成 MyBatisPlus

文章目录 集成 MyBatisPlus第 1 步:创建 SpringBoot 项目第 2 步:添加 MyBatisPlus 依赖第 3 步:编写 CRUD 代码创建 Entity创建 Mapper创建 Service编写 Controller第 4 步:执行初始化 SQL第 5 步:配置第 6 步:测试测试 ControllerMapper 层单元测试参考🚀 目标 1:基…

java基础-抽象类和抽象方法

1.abstract 可以修饰&#xff1a;类、方法 &#xff08;1&#xff09;修饰类&#xff1a; 类不能被实例化&#xff1b; 抽象类一定有构造器&#xff0c;便于子类实例化时调用&#xff1b; &#xff08;2&#xff09;修饰方法&#xff1a;抽象方法 只有方法的声明&#xff…

解决电脑问题(8)——网络问题

电脑网络出现问题的原因较为复杂&#xff0c;以下是从网络连接、网络配置以及网络环境等方面的常见问题及解决方法&#xff1a; 网络连接问题 检查物理连接&#xff1a;对于有线网络&#xff0c;检查网线是否插好&#xff0c;网线有无破损、断裂等情况。对于无线网络&#xff…

ubuntu 20.04 ping baidu.coom可以通,ping www.baidu.com不通 【DNS出现问题】解决方案

ping baidu.coom可以通&#xff0c;ping www.baidu.com不通【DNS出现问题】解决方案 检查IPV6是否有问题 # 1. 检查 IPv6 地址&#xff0c;记住网络接口的名称 ip -6 addr show# 2. 测试本地 IPv6&#xff0c;eth0换成自己的网络接口名称 ping6 ff02::1%eth0# 3. 检查路由 ip…

【AI生成PPT】使用ChatGPT+Overleaf自动生成学术论文PPT演示文稿

【AI生成PPT】使用ChatGPTOverleaf自动生成学术论文PPT演示文稿 文章摘要&#xff1a;使用ChatGPTBeamer自动生成学术论文PPT演示文稿​​Beamer​​是什么Overleaf编辑工具ChatGPT生成Beamer Latex代码论文获取prompt设计 生成结果 文章摘要&#xff1a; 本文介绍了一种高效利…

JVM 垃圾回收器

以下是对主流 JVM 垃圾回收器的详细解析&#xff0c;涵盖 一、Serial GC&#xff08;单线程串行回收器&#xff09; 二、Parallel GC&#xff08;吞吐量优先回收器&#xff09; 三、CMS&#xff08;Concurrent Mark Sweep&#xff0c;低延迟回收器&#xff09; 四、G1&…

从零开始学习three.js(21):一文详解three.js中的矩阵Matrix和向量Vector

一、三维世界的数学基石 在Three.js的三维世界里&#xff0c;所有视觉效果的实现都建立在严密的数学基础之上。其中向量&#xff08;Vector&#xff09; 和矩阵&#xff08;Matrix&#xff09; 是最核心的数学工具&#xff0c;它们就像构建数字宇宙的原子与分子&#xff0c;支…

ArcGIS Pro 3.4 二次开发 - 内容

环境&#xff1a;ArcGIS Pro SDK 3.4 .NET 8 文章目录 内容1 工程1.1 创建一个空工程1.2 使用指定名称创建新工程1.3 使用Pro的默认设置创建新工程1.4 使用自定义模板文件创建新工程1.5 使用 ArcGIS Pro 提供的模板创建工程1.6 打开现有工程1.7 获取当前工程1.8 获取当前工程的…

【Python-Day 15】深入探索 Python 字典 (下):常用方法、遍历、推导式与嵌套实战

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

31、魔法生物图鉴——React 19 Web Workers

一、守护神协议&#xff08;核心原理&#xff09; 1. 灵魂分裂术&#xff08;线程架构&#xff09; // 主组件中初始化Workerconst workerRef useRef(null);​useEffect(() > {workerRef.current new Worker(new URL(./creatureWorker.js, import.meta.url));workerRef.…

Spark SQL 之 Antlr grammar 具体分析

src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBaseLexer.g4 BACKQUOTED_IDENTIFIER: ` ( ~` | `` )* `;src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBaseParser.g4 queryPrimary:

低功耗:XILINX FPGA如何优化功耗?

优化Xilinx FPGA及其外围电路的功耗需要从硬件设计、软件配置和系统级优化三个层面综合考虑。以下是具体的优化策略&#xff0c;涵盖硬件和软件方面&#xff1a; 一、硬件层面的功耗优化 选择低功耗FPGA型号 选择Xilinx低功耗系列芯片&#xff0c;如7系列中的Artix-7&#xff…

深入理解 ZAB:ZooKeeper 原子广播协议的工作原理

目录 ZAB 协议&#xff1a;ZooKeeper 如何做到高可用和强一致&#xff1f;&#x1f512;ZAB 协议的核心目标 &#x1f3af;ZAB 协议的关键概念 &#x1f4a1;ZAB 协议的运行阶段 &#x1f3ac;阶段一&#xff1a;Leader 选举 (Leader Election) &#x1f5f3;️阶段二&#xff…

OpenHarmony外设驱动使用 (五),Fingerprint_auth

OpenHarmony外设驱动使用 &#xff08;五&#xff09; Fingerprint_auth 概述 功能简介 指纹认证是端侧设备不可或缺的功能&#xff0c;为设备提供用户认证能力&#xff0c;可应用于设备解锁、支付、应用登录等身份认证场景。用户注册指纹后&#xff0c;指纹认证模块就可为设…

前端(vue)学习笔记(CLASS 6):路由进阶

1、路由的封装抽离 将之前写在main.js文件中的路由配置与规则抽离出来&#xff0c;放置在router/index.js文件中&#xff0c;再将其导入回main.js文件中&#xff0c;即可实现路由的封装抽离 例如 //index.js import { createMemoryHistory, createRouter } from vue-routerim…

前后端交互中的绝对路径和相对路径

前端 <form action"hello" method"post"> 1. 不加斜杠 &#xff08;相对路径&#xff0c;如 action"hello"&#xff09; 解析规则&#xff1a;基于当前页面的 URL 路径部分 进行拼接。 假设当前页面 URL 是 http://域名:端口/应用上下文…

在Odoo 18中创建进度条指南

在Odoo 18中创建进度条指南 一、创建进度条模板 首先在名为 progress_bar_widget.xml 的文件中定义一个名为 ProgressBarWidget 的新模板。该模板使用两个CSS类&#xff1a;progress-bar-inner 用于样式化进度条&#xff0c;progress_number 用于显示进度百分比。您可以根据需…

Linux grep 命令详解:常用选项、参数及实战场景

一、grep 命令简介 grep&#xff08;Global Regular Expression Print&#xff09;是 Linux 中用于文本搜索的核心工具&#xff0c;支持正则表达式&#xff0c;能快速定位文件中的目标内容。 二、常用选项&#xff08;Options&#xff09;及英文对照 | 选项 | 英文全称 | 作用 …