Tomcat应用部署

一、Tomcat介绍

概述:Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器

Apache与Tomcat的比较

相同点:
1、两者都是Apache组织开发的
2、两者都有HTTP服务的功能
3、两者都是免费的

不同点:
1、Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等),而TomcatApache组织在符合Java EEJSPServlet标准下开发的一个JSP服务器.
2、Apache是一个Web服务器环境程序,启用他可以作为Web服务器使用,不过只支持静态网页。如果要在Apache环境下运行JSP的话就需要一个解释器来执行JSP网页,而这个JSP解释器就是Tomcat
3、Apache侧重于HTTPServer ,Tomcat侧重于Servlet引擎,如果以Standalone方式运行,功能上与Apache等效,支持JSP,但对静态网页不太理想
4、ApacheWeb服务器,Tomcat是应用(Java)服务器,它只是一个ServletJSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行

Tomcat同类产品:

1、Resin 服务器
ResinCaucho公司的产品,是一个非常流行的支持Servlet和JSP的服务器,速度非常快。Resin本身包含了一个支持HTMLWeb服务器,这使它不仅可以显示动态内容,而且显示静态内容的能力也毫不逊色,因此许多网站都是使用Resin服务器构建

2、Jetty 服务器
Jetty是一个纯粹的基于Java的网页服务器和Java Servlet容器。尽管网页服务器通常用来为人们呈现文档,但是Jetty通常在较大的软件框架中用于计算机与计算机之间的通信。Jetty作为Eclipse基金会的一部分,是一个自由和开源项目

3、JBoss服务器
JBoss是一个种遵从JavaEE规范的、开放源代码的、纯JavaEJB服务器,对于J2EE有很好的支持。JBoss采用JML API实现软件模块的集成与管理,其核心服务又是提供EJB服务器,不包含ServletJSPWeb容器,不过它可以和Tomcat完美结合

4、WebSphere 服务器
WebSphereIBM公司的产品,可进一步细分为 WebSphere Performance PackCache ManagerWebSphere Application Server等系列,其中WebSphere Application Server 是基于Java 的应用环境,可以运行于 Sun Solaris、Windows NT 等多种操作系统平台,用于建立、部署和管理InternetIntranet Web应用程序

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

二、Tomcat与jdk

JDK是开发人员开发使用,jre是用来运行java程序,就是java程序的运行环境,jvm是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为class的类文件,这种类文件可以在虚拟机上执行
JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹binlib,在这里可以认为bin里的就是jvmlib中则是jvm工作所需要的类库,而jvm lib和起来就称为jrejdkjava语言编写的,用来给java程序调用的,jvm因为与平台进行交互,是用c/c++和汇编语言编写的;
jdkjava运行和编译的,tomcatweb项目的运行容器,java没有jdk没办法编译运行,java运行必须依赖jdk的环境,所以安装tomcat前必须要安装jdk环境

下载位置
Tomcat下载地址:Apache Tomcat® - Apache Tomcat 9 Software Downloads
jdk下载地址:Java 归档文件下载 - Java SE 8 (oracle.com)

解释:

Java SE(Java Platform,Standard Edition):Java SE 是做电脑上运行的软件
Java EE(Java Platform,Enterprise Edition):Java EE 是用来做网站的(我们常见的JSP技术)
Java ME(Java Platform,Micro Edition):Java ME 是做手机软件的

对应关系:

 三、Tomcat内部工作原理及模型协议

 tomcat整体架构:

组件关联:
1、Tomcat 的心脏是两个组件:ConnectorContainerConnector 组件是可以被替换,这样显得更加灵活,一个 Container 可以选择对应多个 Connector。多个 Connector 和一个 Container 就形成了一个 Service,有了 Service 就可以对外提供服务了,但是 Service 还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非 Server 莫属了。所以整个 Tomcat 的生命周期由 Server 控制
2、我们将 Tomcat Connector、Container 作为一个整体比作一对情侣的话,Connector 主要负责对外交流,可以比作为 BoyContainer 主要处理 Connector 接受的请求,主要是处理内部事务,可以比作为 Girl。那么这个 Service 就是连接这对男女的结婚证了。是Service 将它们连接在一起,共同组成一个家庭。当然要组成一个家庭还要很多其它的元素说白了,Service 只是在 Connector Container 外面多包一层,把它们组装在一起,向外面提供服务,一个 Service 可以设置多个 Connector,但是只能有一个 Container 容器

