Tomcat的设置文件主要包括server.xml和web.xml,它们位于Tomcat安装目次下的conf文件夹中。今天的内容重点先容 server.xml 文件的设置,V 哥会联合一些业务场景来先容,希望可以帮助到你,以下是一些关键的设置项及其作用:
server.xml中的设置项:
- : 根元素,界说了Tomcat服务器的设置。
- port: 用于设置Tomcat服务器的端口,默认是8005。
- : 界说服务的元素,包含一个或多个和。
- name: 服务的名称。
- port: 服务监听的端口。
- : 界说HTTP连接的设置。
- port: HTTP连接的端口,默认是8080。
- protocol: 连接使用的协议,如HTTP/1.1。
- redirectPort: 当使用SSL时,非SSL哀求被重定向到的端口。
- : 界说引擎的设置,引擎是Tomcat的组件,用于路由哀求到相应的。
- : 界说假造主机的设置。
- name: 假造主机的名称,可以是域名或IP地址。
- appBase: 应用程序的基础目次。
- unpackWAR: 是否解压WAR文件。
- : 界说Web应用程序的上下文设置。
- path: Web应用程序的路径。
- docBase: Web应用程序的基础目次或WAR文件的路径。
- reloadable: 是否允许重新加载应用程序。
- : 界说服务器监听器,用于实行启动和停止利用。
- : 界说安全域,用于认证和授权。
- : 界说哀求处理过程中的阀门,可以拦截或处理哀求。
1.
元素是Tomcat设置文件server.xml中的根元素,它包含了整个Tomcat服务器的设置信息。以下是一些具体的业务场景和相应的设置示例:
场景1:开发环境
在开发环境中,我们通常希望Tomcat服务器可以或许快速重启以便于开发和测试。因此,可以设置较短的JVM暂停时间,以便在发生错误时快速响应。场景2:生产环境
在生产环境中,稳定性和安全性是主要考虑的因素。因此,大概必要设置更长的JVM暂停时间来减少重启次数,同时设置SSL证书以支持HTTPS。场景3:负载均衡
如果Tomcat服务器作为负载均衡集群的一部分,大概必要设置特定的端口用于集群通信,比方使用Tomcat的集群部署协议。场景4:多实例部署
在必要在同一台服务器上部署多个Tomcat实例的场景中,可以为每个实例设置不同的端口。2.
元素在Tomcat的server.xml设置文件中界说了一个服务,它将一个或多个连接器()与一个引擎()关联起来。以下是根据不同业务场景的设置示例:
场景1:单实例应用
对于大多数基本应用,您大概只必要一个服务实例来处理所有的HTTP哀求。以下是一个基本的设置:场景2:支持SSL的HTTPS服务
如果您的应用必要通过HTTPS提供安全连接,您必要设置一个支持SSL的:场景3:负载均衡
在负载均衡场景中,您大概必要多个服务实例来处理哀求。每个服务可以绑定到不同的端口,并设置为处理不同范例的哀求:场景4:多个Web应用
如果您必要在同一台服务器上运行多个Web应用,可以为每个应用设置不同的:场景5:高可用性设置
在必要高可用性的业务场景中,可以设置多个服务实例,每个实例运行在不同的端口上,并通过集群管理器进行管理:3.
元素在Tomcat的server.xml设置文件中界说了服务器的网络连接参数,它用于处理客户端的HTTP哀求。以下是根据不同业务场景的设置示例:
场景1:HTTP服务
对于基本的HTTP服务,您必要设置一个标准的HTTP连接器:- [/code]
- [list]
- [*]port: 设置HTTP服务监听的端口。
- [*]protocol: 指定使用的协议,这里使用Tomcat的HTTP/1.1处理器。
- [*]connectionTimeout: 哀求超时时间(毫秒)。
- [*]redirectPort: 当客户端使用HTTP哀求时,重定向到的HTTPS端口。
- [/list][size=4]场景2:HTTPS服务[/size]
- 如果您的应用必要通过HTTPS提供加密连接,您必要设置一个支持SSL的连接器:
- [code]
复制代码
- scheme: 设置为https表示使用安全的连接。
- secure: 设置为true表示哀求必要安全连接。
- SSLEnabled: 设置为true以启用SSL。
- keystoreFile: 指定包含SSL证书的密钥库文件路径。
- keystorePass: 密钥库的密码。
场景3:性能优化
对于必要处理大量并发哀求的应用,可以设置NIO(非阻塞I/O)或NIO2的连接器来进步性能:- [/code]
- [list]
- [*]maxThreads: 最大工作线程数。
- [*]minSpareThreads: 保持运行的最小空闲线程数。
- [*]acceptCount: 可以担当的哀求队列长度。
- [/list][size=4]场景4:限定哀求巨细[/size]
- 为了防止服务器被大文件上传拖慢,可以限定哀求的最大巨细:
- [code]
复制代码
- maxPostSize: 最大POST哀求巨细,这里设置为20MB。
场景5:启用GZIP压缩
为了减少网络传输的数据量,可以设置连接器以启用GZIP压缩:- [/code]
- [list]
- [*]compression: 设置为on以启用压缩。
- [*]compressionMinSize: 启用压缩的哀求最小巨细(字节)。
- [*]noCompressionUserAgent: 不应用压缩的浏览器列表。
- [/list][size=4]场景6:设置代理设置[/size]
- 如果您的Tomcat服务器位于一个或多个代理之后,您大概必要设置连接器以正确处理哀求头:
- [code]
复制代码
- proxyName: 代理服务器的主机名。
- proxyPort: 代理服务器监听的端口。
4.
元素在Tomcat的server.xml设置文件中代表了一个哀求引擎,它负责吸收中的转发的哀求,并将哀求路由到相应的或。以下是根据不同业务场景的设置示例:
场景1:基本Web应用路由
对于基本的Web应用部署,您大概只必要将哀求路由到默认的假造主机:
- name: 引擎的名称,通常与元素的名称相匹配。
- defaultHost: 哀求无法匹配到任何时使用的默认主机名。
场景2:部署多个假造主机
如果您必要在同一台服务器上部署多个假造主机,可以在同一个下设置多个:场景3:集群部署
在必要高可用性的集群部署场景中,可以设置集群管理器来同步会话信息:
- jvmRoute: 当前实例的JVM路由标识,用于集群中的会话查找。
场景4:自界说哀求过滤器
如果您必要对所有哀求应用自界说过滤器,可以在下设置:
- className: 指定自界说过滤器的完整类名。
场景5:访问日志设置
为了记录所有哀求的访问日志,可以在下设置访问日志阀:
- directory: 访问日志文件存储的目次。
- prefix和suffix: 日志文件的前缀和后缀。
- pattern: 日志记录的格式。
- rotate: 是否启用日志轮转。
5.
元素在Tomcat的server.xml设置文件中设置了一个假造主机,它处理指向特定主机名或IP地址的哀求。以下是根据不同业务场景的设置示例:
场景1:单个应用的假造主机
对于单个应用的部署,您可以设置一个假造主机,所有哀求都会映射到这个应用:- <Host name="myapp.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
- <Host name="secure.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true"
- <Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context><Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context><Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context>sslProtocol="TLS" sslCertificateFile="/path/to/certificate.cer"
- <Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context><Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context><Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context>sslCertificateKeyFile="/path/to/key.key" sslPort="8443">
- <Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context>
- </Host>
- </Host>
复制代码 场景2:多个应用的假造主机
如果您希望一个假造主机管理多个应用,可以在下设置多个:
- path: Web应用的路径。
- docBase: Web应用的文档基础路径或WAR文件名。
场景3:使用外部界说的Context
在复杂的部署场景中,您大概希望将设置在外部XML文件中,以保持server.xml的清楚:
- 的path可以留空,表示应用的根路径。
- docBase可以指向包含context.xml文件的目次。
场景4:设置别名
如果您希望假造主机响应多个域名,可以使用元素:场景5:设置SSL
对于必要SSL加密的假造主机,可以设置一个SSL连接器,并在中指定SSL相关属性:- <Host name="myapp.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
- <Host name="secure.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true"
- <Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context><Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context><Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context>sslProtocol="TLS" sslCertificateFile="/path/to/certificate.cer"
- <Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context><Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context><Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context>sslCertificateKeyFile="/path/to/key.key" sslPort="8443">
- <Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context>
- </Host>
- </Host>
复制代码
- sslProtocol: 使用的SSL协议。
- sslCertificateFile和sslCertificateKeyFile: SSL证书和私钥文件的路径。
- sslPort: SSL端口,当客户端通过这个端口访问时,将使用SSL。
场景6:禁用某些HTTP方法
出于安全考虑,您大概希望禁用某些HTTP方法:6.
元素在Tomcat的server.xml设置文件中界说了Web应用程序的上下文。每个代表一个Web应用,包括它的路径、文档基础、会话管理和其他特定于应用的设置。以下是根据不同业务场景的设置示例:
场景1:基本Web应用部署
对于基本的Web应用部署,您必要指定应用的路径和文档基础:- [/code]
- [list]
- [*]path: Web应用的URL路径。
- [*]docBase: Web应用的目次或WAR文件的名称。
- [/list][size=4]场景2:设置外部WAR文件[/size]
- 如果您有一个外部WAR文件,希望部署为特定的上下文路径:
- [code]
复制代码 场景3:使用相对路径的WAR文件
在某些情况下,您大概希望使用相对于appBase的相对路径:- [/code][size=4]场景4:设置会话超时[/size]
- 为了管剖析话的生命周期,您可以设置会话超时时间(以分钟为单位):
- [code]
复制代码 场景5:启用应用的重新加载
在开发过程中,您大概希望在代码更改后主动重新加载应用:- [/code]
- [list]
- [*]reloadable: 设置为true以启用应用的主动重新加载。
- [/list][size=4]场景6:设置资源链接[/size]
- 如果您的应用必要连接到外部资源(如数据库),您可以设置资源链接:
- [code]<Host name="myapp.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
- <Host name="secure.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true"
- <Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context><Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context><Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context>sslProtocol="TLS" sslCertificateFile="/path/to/certificate.cer"
- <Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context><Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context><Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context>sslCertificateKeyFile="/path/to/key.key" sslPort="8443">
- <Context path="/myapp" docBase="myapp">
- <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
- <Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
- <LocaleConfig defaultLocale="en" />
- <CharsetConfig>
- <Charset name="UTF-8" />
- </CharsetConfig>
- </Context> name="jdbc/myAppDB" />
- </Context>
- </Host>
- </Host>
复制代码
- ResourceLink: 界说了一个资源链接,允许应用访问在中界说的资源。
场景7:设置安全设置
对于必要安全认证的应用,您可以设置安全约束和角色:
- SecurityConstraint: 界说了哪些资源必要安全保护。
- WebResourceCollection: 界说了受保护的URL模式和HTTP方法。
- AuthConstraint: 界说了允许访问的的角色。
- Valve: 指定了认证的范例(比方,基本认证)。
场景8:设置字符集和本地化
为了确保应用正确处理国际化内容,您可以设置字符集和本地化:
- useHttpOnly: 设置为true以启用HttpOnly Cookies。
- LocaleConfig: 界说了默认地区设置。
- CharsetConfig: 界说了应用使用的字符集。
7.
元素在Tomcat的server.xml设置文件中用于注册事件监听器,这些监听器在Tomcat的生命周期事件(如启动和停止)发生时被调用。以下是根据不同业务场景的设置示例:
场景1:自界说上下文初始化
如果您必要在Tomcat启动时实行自界说逻辑,比如初始化数据库连接池或加载应用程序特定的资源,可以界说一个自界说的上下文监听器:- [/code]
- [list]
- [*]className: 指定自界说监听器的完整类名。
- [/list][size=4]场景2:SSL证书管理[/size]
- 在必要动态加载或刷新SSL证书的业务场景中,可以使用自界说的证书管理监听器:
- [code]
复制代码 场景3:集群会话管理
当Tomcat设置为集群模式时,可以使用特定的监听器来管剖析话复制:- [/code]
- [list]
- [*]这个监听器是Tomcat集群会话管理的一部分,用于设置JVM路由。
- [/list][size=4]场景4:哀求日志记录[/size]
- 为了记录所有进入Tomcat的哀求,可以设置哀求日志监听器:
- [code]
复制代码
- AccessLogValve: 用于记录访问日志的监听器,可以设置日志的目次、前缀、后缀和日志模式。
场景5:性能监控
为了监控Tomcat的性能,可以添加性能监控监听器:- [/code][size=4]场景6:Tomcat资源管理[/size]
- Tomcat的资源管理监听器可以用于跟踪和管理JNDI资源:
- [code]
复制代码 场景7:自界说用户数据管理
如果您必要在Tomcat启动或停止时加载或保存用户数据,可以界说一个自界说的用户数据管理监听器:- [/code][size=4]场景8:Tomcat安全监听器[/size]
- Tomcat提供了一些内置的安全监听器,用于在启动和停止时进行安全相关的初始化和清算:
- [code]
复制代码 8.
元素在Tomcat的server.xml设置文件中界说了安全域,它负责处理用户认证和授权。以下是根据不同业务场景的设置示例:
场景1:使用内存认证
在开发环境中,您大概希望使用内存中的用户和角色列表进行认证:- [/code][size=4]场景2:使用JDBC数据库认证[/size]
- 对于生产环境,您大概必要使用数据库存储用户信息和角色信息:
- [code]
复制代码
- driverName: JDBC驱动的类名。
- connectionURL: 数据库连接URL。
- dataSourceName: JNDI资源名称,用于查找数据源。
- userTable: 存储用户信息的数据库表。
- userCredColumn: 存储密码的列。
- userNameColumn: 存储用户名的列。
场景3:使用JAAS认证
如果您的应用必要使用Java Authentication and Authorization Service (JAAS),可以设置JAAS认证:- [/code]
- [list]
- [*]appName: JAAS应用的名称。
- [/list][size=4]场景4:使用LDAP认证[/size]
- 当用户信息存储在LDAP服务器时,可以使用LDAP认证:
- [code]
复制代码
- userPattern: LDAP中用户信息的搜索模式。
- connectionName: 连接LDAP服务器的用户名。
- connectionPassword: 连接LDAP服务器的密码。
- url: LDAP服务器的URL。
场景5:使用自界说Realm
如果您有特殊的认证需求,可以创建自界说的Realm实现:
- CombinedRealm: 组合多个Realm的认证器。
场景7:使用容器管理的Realm
如果您使用Tomcat在应用服务器(如GlassFish或JBoss)中,大概必要使用容器管理的Realm:- [/code]
- [list]
- [*]ignoreEmptyPassword: 是否忽略空密码。
- [/list][size=5]9. [/size]
- 元素在Tomcat的server.xml设置文件中用于插入自界说的处理逻辑,这些处理逻辑可以在哀求处理管道的不同阶段实行。以下是根据不同业务场景的设置示例:
- [size=4]场景1:访问日志记录[/size]
- 记录每个哀求的详细日志信息,这对于分析流量和调试应用非常有用:
- [code]
复制代码
- pattern: 界说日志的格式,%h, %l, %u, %t, %r, %s, %b 分别代表主机名、登录名、用户ID、时间、哀求行、状态码和字节数。
场景2:哀求响应时间记录
监控每个哀求的响应时间,以评估应用性能:- [/code][size=4]场景3:哀求过滤[/size]
- 过滤特定的哀求,比方禁用或限定某些HTTP方法:
- [code]
复制代码 场景4:静态资源缓存
为静态资源设置缓存头,以进步响应速率和减少服务器负载:- [/code]
- [list]
- [*]cache: 界说缓存的巨细和时间(TTL)。
- [/list][size=4]场景5:SSL认证[/size]
- 强制所有哀求都使用SSL连接,加强应用安全性:
- [code]
复制代码
- keystoreFile: 密钥库文件的路径。
- keystorePass: 密钥库的密码。
场景6:哀求重写
根据特定规则重写哀求URI,用于URL重定向或重写:- [/code][size=4]场景7:自界说哀求处理[/size]
- 实行自界说的哀求处理逻辑,比方用户哀求的预处理或后处理:
- [code]
复制代码 场景8:会话管理
自界说会话管理逻辑,比方会话超时处理或会话持久化:- [/code][size=4]场景9:错误页面定制[/size]
- 自界说错误页面的响应,比方为不同的HTTP状态码界说不同的错误页面:
- [code]
复制代码
- showReport: 是否显示详细的错误报告。
- showServerInfo: 是否显示服务器信息。
最后
以上是 server.xml 文件中重要的设置项,在项目应用中,不同的场景设置也不同,以上供你参考,如果你愿意分享你在项目中的设置场景案例,接待评论区见,卷的期间,兄弟们一起搀扶前行。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |