【Web应用服务器_Tomcat】一、Tomcat基础与核心功能详解
在 Java Web 应用开发领域,Apache Tomcat 是一座不可或缺的基石。作为一款开源、轻量级的 Servlet 容器和 Web 服务器,Tomcat 以其稳定可靠、易于部署和高度可定制性,被广泛应用于各类 Web 应用的部署与运行。
一、Tomcat 简介
Tomcat 是 Apache 软件基金会下 Jakarta 项目开发的 Servlet 容器,它实现了 Java EE(Java Platform, Enterprise Edition)或 Jakarta EE(Java EE 的后续演进版本)中的 Servlet、JSP(JavaServer Pages)等核心规范,能够高效地处理 HTTP 请求,运行 Java Web 应用。自 1998 年发布第一个版本以来,Tomcat 不断发展和完善,如今已成为 Java Web 开发者最常用的服务器之一。
Tomcat 与 Java EE、Jakarta EE 平台紧密相连。不同版本的 Tomcat 对应着不同的 Java EE 或 Jakarta EE 规范,例如 Tomcat 9 及更早版本实现 Java EE 规范,而 Tomcat 10 及后续版本实现 Jakarta EE 规范。这种对应关系确保了 Tomcat 能够为基于相应规范开发的 Web 应用提供可靠的运行环境。
在实际应用场景中,从中小型企业的内部管理系统,到大型互联网公司的高并发电商平台,Tomcat 都扮演着关键角色。它的轻量级特性使其能够在资源有限的环境中高效运行,而强大的功能又足以支撑复杂的 Web 应用需求。
二、Tomcat 的安装与启动
2.1 安装环境准备
在 CentOS 7 系统上安装 Tomcat,首先需要确保系统已安装 Java 运行环境(JRE)或 Java 开发工具包(JDK)。可以通过以下命令检查 Java 版本:
java -version
如果系统未安装 Java,可使用以下命令安装 OpenJDK:
sudo yum install java-1.8.0-openjdk-devel
2.2 下载 Tomcat
访问 Tomcat 官方网站(Apache Tomcat® - Welcome!),下载适合的 Tomcat 版本。在 CentOS 7 上,通常选择 Tomcat 的 tar.gz 压缩包。使用wget命令下载 Tomcat 9.0 版本(以实际最新版本为准):
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.71/bin/apache-tomcat-9.0.71.tar.gz
2.3 解压与配置
下载完成后,使用以下命令解压压缩包:
tar -zxvf apache-tomcat-9.0.71.tar.gz
将解压后的 Tomcat 目录移动到合适的位置,例如/usr/local/:
sudo mv apache-tomcat-9.0.71 /usr/local/tomcat
为了方便管理,可创建一个指向 Tomcat 目录的软链接:
sudo ln -s /usr/local/tomcat /usr/local/tomcat-latest
2.4 启动 Tomcat
进入 Tomcat 的bin目录:
cd /usr/local/tomcat-latest/bin
执行启动脚本:
./startup.sh
执行命令后,终端会输出一系列启动信息,表明 Tomcat 正在启动。可以通过查看 Tomcat 的日志文件/usr/local/tomcat-latest/logs/catalina.out来确认启动是否成功。如果启动过程中出现错误,日志文件会记录详细的错误信息,方便排查问题。
三、Tomcat 架构解析
Tomcat 的架构主要由 Server、Service、Connector 和 Container 四大组件构成,它们相互协作,共同完成 Web 请求的处理和响应。
3.1 Server 组件
Server 是 Tomcat 服务器的顶级组件,它代表整个 Tomcat 实例,负责管理一个或多个 Service。在/usr/local/tomcat-latest/conf/server.xml配置文件中,<Server>元素是根元素,定义了 Tomcat 服务器的基本属性和生命周期管理。
<Server port="8005" shutdown="SHUTDOWN"><!-- 其他配置 -->
</Server>
其中,port属性指定了 Tomcat 服务器用于接收关闭命令的端口号,shutdown属性指定了关闭服务器时发送的命令字符串。当通过该端口发送指定的关闭命令时,Tomcat 服务器会优雅地停止运行。
3.2 Service 组件
Service 组件包含一个或多个 Connector 和一个 Container。它的主要作用是将 Connector 接收到的请求转发给 Container 进行处理,并将 Container 处理后的响应通过 Connector 返回给客户端。在server.xml中,<Service>元素定义了 Service 组件的配置:
<Service name="Catalina"><!-- Connector配置 --><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><!-- Container配置 --><Engine name="Catalina" defaultHost="localhost"><!-- 其他配置 --></Engine>
</Service>
3.3 Connector 组件
Connector 负责处理网络通信,接收客户端的请求,并将请求转发给 Container。它支持多种协议,如 HTTP/1.1、AJP(Apache JServ Protocol)等。以 HTTP 协议的 Connector 为例,在server.xml中的配置如下:
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
- port:指定 Connector 监听的端口号,默认值为 8080。
- protocol:指定使用的协议,这里是 HTTP/1.1。
- connectionTimeout:指定连接超时时间(单位:毫秒),超过该时间未完成的连接将被关闭。
- redirectPort:当需要将 HTTP 请求重定向到 HTTPS 时,指定重定向的端口号,默认为 8443。
3.4 Container 组件
Container 是 Tomcat 处理请求的核心组件,负责管理和执行 Servlet。它采用分层架构,由 Engine、Host、Context 和 Wrapper 四个子容器组成,层级关系为 Engine → Host → Context → Wrapper。
Engine:代表整个 Servlet 引擎,一个 Service 中只能有一个 Engine。它负责处理来自 Connector 的请求,并将请求分配给合适的 Host。
<Engine name="Catalina" defaultHost="localhost"><!-- 其他配置 -->
</Engine>
Host:代表一个虚拟主机,用于部署多个 Web 应用。每个 Host 可以包含多个 Context。
<Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><!-- 其他配置 -->
</Host>
appBase属性指定了 Web 应用的部署目录,默认为webapps目录;unpackWARs属性表示是否自动解压 WAR 文件;autoDeploy属性表示是否自动部署 Web 应用。
Context:代表一个 Web 应用,每个 Web 应用对应一个 Context。它负责管理 Web 应用的资源、Servlet 映射等。
<Context path="/myapp" docBase="/usr/local/tomcat-latest/webapps/myapp"reloadable="true"><!-- 其他配置 -->
</Context>
path属性指定了 Web 应用的访问路径;docBase属性指定了 Web 应用的实际目录;reloadable属性表示当 Web 应用的类文件或配置文件发生变化时,是否自动重新加载应用。
Wrapper:代表一个 Servlet,它是 Container 的最底层容器,负责实例化和调用 Servlet。
四、Tomcat 核心功能详解
4.1 Servlet 容器功能
Servlet 是 Java Web 应用的核心组件,用于处理客户端请求并生成响应。Tomcat 作为 Servlet 容器,负责 Servlet 的生命周期管理,包括加载、实例化、初始化、服务请求和销毁。
当 Tomcat 启动时,它会扫描 Web 应用的WEB-INF/classes目录和WEB-INF/lib目录下的类文件,加载所有定义的 Servlet 类。在接收到针对某个 Servlet 的请求时,Tomcat 会实例化该 Servlet 对象(每个 Servlet 在应用中只有一个实例),并调用其init方法进行初始化。然后,通过调用service方法处理请求,根据请求的 HTTP 方法(如 GET、POST 等)调用相应的doGet、doPost等方法。最后,当 Tomcat 关闭或 Web 应用重新部署时,会调用 Servlet 的destroy方法进行资源清理。
以下是一个简单的 Servlet 示例,用于处理用户的登录请求:
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 java.io.IOException;
import java.io.PrintWriter;@WebServlet("/login")
public class LoginServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");// 模拟登录验证if ("admin".equals(username) && "123456".equals(password)) {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<html>");out.println("<head><title>Login Success</title></head>");out.println("<body>");out.println("<h1>Welcome, " + username + "</h1>");out.println("</body>");out.println("</html>");} else {response.sendRedirect("login.html");}}
}
将上述 Servlet 代码编译后,放置在 Web 应用的WEB-INF/classes目录下,Tomcat 会自动识别并处理针对/login路径的请求。
4.2 JSP 支持
JSP 是一种动态网页技术,它允许在 HTML 页面中嵌入 Java 代码,从而实现动态内容的生成。Tomcat 对 JSP 提供了良好的支持,JSP 页面在运行时会被 Tomcat 转换成 Servlet 类并执行。
例如,创建一个简单的 JSP 页面index.jsp,用于显示当前时间:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Current Time</title>
</head>
<body><h1>Current Time: <%= new java.util.Date() %></h1>
</body>
</html>
当用户访问该 JSP 页面时,Tomcat 会将index.jsp转换成一个 Servlet 类,该 Servlet 类的_jspService方法包含了生成页面内容的逻辑。在首次访问 JSP 页面时,Tomcat 会进行转换和编译操作,后续访问则直接执行已编译的 Servlet 类,提高了响应速度。
4.3 Web 服务器功能
Tomcat 不仅是 Servlet 容器,还具备 Web 服务器的功能,能够处理 HTTP 请求和响应,提供静态资源(如 HTML、CSS、JavaScript 文件等)的服务。
当 Tomcat 接收到一个 HTTP 请求时,首先由 Connector 组件接收请求,然后根据请求的 URL 路径判断是请求静态资源还是动态资源。如果是请求静态资源,Tomcat 会直接从 Web 应用的资源目录中读取相应文件,并将其作为响应返回给客户端;如果是请求动态资源(如 Servlet 或 JSP),则将请求转发给 Container 组件进行处理。
例如,将一个index.html文件放置在 Web 应用的根目录下,用户通过浏览器访问http://localhost:8080/myapp/index.html时,Tomcat 会直接读取该文件并返回给用户。
4.4 管理和部署 Web 应用
4.4.1 部署方式
Tomcat 支持多种 Web 应用的部署方式,常见的有以下两种:
- WAR 文件部署:将 Web 应用打包成 WAR 文件(类似于 ZIP 文件格式),然后将 WAR 文件放置在 Tomcat 的webapps目录下。Tomcat 会自动解压 WAR 文件,并部署其中的 Web 应用。例如,将开发好的myapp.war文件复制到/usr/local/tomcat-latest/webapps目录下,Tomcat 会自动解压并启动该应用。
- 目录结构部署:将 Web 应用的目录结构直接放置在webapps目录下。目录结构应包含WEB-INF目录,其中WEB-INF/classes目录存放 Java 类文件,WEB-INF/lib目录存放依赖的 jar 包,WEB-INF/web.xml文件是 Web 应用的配置文件(在 Servlet 3.0 及以上版本中,也可以通过注解进行配置,web.xml文件不是必需的)。
4.4.2 管理界面
Tomcat 提供了一个基于 Web 的管理界面,方便用户管理和监控 Web 应用。要启用管理界面,需要在/usr/local/tomcat-latest/conf/tomcat-users.xml文件中添加管理用户和角色:
<tomcat-users xmlns="http://tomcat.apache.org/xml"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"version="1.0"><role rolename="manager-gui"/><role rolename="admin-gui"/><user username="admin" password="admin" roles="manager-gui,admin-gui"/>
</tomcat-users>
上述配置添加了一个名为admin的用户,具有manager-gui和admin-gui角色,分别用于访问 Web 应用管理界面和服务器管理界面。
添加用户后,重启 Tomcat,通过浏览器访问http://localhost:8080/manager/html(管理 Web 应用)或http://localhost:8080/host-manager/html(管理虚拟主机),输入用户名和密码即可进入管理界面。在管理界面中,可以查看已部署的 Web 应用列表、启动 / 停止应用、部署新应用等操作。
4.5 安全性和会话管理
4.5.1 安全性
Tomcat 提供了多种安全管理功能,包括用户认证、授权和 SSL 支持等。
- 用户认证和授权:通过在tomcat-users.xml文件中配置用户和角色,结合 Web 应用的web.xml文件中的安全约束配置,实现用户认证和授权。例如,在web.xml中配置对某个资源的访问权限:
<security-constraint><web-resource-collection><web-resource-name>Secure Area</web-resource-name><url-pattern>/admin/*</url-pattern></web-resource-collection><auth-constraint><role-name>admin</role-name></auth-constraint>
</security-constraint>
<login-config><auth-method>BASIC</auth-method><realm-name>Tomcat Realm</realm-name>
</login-config>
上述配置表示只有具有admin角色的用户才能访问/admin路径下的资源,认证方式为基本认证(BASIC)。
- SSL 支持:为了保障数据传输的安全性,Tomcat 可以配置 SSL 证书,实现 HTTPS 协议。首先需要获取 SSL 证书(可以从证书颁发机构购买或使用自签名证书),然后在server.xml中配置 SSL Connector:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="150" SSLEnabled="true"><SSLHostConfig><Certificate certificateFile="conf/localhost.crt"certificateKeyFile="conf/localhost.key"type="RSA" /></SSLHostConfig>
</Connector>
certificateFile属性指定证书文件路径,certificateKeyFile属性指定私钥文件路径。配置完成后,重启 Tomcat,用户即可通过 HTTPS 协议访问 Web 应用。
4.5.2 会话管理
会话管理用于跟踪用户在多次请求之间的状态,例如购物车信息、用户登录状态等。Tomcat 通过HttpSession对象实现会话管理。
当用户首次访问 Web 应用时,Tomcat 会为用户创建一个唯一的会话 ID,并将其通过 Cookie 发送给客户端。后续用户的请求中会携带该会话 ID,Tomcat 根据会话 ID 识别用户的会话,并在服务器端维护会话相关的数据。
以下是一个在 Servlet 中使用会话管理的示例,用于记录用户的访问次数:
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;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet("/counter")
public class CounterServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session = request.getSession(true);Integer count
相关文章:
【Web应用服务器_Tomcat】一、Tomcat基础与核心功能详解
在 Java Web 应用开发领域,Apache Tomcat 是一座不可或缺的基石。作为一款开源、轻量级的 Servlet 容器和 Web 服务器,Tomcat 以其稳定可靠、易于部署和高度可定制性,被广泛应用于各类 Web 应用的部署与运行。 一、Tomcat 简介 Tomcat 是…...
Cesium实现地形可视域分析
Cesium实现可视化分析 一、地形可视域主要实现技术(Ray + 地形碰撞检测) Cesium 本身的 Ray 类可以用来执行非常精确的射线检测,我们可以结合地形高度(sample)来逐点检测光线是否与 terrain 相交,从而判断是否可见。 1.1 优势 实时判断每条射线是否被 terrain 遮挡地形…...
Java—— 常见API介绍 第五期
JDK8以后新增的时间相关类 Date类ZoneId:时区Instant:时间戳ZoneDateTime:带时区的时间 日期格式化类 SimpleDateFormat DateTimeFormatter:用于时间的格式化和解析 日历类 Calendar LocalDate:年、月、日LocalTime…...
ViewPager FragmentPagerAdapter在系统杀死应用后重建时UI不刷新的问题
解决方案 通过重写getItemId方法,返回Fragment的hashCode: Override public long getItemId(int position) {/*** 恢复状态重建时,新的 Fragment 不刷新UI。* 原因:instantiateItem 中通过 mFragmentManager.findFragmentByTag(…...
第3讲、大模型如何理解和表示单词:词嵌入向量原理详解
1. 引言 大型语言模型(Large Language Models,简称LLM)如GPT-4、Claude和LLaMA等近年来取得了突破性进展,能够生成流畅自然的文本、回答复杂问题、甚至编写代码。但这些模型究竟是如何理解人类语言的?它们如何表示和处…...
关于STM32f1新建工程
创建文件夹 首先创建一个存放工程的文件夹,建议建立在D,E盘 新建工程 在kiel5里面 找到刚刚建立的文件夹,然后在此文件夹里面新建一个文件夹用来存放本次工程,文件夹可以根据工程内容所编写,然后给自己工程也就是…...
Linux:进程间通信---匿名管道
文章目录 1. 进程间通信1.1 什么是进程间通信?1.2 为什么进程要进行进程间通信?1.3 怎么实现进程间通信? 2. 匿名管道2.1 匿名管道的原理2.2 匿名管道的系统接口2.3 匿名管道的使用2.4 匿名管道的运用场景 序:在上一篇文章中我们知…...
python代做推荐系统深度学习知识图谱c#代码代编神经网络算法创新
以下是针对推荐系统、深度学习、知识图谱和神经网络算法创新的代码框架及开发建议,适用于C#和Python的跨语言协作项目。以下内容分为几个部分,涵盖技术选型、代码示例和创新方向。 1. 推荐系统(Python C#) Python部分࿰…...
【动手学大模型开发】VSCode 连接远程服务器
Visual Studio Code(VSCode)是一款由微软开发的免费、开源的现代化代码编辑器。它以其轻量级、高性能和广泛的编程语言支持而受到开发者的青睐。VSCode 的核心特点包括: 跨平台:支持 Windows、macOS 和 Linux 操作系统。扩展市场…...
PostgreSQL 漏洞信息详解
PostgreSQL 漏洞信息详解 PostgreSQL 作为一款开源关系型数据库,其安全漏洞会被社区及时发现和修复。以下是 PostgreSQL 漏洞相关的重要信息和资源。 一、主要漏洞信息来源 1. 官方安全公告 PostgreSQL 安全信息页面:https://www.postgresql.org/sup…...
华为L410上制作内网镜像模板:在客户端配置模板内容
华为L410上制作内网镜像模板:在客户端配置模板内容 在本教程中,我们将继续在华为L410上配置内网镜像模板,具体介绍如何在客户端设置以便于在首次开机时自动安装软件。我们将主要使用WeChat作为示例。 1. 制作镜像模板,开启 rc.l…...
分布式队列对消息语义的处理
在分布式系统中,消息的处理语义(Message Processing Semantics)是确保系统可靠性和一致性的关键。有三种语义: 在分布式系统中,消息的处理语义(Message Processing Semantics)是确保系统可靠性和…...
《免费开放”双刃剑:字节跳动Coze如何撬动AI生态霸权与暗涌危机?》
战略动机分析 降低技术门槛为数据采集接口 Coze平台宣称**“30秒无代码生成AI Bot”,大幅降低了企业开发AI应用的技术门槛。任何不懂编程的业务人员都可以通过可视化流程和提示词,在半分钟内搭建聊天机器人或智能代理。这种极低门槛意味着更多企业和个人…...
AI 开发工具提示词集体开源!解锁 Cursor、Cline、Windsurf 等工具的核心逻辑
✨ 前言:提示词,AI 编程工具的灵魂 随着大模型编程能力的迅速提升,AI 编程工具如雨后春笋般涌现,涵盖了从代码编辑器(如 Cursor、Windsurf、Cline)到应用生成服务(如 Lovable、Bolt.new、V0&am…...
MYSQL 常用字符串函数 和 时间函数详解
一、字符串函数 1、CONCAT(str1, str2, …) 拼接多个字符串。 SELECT CONCAT(Hello, , World); -- 输出 Hello World2、SUBSTRING(str, start, length) 或 SUBSTR() 截取字符串。 SELECT SUBSTRING(MySQL, 3, 2); -- 输出 SQ3、LENGTH(str) 与 CHAR_LENGTH…...
Ubuntu 下 Nginx 1.28.0 源码编译安装与 systemd 管理全流程指南
一、环境与依赖准备 为确保编译顺利,我们首先更新系统并安装必要的编译工具和库: sudo apt update sudo apt install -y build-essential \libpcre3 libpcre3-dev \zlib1g zlib1g-dev \libssl-dev \wgetbuild-essential:提供 gcc、make 等基…...
线程怎么创建?Java 四种方式一网打尽
🚀 Java 中线程的 4 种创建方式详解 创建方式实现方式是否推荐场景说明1. 继承 Thread 类class MyThread extends Thread❌ 不推荐简单学习、单线程场景2. 实现 Runnable 接口class MyRunnable implements Runnable✅ 推荐更适合多线程共享资源3. 实现 Callable 接…...
高效使用DeepSeek对“情境+ 对象 +问题“型课题进行开题!
目录 思路"情境 对象 问题"型 课题选题的类型有哪些呢?这要从课题题目的构成说起。通过对历年来国家社会科学基金立项项目进行分析,小编发现,课题选题类型非常丰富,但一般是围绕限定词、研究对象和研究问题进行不同的组…...
【GCC bug】libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found
在 conda 环境安装 gcc/gxx 之后,运行开始遇到了以下的报错 File "/mnt/data/home/xxxx/miniforge3/envs/GAGAvatar/lib/python3.12/site-packages/google/protobuf/internal/wire_format.py", line 13, in <module>from google.protobuf import de…...
python卸载报错:No Python 3.12 installation was detected已解决
问题背景 在卸载Python 3.12.5时,遇到了一个棘手的问题:运行安装包python.exe点击Uninstall后,系统提示No Python 3.12 installation was detected. 尝试了网上各种方法(包括注册表清理、修复repair,卸载unins…...
【Hive入门】Hive分区与分区表完全指南:从原理到企业级实践
引言 在大数据时代,高效管理海量数据成为企业面临的核心挑战。Hive作为Hadoop生态系统中最受欢迎的数据仓库解决方案,其分区技术是优化数据查询和管理的关键手段。本文将全面解析Hive分区技术的原理、实现方式及企业级最佳实践,帮助您构建高性…...
AI之FastAPI+ollama调用嵌入模型OllamaBgeEmbeddings
以下是对该 FastAPI 代码的逐行解析和详细说明: 代码结构概览 from fastapi import Depends # 导入依赖注入模块def get_embedder():return OllamaBgeEmbeddings(base_url="http://ollama-cluster:11434",timeout=30,max_retries=5)@app.post("/embed")…...
RK3588芯片NPU的使用:yolov8-pose例子图片检测在安卓系统部署与源码深度解析(rknn api)
一、本文的目标 将yolo8-pose例子适配安卓端,提供选择图片后进行姿态识别功能。通过项目学习源码和rknn api。二、开发环境说明 主机系统:Windows 11目标设备:搭载RK3588芯片的安卓开发板核心工具:Android Studio Koala | 2024.1.1 Patch 2,NDK 27.0三、适配(迁移)安卓 …...
【HTTP/3:互联网通信的量子飞跃】
HTTP/3:互联网通信的量子飞跃 如果说HTTP/1.1是乡村公路,HTTP/2是现代高速公路系统,那么HTTP/3就像是一种革命性的"传送门"技术,它彻底重写了数据传输的底层规则,让信息几乎可以瞬间抵达目的地,…...
2024 年:Kubernetes 包管理的新前沿
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:历代文学,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计…...
SIEMENS PLC 程序 GRAPH 程序解读 车型入库
1、程序载图1 2、程序截图2 3、程序解释 这是一个基于西门子 GRAPH 编程的车型 1 入库顺序控制流程图,通过状态机结构(状态框 S 与转移条件 T)描述完整工作流程,具体如下: 整体流程概述 初始化:从 S1&am…...
c++11新特性随笔
1.统一初始化特性 c98中不支持花括号进行初始化,编译时会报错,在11当中初始化可以通过{}括号进行统一初始化。 c98编译报错 c11: #include <iostream> #include <set> #include <string> #include <vector>int main() {std:…...
微信小程序文章管理系统开发实现
概述 在内容为王的互联网时代,高效的文章管理系统成为各类平台的刚需。幽络源平台今日分享一款基于SSM框架开发的微信小程序文章管理系统完整解决方案,该系统实现了多角色内容管理、智能分类、互动交流等功能。 主要内容 一、用户端功能模块 多角…...
3种FSC标签你用对了吗?
如果你留意过产品上的FSC小树标识,也许会发现它们很相似但又各不相同。 根据产品使用的FSC认证材料的不同比例,共有三种不同类型的FSC标签: 1、FSC 100% 所有使用的材料均来自负责任管理的FSC认证森林。 标签文本为:“ From well-…...
NLP高频面试题(五十四)——深度学习归一化详解
引言:大模型训练中的归一化需求 随着人工智能技术的快速发展,**大模型(Large Language Models, LLMs)**的规模与能力都呈爆发式增长。诸如GPT-4、BERT、PaLM等模型参数量从最初的百万级到如今的千亿、万亿级别,训练难度和效率问题日益显著。在超大模型的训练过程中,梯度…...
第5.5章:ModelScope-Agent:支持多种API无缝集成的开源框架
5.5.1 ModelScope-Agent概述 ModelScope-Agent,由阿里巴巴旗下ModelScope社区开发,是一个开源的、模块化的框架,旨在帮助开发者基于大型语言模型快速构建功能强大、灵活性高的智能代理。它的核心优势在于支持与多种API和外部系统的无缝集成&…...
筑牢数字防线:商城系统安全的多维守护策略
一、构建网络安全防护屏障 网络安全是商城系统安全的第一道防线。企业应采用先进的防火墙技术,实时监控和过滤进出网络的流量,阻止非法访问和恶意攻击。入侵检测与防御系统(IDS/IPS)也是不可或缺的安全组件,它能够及…...
PTC加热片详解(STM32)
目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 三、程序设计 main文件 jdq.h文件 jdq.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 PTC是正温度系数热敏电阻的英文简称,其电阻值随着PTC热敏电阻本体温度的升高呈现阶跃性的增加。温度越高&…...
OpenCV 图形API(64)图像结构分析和形状描述符------在图像中查找轮廓函数findContours()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在二值图像中查找轮廓。 该函数使用[253]中的算法从二值图像检索轮廓。轮廓是形状分析以及对象检测和识别的有用工具。请参阅 OpenCV 示例目录中…...
GIS开发笔记(15)基于osg和osgearth实现三维地图上添加路网数据(矢量shp)
一、实现效果 二、实现原理 准备路网图层数据(.shp、.prj、.dbf、.cpg),设置样式、贴地,添加图层到地球节点。 三、参考代码 {// 获取当前可执行程序所在的目录QString exeDir = QCoreApplication::applicationDirPath();// 构造 Shapefile 文件的完整路径...
Golang日志模块之xlog
基于douyu的xlog 依赖 github.com/douyu/jupiter/pkg/xlog go.uber.org/zap gopkg.in/natefinch/lumberjack.v2log相关结构体 types/log.go type Log struct {Env string toml:"env"InfoLogFileName string toml:"infoLogFileName"Error…...
guvcview-源码记录
guvcview源码记录 一、概述二、项目结构1. guvcview2. gview_audio3. gview_encoder4. gview_render1. render.c2. render_sdl2.c3. render_osd_crosshair.c4. render_osd_vu_meter.c5. render_fx.c 3. gview_v4l2core 三、四、五、六、 一、概述 项目地址:guvcvie…...
对比2款国产远控软件,贝锐向日葵更优
贝锐向日葵和ToDesk是两款国产的远程控制软件,其中贝锐向日葵比较老牌,2009年就推出了最早的版本,而ToDesk则是在前几年疫情期间出现的。如果要在这两款远控软件中进行一个对比和选择,我们可以从功能配置、性能表现、系统支持、使…...
SOC估算:开路电压修正的安时积分法
SOC估算:开路电压修正的安时积分法 基本概念 开路电压修正的安时积分法是一种结合了两种SOC估算方法的混合技术: 安时积分法(库仑计数法) - 通过电流积分计算SOC变化 开路电压法 - 通过电池电压与SOC的关系曲线进行校准 方法原…...
maxscript根据音频创建动画表情
方案1: Python pydub / Audacity phoneme recognition 来提取语音中的音素(phonemes)并输出为 JSON 供 3ds Max 使用 方案2: Papagayo输出.pgo 文件,通过 Python 脚本解析,然后转换成 JSON。 下面介绍下方案2&#…...
使用ast解ob混淆时关于types的总结
在AST解OB混淆过程中,babel/types模块(简称types)是核心操作工具,以下是典型应用场景及具体代码示例: 一、字符串解密场景 场景:OB混淆常将字符串存储为十六进制或Unicode编码,需还原为明文 ty…...
每天学一个 Linux 命令(32):sort
可访问网站查看,视觉品味拉满: http://www.616vip.cn/32/index.html sort 是 Linux 中用于对文本文件的行进行排序的命令,支持按字典序、数字、月份等多种方式排序。以下是详细说明和示例: 命令语法 sort [选项]... [文件]...常用选项 -n 或 --numeric-sort 按数值大小…...
解释两个 Django 命令 makemigrations和migrate
python manage.py makemigrations 想象一下,你正在设计一个房子。在开始建造之前,你需要一个详细的蓝图来指导建筑过程。在 Django 中,当你定义或修改模型(比如 Employee),你实际上是在设计数据库的“房子…...
tkinter的窗口构建、原生组件放置和监测事件
诸神缄默不语-个人技术博文与视频目录 本文关注用Python3的tkinter包构建GUI窗口,并用tkinter原生组件来进行排版(通过pack() / grid() / place(),并监测基础的事件(如按钮被点击后获取文本框输入信息、单/多选框选择结果等&…...
Hot100方法及易错点总结2
本文旨在记录做hot100时遇到的问题及易错点 五、234.回文链表141.环形链表 六、142. 环形链表II21.合并两个有序链表2.两数相加19.删除链表的倒数第n个节点 七、24.两两交换链表中的节点25.K个一组翻转链表(坑点很多,必须多做几遍)138.随机链表的复制148.排序链表 N…...
WebUI可视化:第6章:项目实战:智能问答系统开发
第6章:项目实战:智能问答系统开发 学习目标 ✅ 完整实现前后端分离的问答系统 ✅ 掌握本地AI模型的集成方法 ✅ 实现对话历史管理功能 ✅ 完成系统部署与性能优化 6.1 项目整体设计 6.1.1 系统架构 graph TDA[用户界面] -->|输入问题| B(Web服务器)B -->|调用模型| …...
项目质量管理
项目质量管理核心要点与高频考点解析 一、项目质量管理核心框架 三大核心过程: 规划质量管理:制定质量标准和计划(预防为主)。实施质量保证:审计过程,确保符合标准(过程改进)。控…...
利用TTP协议 ETag + 路由守卫 实现前端发版后通知用户更新得一个方案
利用 ETag 做提示更新的实现方案 ETag(Entity Tag)是万维网协议HTTP的一部分,是HTTP协议提供的若干机制中的一种Web缓存验证机制,是一个可以与Web资源关联的记号(token),并且允许客户端进行缓存…...
uniapp-商城-36-shop 购物车 选好了 进行订单确认2 支付方式颜色变化和颜色滤镜filter
颜色滤镜,在好多网页都这样使用,滤掉彩色,显示黑白,这在一些关键的日子中都这样使用。 1、依然回到订单确认页面 看到支付的颜色了嘛? <view class"payType"><view class"box" :class&q…...
CSRF请求伪造
该漏洞主要是关乎于用户,告诫用户不可乱点击链接,提升自我防范,才能不落入Hacker布置的陷阱! 1. cookie与session 简单理解一下两者作用 1.1. 🍪 Cookie:就像超市的会员卡 存储位置:你钱包里…...