Engine:负责处理所有请求,处理后,将结果返回给service,而connector是作为serviceengine的中间媒介出现的。 作为交流者;一个engine下可以配置一个默认主机,每个虚拟主机都有一个域名。当engine获得一个请求时,它把该请求匹配到虚拟主机host上,然后把请求交给该主机来处理。 Engine有一个默认主机,当请求无法匹配到任何一个虚拟主机时,将交给默认host来处理。Engine以线程的方式启动Host
Host:代表一个虚拟主机,每个虚拟主机和某个网络域名(Domain Name)相匹配。 每个虚拟主机下都可以部署一个或多个web应用,每个web应用对应于一个context,有一个context path。 当Host获得一个请求时,将把该请求匹配到某个Context上;
Wrapper: 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。Wrapper 是最底层的容器,它没有子容器了

Tomcat Coyote支持的IO 模型与协议

应用层 应用层协议 说明
НТТP/1.1 这是大部分Web应用采用的访问协议
AJP 用于和WX集成(如Apache) ,以实现对静态资源的优化以及集群部署,当前支持AJP/1.3
HТIP/2HTTP 2.0大幅度的提升了Web性能。下一代HTTP协议, 自8.5以及9.0版本之后支持 
传输层 IO模型 说明
NIO 非阻塞I/O,采用Java NIO类库实现非阻塞I/O,采用Java NIO类库实现
NIO2 NIO2 异步I/O,采用JDK 7最新的NIO2类库实现
APR 采用Apache可移植运行库实现,是C/C++编写的本地库。如果选择该方案,需要单独安装APR

应用层默认协议:HTTP/1.1
传输层默认IO模型:NIO

四、 tomcat配置说明

Tomcat的目录:

目录说明
bin存放启动和关闭tomcat脚本
conf存放不同的配置文件(server.xml和web.xml)
doc存放Tomcat文档
lib/japser/common存放Tomcat运行需要的库文件(JARS)
logs存放Tomcat执行时的LOG文件
src存放Tomcat的源代码
webappsTomcat的主要Web发布目录(包括应用程序示例)
work存放jsp编译后产生的class文件
conf目录中配置文件说明
server.xmlTomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息
web.xml遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息
tomcat-user.xmlRealm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户  指定角色等将通过编辑此文件实现
catalina.policyJava相关的安全策略配置文件,在系统资源级别上提供访问控制的能力
catalina.propertiesTomcat内部package的定义及访问相关控制,也包括对通过类装载器装载的内容的控制;Tomcat在启动时会事先读取此文件的相关设置
logging.propertiesTomcat6通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息,可以用来定义日志记录的组  件级别以及日志文件的存在位置等
context.xml所有host的默认配置信息

tomcat请求过程:

tomcat server处理一个HTT请求的过程

 

​tomcat中支持两种协议的连接器:HTTP/1.1与AJP/1.3
HTTP/1.1协议负责建立HTTP连接,web应用通过浏览器访问tomcat服务器用的就是这个连接器,默认监听的是8080端口
AJP/1.3协议负责和其他HTTP服务器建立连接,监听的是8009端口,比如tomcatapache或者iis集成时需要用到这个连接器

五、构建Tomcat

系统机器名称ip服务
CentOS Linux release 7.4.1708c7--10192.168.2.10/24Tomcat

 先上传安装包  apache-tomcat-10.0.13.tar.gz  jdk-8u91-linux-x64.tar.gz

[root@C7-10 ~]# ls
apache-tomcat-10.0.13.tar.gz  jdk-8u91-linux-x64.tar.gz

(一)、安装jdk,部署java环境 

