Tomcat概述

article/2025/5/20 7:37:12

文章目录

  • 一、Tomcat简介
    • (1)Tomcat概述
    • (2)Tomcat和Apache的比较
    • (3)Tomcat同类产品
    • (4)Tocmat和JDK的关系
    • (5)Tomcat和JDK版本对应图
  • 二、Tomcat工作原理
    • (1)Tomcat整体架构
    • (2)Container组件详解:
    • (3)Tomcat处理请求过程
    • (4)Tomcat中的连接器
    • (5)Tomcat的目录
    • (6)Tomcat常见日志
  • 三、部署Tomcat
    • (1)实验环境
    • (2)实验目的
    • (3)实验步骤
    • (4)扩展—安装mariadb数据库配置Tomcat的manager管理界面
    • (5)自定义页面
    • (6)配置Tomcat虚拟主机
    • (7)同一主机做两个实例的方法
    • (8)Tomcat主机名(域名)

一、Tomcat简介

(1)Tomcat概述

  • tomcat是由apache软件基金会下属的jakarta项目开发的一个servlet容器,安装SunMicrosystems提供的技术规范,实现了对servlet和javaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能
  • Tomcat可以解析静态页面也可以解析动态页面 (JSP页面) ,但是解析静态页面的效率没有apache好。可以解析动态页面是因为tomcat是java语言开发的,所以想要使用tomcat必须在服务器上安装JDK环境

在这里插入图片描述


(2)Tomcat和Apache的比较

  • 两者的相同点:
  1. 两者都是由Apache组织开发的
  2. 两者都有HTTP服务器的功能
  3. 两者都是开源的
  • 两者的不同点:
  1. Apache是专门用来提供HTTP服务的,以及相关配置的 (如虚拟主机、URL转发等HTTP服务器的基本功能) ,而Tomcat是Apache组织在符合Java EE的JSP、Servlet标准下开发的一个JSP服务器,所以按这个来说Tomcat只是有着HTTP服务的一些功能,并不是一个“专业”的HTTP服务
  2. Apache是一个Web服务器环境程序,启用Apache可以作为Web服务器来使用,不过只可以解析静态页面。如果想要解析动态页面 (JSP页面) 则需要一个解析动态页面的解释器,也就是一个中间件,而Tomcat就可以当这个中间件
  3. Apache侧重于HTTPServer,Tomcat侧重于servlet引擎,如果以Standalone方式运行,功能上与Apache相持平,支持JSP页面,但是对静态页面不太理想
  4. Apache是Web服务器,Tomcat是应用服务器,Tomcat只是一个servlet容器 (JSP也被翻译成servlet) ,可以认为是Apache的扩展,但是也可以独立运行

(3)Tomcat同类产品

  • Resin服务器
  • Jetty服务器
  • JBoss服务器
  • WebSphere服务器
  • Weblogic服务器

在实际环境中,使用最多的一般是Tomcat和Weblogic


扩展:

Weblogic是Orcale公司的产品 (Orcale公司的产品都是收费的) ,可以进一步细分为Weblogic Server、Weblogic Enterprise和Weblogic Portal等系列,其中Weblogic Server的功能特别强大,Weblogic支持企业级的、多层次的和完全分布式的Web应用,并且服务器的配置简单,界面友好,对于那些正在寻找能够提供Java平台所拥有的一切应用服务器的用户来说,Weblogic是一个十分理想的选择


(4)Tocmat和JDK的关系

在这里插入图片描述

  • JDK是开发人员开发使用,由java语言编写的,用来给java程序调用的
  • JRE是用来运行Java程序的,也就是Java程序的运行环境
  • JVM是整个Java实现跨平台运行的最核心部分,在运行java程序时,所有的Java程序会首先被编译成,class的类文件,这种类文件可以在虚拟机上执行,也就是说只要运行java的程序都是在JVM上面跑的