[root@C7-10 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz 
..........
.....
..
jdk1.8.0_91/jre/README
jdk1.8.0_91/README.html


[root@C7-10 ~]# mv jdk1.8.0_91/ /usr/local/java
[root@C7-10 ~]# 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

----下面直接复制粘贴

cat <<END>>/etc/profile
export JAVA_HOME=/usr/local/java
export PATH=\$PATH:/usr/local/java/bin
END

----

[root@C7-10 ~]# source /etc/profile
[root@C7-10 ~]# java -version                                   #查看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)

(二)、安装Tomcat软件程序

 这里安装的是tomcat 10.0.13版本

注意: 如要做下面的项目二尽量安装版本低一点的

[root@C7-10 ~]# tar zxvf apache-tomcat-10.0.13.tar.gz 
................
..........
....
apache-tomcat-10.0.13/bin/startup.sh
apache-tomcat-10.0.13/bin/tool-wrapper.sh
apache-tomcat-10.0.13/bin/version.sh

[root@C7-10 ~]# mv apache-tomcat-10.0.13 /usr/local/tomcat

[root@C7-10 ~]# ls /usr/local/tomcat/
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work

[root@C7-10 ~]# /usr/local/tomcat/bin/startup.sh                        #启动apache-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
Using CATALINA_OPTS:   
Tomcat started.
[root@C7-10 ~]# netstat -auptn|grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      14366/java   

访问页面测试

 安装mariadb数据库,提供数据库服务

方法一:本地yum也安装

[root@C7-10 ~]# yum install mariadb-server mariadb
...................
..........
.....

[root@C7-10 ~]# systemctl start mariadb
[root@C7-10 ~]# mysqladmin -uroot password 123
[root@C7-10 ~]# mysql -uroot -p123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, 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)]> quit
Bye

方法二:可以使用网络yum进行安装

[root@C7-10 ~]# ping www.biadu.com         #查看是否可以ping通外网
PING www.biadu.com (47.254.33.193) 56(84) bytes of data.
64 bytes from 47.254.33.193 (47.254.33.193): icmp_seq=1 ttl=50 time=185 ms
[root@C7-10 ~]# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
[root@C7-10 ~]# yum install mariadb-server mariadb    #安装
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
mariadb数据库的相关命令是:

systemctl start mariadb    #启动MariaDB

systemctl stop mariadb     #停止MariaDB

systemctl restart mariadb  #重启MariaDB

systemctl enable mariadb   #设置开机启动
[root@C7-10 ~]# systemctl start mariadb
[root@C7-10 ~]# mysqladmin -uroot password 123
[root@C7-10 ~]# mysql -uroot -p123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, 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)]> quit
Bye

项目一:配置tomcat的manager管理界面

[root@C7-10 ~]# vim /usr/local/tomcat/conf/tomcat-users.xml

..............
.........
..
-->
<role rolename="manager-gui"/>                                     #添加定义的角色
<user username="tomcat" password="123" roles="manager-gui"/>       #账户名:tomcat  密码:123
</tomcat-users>                                                    #默认在最后有


保存


[root@C7-10 ~]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
............
.......
 21   <Valve className="org.apache.catalina.valves.RemoteAddrValve"
 22          allow="^.*$" />          #修改    解释:允许其他所有主机访问
...
.

注意:allow默认是:127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1

[root@C7-10 ~]# /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
Using CATALINA_OPTS:    
[root@C7-10 ~]# /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
Using CATALINA_OPTS:   
Tomcat started.

进行测试:客户端访问manager管理界面(客户端启用停止项目、测试服务端状态查看)

 输入之前设置的   用户名 :tomcat    密码:123

 显示出:Tomcat Web 应用程序管理者就说明项目一实验成功了

 如果提示我们403 拒绝访问

 解决方案:添加manage.xml文件

[root@C7-10 ~]# vim /usr/local/tomcat/conf/Catalina/localhost/manager.xml
  
<Context privileged="true" antiResourceLocking="false"   
         docBase="${catalina.home}/webapps/manager">
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>


保存  添加以上内容

[root@C7-10 ~]# /usr/local/tomcat/bin/startup.sh 
......
...
[root@C7-10 ~]# /usr/local/tomcat/bin/shutdown.sh
....
..

在进行访问测试

注意:如果出现401 说明你用户密码输入错误只要输入正确就可以了

 项目二:城市订单管理系统,手动上线(创建项目中的数据库或者导入数据库文件),并进行授权

注意:此次使用  apache-tomcat-8.5.16.tar.gz   版本

上传文件smbms_db.sql

[root@C7-10 ~]# ls
smbms_db.sql

[root@C7-10 ~]# mysql -uroot -p123<smbms_db.sql         #导入数据库中

[root@C7-10 ~]# mysql -uroot -p123
.......
....
...
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| smbms              |
| test               |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]> grant all on smbms.* to 'aaa'@'192.168.2.10'  identified by "123";                          #给项目数据库授权
Query OK, 0 rows affected (0.01 sec)                 

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> use smbms;                  
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [smbms]>  show tables;                   
+-----------------+
| Tables_in_smbms |
+-----------------+
| smbms_address   |
| smbms_bill      |
| smbms_provider  |
| smbms_role      |
| smbms_user      |
+-----------------+
5 rows in set (0.00 sec)

MariaDB [smbms]> select * from smbms_user;                #查看项目中的管理员账户
+----+-----------+-----------------+--------------+--------+------------+-------------+----------------------------------------------------+----------+-----------+---------------------+----------+---------------------+
| id | userCode  | userName        | userPassword | gender | birthday   | phone       | address                                            | userRole | createdBy | creationDate        | modifyBy | modifyDate          |
+----+-----------+-----------------+--------------+--------+------------+-------------+----------------------------------------------------+----------+-----------+---------------------+----------+---------------------+
|  1 | admin     | 系统管理员      | 1234567      |      1 | 1983-10-10 | 13688889999 | 北京市海淀区成府路207号                            |        1 |         1 | 2013-03-21 16:52:07 |     NULL | NULL                |
|  2 | liming    | 李明           | 0000000      |      2 | 1983-12-10 | 13688884457 | 北京市东城区前门东大街9号                           |        2 |         1 | 2014-12-31 19:52:09 |     NULL | NULL                |
.................
...........

MariaDB [smbms]> exit
Bye