JDK包含JRE和JVM,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,这里的bin就是JVM,而lib中则是JVM工作所需要的类库,bin和lib两个文件夹合起来就是JRE。

JVM因为会与平台进行交互,所以使用c/c++和汇编语言编写的

JDK是java运行和编译的前提条件,而tomcat是web项目的运行容器是由java语言开发的,java没有JDK就没有办法进行编译和运行,必须依赖JDK的环境,所以安装Tomcat之前必须先安装JDK环境

(5)Tomcat和JDK版本对应图

在这里插入图片描述

二、Tomcat工作原理

(1)Tomcat整体架构

在这里插入图片描述

  • Server服务器(Tomcat服务器)包含一个或多个Service服务。
  • 而每个Service服务中又包含了Connector和Container两个核心组件和其他组件。
  • 核心组件Connector包含一个或多个Connector。
  • 核心组件Container包含一个Container。并且可以关联一个或者多个Connector

组件解析:

  1. Tomcat的有两个核心组件,相当于“心脏”,分别是Connector和Container
  2. 核心组件Connector是可以被替换的,这样会让Tomcat更加灵活
  3. 一个Container可以对应多个Connector,多个Connector和一个Container就形成了一个Service,有了Service就可以对外提供服务器,但是Service必须有一个可以生存的环境,而这个环境就是Server。Server可以控制Service的生命周期
  4. 在Service中,核心组件Connector主要负责对外交流也就是接受用户的请求,上面说到多个Connector是关联着一个Container的,而多个Connector接受的请求会发送给自己关联的Container,Container会处理这些请求,然后直接返回给Service
  5. 那么除了这两个核心组件之外,其他组件有什么用呢,其实两个核心组件提供的就是HTTP服务的基础功能,其他组件就像Apache、Nginx的一些模组一样,说白了Service就像一个箱子,把这些组件装到一起然后对外提供服务

(2)Container组件详解:

在这里插入图片描述

  • Engine:负责处理Connector发过来的所有请求,处理后,会将处理结果直接返回给Service,而Connector是作为Service与Engine的中间媒介出现的。

    一个Engine下可以配置一个默认主机和多个虚拟主机(Host),每个虚拟主机都有一个域名,当Engine获得一个请求时,他会把该请求匹配到某个虚拟主机host上,然后把请求交给该虚拟主机来处理。

    Engine有一个默认主机,当获得的请求无法匹配到任何虚拟主机时,这个请求最终会交给默认主机 (默认Host) 来处理。

    Engine以线程的方式启动Host,也就是说有几个虚拟主机,Tomcat就会产生相应的线程数。

  • Host:代表一个虚拟主机,每个虚拟主机和某个网络域名(Domain Name)相匹配。

    每个虚拟主机下都可以部署一个或多个Web应用,每个Web应用对应于一个Context,有一个Context path,当Host获得一个请求时,将把该请求匹配到某个Context上

  • Wrapper:代表一个Servlet容器,他负责管理一个Servlet,包括Servlet的装载、初始化、执行以及资源回收。

    Wrapper是最底层的容器,他没有子容器了

(3)Tomcat处理请求过程

在这里插入图片描述

  1. 客户端发送请求给Tomcat的8080端口,Connector接受请求
  2. Connector接受请求后发送给Container处理请求,Container交给Engine
  3. Engine分配虚拟主机处理请求
  4. 虚拟主机分配请求给Context
  5. Context交给Servlet实例处理请求
  6. Servlet处理完后交给Context
  7. Context交给Host
  8. Host交给Engine
  9. Engine直接把处理好的请求交给Service
  10. Service返回请求给客户端

HTTP协议、HTTPS协议、AJP协议和其他协议的请求都是这个处理过程

(4)Tomcat中的连接器