城市订单管理系统项目上线

[root@C7-10 ~]# cd /usr/local/tomcat/webapps/
[root@C7-10 webapps]# mkdir /root/webapps.bak
[root@C7-10 webapps]# mv * /root/webapps.bak/
[root@C7-10 webapps]# ls                 #上传  WebRoot  文件
WebRoot

[root@C7-10 webapps]# vim /usr/local/tomcat/webapps/WebRoot/WEB-INF/classes/database.properties

driver=com.mysql.jdbc.Driver
#在和mysql传递数据的过程中,使用unicode编码格式,并且字符集设置为utf-8
url=jdbc:mysql://192.168.2.10:3306/smbms?useUnicode=true&characterEncoding=utf-8   #修改地址为自己的192.168.2.10
user=aaa                                                           #设置为之前在数据库授权的用户名 aaa
password=123                                                       #设置为之前在数据库授权的密码   123

保存退出


[root@C7-10 webapps]# /usr/local/tomcat/bin/shutdown.sh
.....
[root@C7-10 webapps]# /usr/local/tomcat/bin/startup.sh 
.....

 测试客户端访问项目二:http://192.168.2.10:8080/WebRoot

登录后如若访问不了,可以尝试重启tomcat

 注意:如果出现用户名密码错误说明连接不上数据库需要查看数据库是否给用户aaa授权

部署tomcat的虚拟主机

 准备网页

[root@C7-10 ~]# cd /usr/local/tomcat/webapps/
[root@C7-10 webapps]# mkdir benet biii

[root@C7-10 webapps]# vim benet/index.jsp
<%@ page language="java" contentType="text/html;charset=utf-8"
    pageEncoding="utf-8"%>
<h1>192.168.2.10 www.benet.com 今天特别冷</h1>

保存

[root@C7-10 webapps]# vim biii/index.jsp
<%@ page language="java" contentType="text/html;charset=utf-8"
    pageEncoding="utf-8"%>
<h1>www.biii.com 今天我没有看电视</h1>

保存

修改server.xml文件

[root@C7-10 webapps]# vim /usr/local/tomcat/conf/server.xml
........
....
    </Host>

       <Host name="www.benet.com"  appBase="webapps" unpackWARs="true" autoDeploy="true" >
           <Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true"/>
       </Host>
       <Host name="www.biii.com"  appBase="webapps" unpackWARs="true" autoDeploy="true" >
           <Context docBase="/usr/local/tomcat/webapps/biii" path="" reloadable="true"/>
       </Host>
    </Engine>

........
....

    保存  

注意:在文件最后添加内容的</Engine>上面添加

---##########----     HOST容器  介绍

---#####<Host name="www.benet.com"  appBase="webapps" unpackWARs="true" autoDeploy="true" >
name="www.benet.com"  :虚拟主机的名称,Tomcat 通过在请求 URL 中的域名与 name 中的值匹配,用于查找能够处理该请求的虚拟主机。如果未找到则交给在 Engine 中 defaultHost 指定的主机处理
appBase="webapps"     :此 Host 的 webapps目录,即指定存放 web 应用程序的目录的路径,默认指向 ROOT 目录下的 index.jsp
unpackWARs="true"     :在启用此 webapps 时是否对 WAR 格式的归档文件先进行展开;默认为 true
autoDeploy="true"     :在 Tomcat 处于运行状态时放置于 appBase 目录中的应用程序文件是否自动进行 部署,默认为 true ;开启自动部署

---#####<Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true"/>
docBase="/usr/local/tomcat/webapps/benet"  :设置项目存放路径
path=""               :tomcat把web应用程序映射为root URI路径(相对路径)
reloadable="true"     :在Tomcat运行时,如果WEB-INF/classes和WEB-INF/lib目录中有改变,Tomcat会自动重新加载该WEB应用,但是开启会加重服务器的负载(建议设置为false关闭),默认值为false,我们在调用可以打开,发布后再关闭;如果要更新可以更新完重启tomcat服务

[root@C7-10 webapps]# /usr/local/tomcat/bin/shutdown.sh

[root@C7-10 webapps]# /usr/local/tomcat/bin/startup.sh

 中本机中修改hosts文件 192.168.2.10 www.benet.com www.biii.com

 c7--10上修改hosts文件

[root@C7-10 webapps]# vim /etc/hosts

192.168.2.10 www.benet.com www.biii.com

测试访问:www.benet.com  www.biii.com

如果出现乱码解决方法

(1)HTML页面中:

<head>
......
    <meta http-equiv=Content-Type content="text/html;charset=utf-8">
......
</head>

(2)JSP页面中:

<%@ page language="java" contentType="text/html;charset=utf-8"
    pageEncoding="utf-8"%>
参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:精致技术 设计师:CSDN官方博客 返回首页

打赏作者

乘浪初心

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值