Tomcat中支持两种协议的连接器:HTTP/1.1和AJP/1.3和一个用来关闭Tomcat的连接器

  • HTTP/1.1协议负责建立HTTP连接,web应用通过浏览器访问Tomcat服务器使用的就是这个连接器,默认监听的端口是TCP8080端口

  • AJP/1.3协议负载和其他HTTP服务器建立连接,监听的是TCP8009端口,比如Tomcat和apache或者iis(windows的web服务)建立连接时就会用到这个连接器

  • 还有一个TCP8005的监听端口,这个的作用是用来关闭Tomcat的,所以说Tomcat中默认有三个连接器

(5)Tomcat的目录

目录作用
bin存放着启动和关闭tomcat的脚本
conf存放着不同的配置文件,server.xml是主配置文件
doc存放tomcat文档
lib/japser/common存放tomcat运行所需要的库文件
logs存放tomcat运行时产生的日志文件
src存放tomcat的源代码
webappstomcat默认的网页存放路径
work存放jsp编译后产生的class文件
  • bin下的配置文件:

server.xml:Tomcat的主配置文件,包含Service、Connector、Engine、Redin、Valve、Hosts等组件的相关配置信息

web.xml:遵循Servlet规范标准的配置文,用于配置servlet,并为所有的web应用程序提供包括MIME等默认配置信息

(6)Tomcat常见日志

日志存放路径:/usr/local/tomcat/logs/

日志作用
localhost.log程序异常没有被捕获的时候抛出的地方,记录Tomcat异常状态**(常用)**
catalina.out程序的输出、Tomcat的日志输出,记录所有类型的日志**(常用)**
localhost_access_log.txtTomcat访问成功日志**(常用)**
manager.log记录Tomcat根目录下webapps/manager项目所产生的日志
host-manager.log记录Tomcat根目录下webapps/host-manager项目所产生的日志

在这里插入图片描述

三、部署Tomcat

(1)实验环境

系统ip地址主机名Tomcat版本JDK版本
CentOS7.4192.168.100.202rzyapache-tomcat-8.5.16.tar.gzjdk-8u91-linux-x64.tar.gz

(2)实验目的

使客户端可以成功访问Tomcat

(3)实验步骤

******(1)先做基础配置
[root@Centos7 ~]# hostnamectl set-hostname rzy
[root@Centos7 ~]# su
[root@rzy ~]# systemctl stop firewalld
[root@rzy ~]# setenforce 0
setenforce: SELinux is disabled
[root@rzy ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙/dev/sr0 已经挂载到 /mnt 上******(2)上传Tomcat和JDK的压缩包,先安装JDK环境
[root@rzy ~]# ll
总用量 182152
-rw-------. 1 root root      1264 112 18:27 anaconda-ks.cfg
-rw-r--r--  1 root root   5147367 57 17:49 apache-tomcat-8.5.16.tar.gz
-rw-r--r--  1 root root 181367942 57 17:49 jdk-8u91-linux-x64.tar.gz
[root@rzy ~]# rpm -qa | grep java      #先查看本机是否有java
[root@rzy ~]# tar xf jdk-8u91-linux-x64.tar.gz      #解压JDK包
[root@rzy ~]# mv jdk1.8.0_91/ /usr/local/java      #移动解压后目录
[root@rzy ~]# ls /usr/local/java/      #确认是否移动成功
bin        db       javafx-src.zip  lib      man          release  THIRDPARTYLICENSEREADME-JAVAFX.txt
COPYRIGHT  include  jre             LICENSE  README.html  src.zip  THIRDPARTYLICENSEREADME.txt
[root@rzy ~]# cat <<a>> /etc/profile    #往profile配置文件中修改全局变量PATH,增加JDK也就是java的根目录和bin命令目录
> export PATH=$PATH:/usr/local/java/bin:/usr/local/java
> a
[root@rzy ~]# source /etc/profile  #执行脚本,使刚才操作生效
[root@rzy ~]# echo $PATH  #查看是否成功添加路径(优化执行路径)
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin:/usr/local/java
[root@rzy ~]# java -version  #查看java版本,可以成功查看说明已经成功添加java环境
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)******(3)安装完JDK后安装Tomcat
[root@rzy ~]# tar xf apache-tomcat-8.5.16.tar.gz 
[root@rzy ~]# mv apache-tomcat-8.5.16 /usr/local/tomcat
[root@rzy ~]# ls /usr/local/tomcat/
bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  webapps  work
[root@rzy ~]# /usr/local/tomcat/bin/startup.sh  #启动tomcat
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@rzy ~]# netstat -anpt | grep java #查看端口,发现三个监听端口,这个就是三个连接器
tcp6       0      0 :::8080                 :::*                    LISTEN      1227/java           
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1227/java           
tcp6       0      0 :::8009                 :::*                    LISTEN      1227/java    

测试:(访问服务器的8080端口)

在这里插入图片描述

(4)扩展—安装mariadb数据库配置Tomcat的manager管理界面

******(1)继续上面的步骤
[root@rzy ~]# yum -y install mariadb-server mysql #使用yum安装
。。。。。。
完毕!
[root@rzy ~]# systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@rzy ~]# systemctl start  mariadb
[root@rzy ~]# mysqladmin -u root -p password 
Enter password: 
New password: 
Confirm new password: 
[root@rzy ~]# mysql -u root -p123123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.56-MariaDB MariaDB ServerCopyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)MariaDB [(none)]> exit
Bye******(2)配置Tomcat的manager管理界面
[root@rzy ~]# vim /usr/local/tomcat/conf/tomcat-users.xml #末尾添加,要记得在</tomcat-users>项中添加,不然不会生效
。。。。。。44 <role rolename="manager-gui"/>  #添加管理页面的用户认证45 <user username="tomcat" password="tomcat" roles="manager-gui"/> #添加用户名和密码46 </tomcat-users>
。。。。。。
保存退出
[root@rzy ~]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml 
。。。。。。17 -->18 <Context antiResourceLocking="false" privileged="true" >19   <Valve className="org.apache.catalina.valves.RemoteAddrValve"20          allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+" /> #添加所有网段都可用21   <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionF    ilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>22 </Context>
。。。。。。
完毕!

先进行访问:

在这里插入图片描述

在这里插入图片描述

现在重启tomcat

在这里插入图片描述

再次进行访问:

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Dxs7Zre-1623291869479)(F:\个人文档\markdown图片\image-20210507105653073.png)]

成功查看状态

(5)自定义页面

[root@rzy webapps]# mkdir -p /web/webapp/
[root@rzy webapps]# vim /web/webapp/index.jsp
<html><head><title>JSP TEST PAGE1 </title></head><body><% out.println("aaaaaaaaaaaaaaaa");%></body>
</html>
[root@rzy webapps]# vim /usr/local/tomcat/conf/server.xml #修改主配置文件,这里直接使用localhost,没有修改域名
。。。。。。#这里删除了注释所以是33行,不删除注释是150行33             unpackWARs="true" autoDeploy="true">34         <Context docBase="/web/webapp" path="" reloadable="false"></Context> #修改网页存放路径35         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"36     
。。。。。。
保存退出

测试,验证
在这里插入图片描述

(6)配置Tomcat虚拟主机

******(1)继续上面的操作,先创建虚拟主机的目录
[root@rzy ~]# mkdir -p /web2/webapp/
[root@rzy ~]# cp /web/webapp/index.jsp  /web2/webapp/index.jsp
[root@rzy ~]# sed -i 's/a/b/g' /web2/webapp/index.jsp 
[root@rzy ~]# cat /web2/webapp/index.jsp 
<html><hebd><title>JSP TEST PAGE1 </title></hebd><body><% out.println("bbbbbbbbbbbbbbbb");%></body>
</html>******(2)修改配置文件
[root@rzy ~]# vim /usr/local/tomcat/conf/server.xml  #以<!-- 开头 -->结尾的都是注释,可以自行删除
。。。。。。 #复制Host区域,一个Host就是一个虚拟主机,域名不同然后把两个虚拟主机的网页存放路径指向不同的路径即可32       <Host name="www.aaa.com"  appBase="webapps"33             unpackWARs="true" autoDeploy="true">  #设置自动识别war包,开启自动部署34         <Context docBase="/web/webapp" path="" reloadable="false"></Context> #设置网页存放路径,tomcat把web应用程序映射为root URL路径,reloadable选项建议为false35         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"36                prefix="localhost_access_log" suffix=".txt"37                pattern="%h %l %u %t &quot;%r&quot; %s %b" />38       39       </Host>40       <Host name="www.bbb.com"  appBase="webapps"41             unpackWARs="true" autoDeploy="true">42         <Context docBase="/web2/webapp" path="" reloadable="false"></Context>43         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"44                prefix="localhost_access_log" suffix=".txt"45                pattern="%h %l %u %t &quot;%r&quot; %s %b" />46       47       </Host>
。。。。。。
#保存退出
[root@rzy ~]# /usr/local/tomcat/bin/shutdown.sh  #重启tomcat
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@rzy ~]# /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

测试,修改hosts文件

在这里插入图片描述

访问不同的域名,要记得加端口号,发现出现两个不同的网页

在这里插入图片描述

(7)同一主机做两个实例的方法

  1. 在主配置文件中,直接把所有的Service区域复制一下,修改两个连接器的端口号不冲突即可
[root@rzy ~]# vim /usr/local/tomcat/conf/server.xml
。。。。。。17   <Service name="Catalina">18     <Connector port="8080" protocol="HTTP/1.1"  #端口号不能相同,域名和网页存放路径也不能相同19                connectionTimeout="20000"20                redirectPort="8443" />21     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> #8080和8009的端口22     <Engine name="Catalina" defaultHost="localhost">23       <Realm className="org.apache.catalina.realm.LockOutRealm">24         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"25                resourceName="UserDatabase"/>26       </Realm>27       <Host name="www.aaa.com"  appBase="webapps"28             unpackWARs="true" autoDeploy="true">29         <Context docBase="/web/webapp" path="" reloadable="false"></Context>30       </Host>31     </Engine>32   </Service>33   <Service name="Catalina">34     <Connector port="8081" protocol="HTTP/1.1"   #改成8081和801035                connectionTimeout="20000"36                redirectPort="8443" />37     <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />38     <Engine name="Catalina" defaultHost="localhost">39       <Realm className="org.apache.catalina.realm.LockOutRealm">40         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"41                resourceName="UserDatabase"/>42       </Realm>43       <Host name="www.bbb.com"  appBase="webapps"44             unpackWARs="true" autoDeploy="true">45         <Context docBase="/web2/webapp" path="" reloadable="false"></Context>46       </Host>47     </Engine>48   </Service>49 </Server>
#保存退出
[root@rzy ~]# /usr/local/tomcat/bin/shutdown.sh  #重新启动
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@rzy ~]# /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@rzy ~]# netstat -anpt | grep java  #查看端口,发现有五个端口,一个8005是关闭tomcat的端口,另外四个就是两个实例的连接器的端口
tcp6       0      0 :::8080                 :::*                    LISTEN      17004/java          
tcp6       0      0 :::8081                 :::*                    LISTEN      17004/java          
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      17004/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      17004/java          
tcp6       0      0 :::8010                 :::*                    LISTEN      17004/java    

测试 (端口要注意修改)创建实例成功

在这里插入图片描述

  1. 第二种方法简单粗暴,直接装两台tomcat,路径不一样,修改端口和域名即可(略)

(8)Tomcat主机名(域名)

Tomcat在给虚拟主机配置域名之后,客户端只能访问域名,访问ip也是无法访问,这样可以防止恶意域名绑定,有的人会把自己的ip绑到某个服务器的域名,配置之后使用ip访问是无法正常访问的

在这里插入图片描述


http://chatgpt.dhexx.cn/article/m2MioIvH.shtml

相关文章

tomcat的简介

1. tomcat是什么 Tomcat是Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta 项目中的一个核心项目&#xff0c;由Apache、Sun 和其他一些公司及个人共同开发而成。 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应…

仿酷狗音乐播放器开发日志十八——换肤功能的实现二:改变控件和窗体透明度(附挂件类源码)

转载请说明原出处&#xff0c;谢谢~~ 昨天把大致布局分析了一下&#xff0c;昨天晚上把布局写好实现了&#xff0c;今天把大致的功能完成了一下&#xff0c;现在的外观已经和原酷狗的换肤界面完全一样&#xff0c;其中的调整播放列表透明度和设置整个软件透明度的代码已经完成了…

stylish网站换肤与网站分析妙用

作者&#xff1a;吴甜甜 个人博客网站&#xff1a; wutiantian.github.io 微信公众号&#xff1a; 吴甜甜的博客 stylish是火狐浏览器等平台的换肤插件 结合F12开发者功能可以进行&#xff1a; 背景色看起来不舒服&#xff0c;想换种颜色页面有一些内容你不想看到&#xff0c…

Unity3D 模型换肤技术

最近在看Unity3D的人物模型和动画。所以今天先说下人物的换装吧。相信大家都玩过网游吧&#xff0c;没有玩过的也相信见过&#xff0c;就是网游或者单机游戏里的人物会有更换服装&#xff0c;更换武器的功能。如果外形(mesh)是一样的&#xff0c;那么把贴图换下就好&#xff0c…

C++ QT结合FFmpeg实战开发视频播放器-13视频播放器换肤功能实现(1)背景属性添加

视频播放器换肤功能实现(1)背景属性添加 作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 视频播放器换肤功能实现(1)背景属性添加 回到我们的编辑器源码中&#xff0c; 运行程序&am…

iOS端实现节日换肤

本文是我在网上看到一篇不错的文章,因为之前没接触过,所以特意转过来,和大家一起分享下..以下正文:一、问题的提出  不知道大家有没有发现, 元旦期间, 很多APP界面里的图标都换成了具有节日气氛的样式,而在过了元旦节之后, 这些图标又悄无声息的变回了本来的面貌.   这些具…

换肤 与 静态库

一 换肤 基本的换肤功能实现选中皮肤保存至系统偏好 // 记录用户选中的皮肤[[NSUserDefaults standardUserDefaults] setObject:skinColor forKey:"skinColor"];[[NSUserDefaults standardUserDefaults] synchronize];123123 抽取SkinTools单例&#xff0c;简化视图…

C++ QT结合FFmpeg实战开发视频播放器-15换肤功能的后台实现

作者&#xff1a;虚幻私塾 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 一、换肤功能的后台实现 定义changeBackground函数&#xff0c;让qml去调用这个函数来实现换肤功能&#xff0c; 函数的实现调用了set…

Element UI主题换肤功能(基于vue-element-admin框架)

环境信息&#xff1a; 日期&#xff1a;2022-08-05 node版本&#xff1a;v14.15.4 "sass": "1.26.8", "sass-loader": "8.0.2", 本次实现的是基于花裤衩大佬的 vue-element-admin 或者 vue-admin-template 的前端框架实现的主题换肤功…

JavaScript:演示Ajax的get和post请求,练习选顶卡和换肤案例

JavaScript:演示Ajax的get和post请求&#xff0c;练习选顶卡和换肤案例 Ajax 异步请求 特别提示: 异步请求不要使用live server插件,必须创建一个本地服务器环境 同步与异步 以前端请求,后端响应为例 同步: 前端发请求, 必须等到后端响应完成,才允许发送另一个请求异步: 前端…

Android换肤之Android-skin-support

前言 之前做个APP需要用到换肤&#xff0c;在githup上面找了很久&#xff0c;终于找到一款功能强大、基本能够满足产品需求的换肤框架&#xff0c;那就是Android-skin-support&#xff0c;这个框架换肤功能很强大、不管是白天、黑夜还是任意颜色、图片的皮肤包都可以&#xff…

对 Android 应用换肤方案的总结

作者&#xff1a;me 虽然现在已经有很多不错的换肤方案&#xff0c;但是这些方案或多或少都存在自己的问题。在这篇文章中&#xff0c;我将对 Android 现有的一些动态换肤方案进行梳理&#xff0c;对其底层实现原理进行分析&#xff0c;然后对开发一个新的换肤方案的可能性进行…

前端换肤,聊一聊主题切换那些事

一些网站通常会提供白天、夜间模式&#xff0c;以及自定义主题等等&#xff0c;这种主题切换也就是本文说的前端换肤。 这次案例用的是白天和夜间模式的切换&#xff0c;在做换肤之前&#xff0c;得先知道一件事情&#xff1a;css的变量定义&#xff0c;对变量定义不熟悉的同学…

android 皮肤,Android换肤

前言 之前做个APP需要用到换肤&#xff0c;在githup上面找了很久&#xff0c;终于找到一款功能强大、基本能够满足产品需求的换肤框架&#xff0c;那就是Android-skin-support&#xff0c;这个框架换肤功能很强大、不管是白天、黑夜还是任意颜色、图片的皮肤包都可以&#xff0…

Android 应用换肤方案的总结

虽然现在已经有很多不错的换肤方案&#xff0c;但是这些方案或多或少都存在自己的问题。在这篇文章中&#xff0c;我将对 Android 现有的一些动态换肤方案进行梳理&#xff0c;对其底层实现原理进行分析&#xff0c;然后对开发一个新的换肤方案的可能性进行总结。 1、通过自定…

Android 插件化换肤方案

效果 实现流程 实现LayoutInflater.Factory2这个接口&#xff0c;实现onCreateView方法(主要仿照系统原来LayoutInflater.createView()方法的实现)&#xff0c;此处可以拿到页面中所有的View&#xff0c;判断有没有需要换肤的View&#xff0c;并且保存下来&#xff1b;在Activ…

墨迹天气桌面挂件换肤分析

该篇文章需要准备如下工具&#xff1a; 1、墨迹皮肤文件&#xff0c;下载地址。 Andorid换肤在网上搜索出来的结果&#xff0c;大概有三种&#xff1a; 1、应用本身带有写好的布局 优点&#xff1a;开发难度低 缺点&#xff1a;灵活性低&#xff0c;用户不能自定义皮肤。 2、使…

前端换肤的一些思考

先看看大家怎么做的。下面是两篇别人写的文章&#xff0c;最后是我自己的方法。 第一篇&#xff1a;聊一聊前端换肤 之前在做网站换肤&#xff0c;所以想谈谈网站换肤的实现。网页换肤就是修改颜色值&#xff0c;因此重点就在于怎么来替换。 一般实现 如上图&#xff0c;我们…

Visio保存为网页出错

visio 试图保存文档时出错。已创建的页面可能无效。 试图保存文档时出错。以创建的页面可能无效。最近在用Visio作图的时候时长发生的问题。 经过摸索&#xff0c;不覆盖保存没有问题&#xff0c;如果覆盖保存&#xff0c;有时会有这个问题。解决办法就是把以前生成的网页和相关…

Visio 2016软件

Visio 2016是微软官方最新发布的一款领先的图表解决方案&#xff0c;它可以帮助企业制作定义流程、编辑最佳方案的同时还可以建立可视化计划变革的一款实用工具。这款软件目前提供了&#xff1a;上手图例&#xff08;starter diagrams&#xff09;、成百上千的智能形状、一步数…