【Java Web编程 一】Java Web编程概述

其实可以这么理解,Web开发就是计算机网络应用层里开发的一个专供Http协议使用的应用程序。在应用层 这篇Blog里我们提到过应用层的定义

应用层是为了解决某一类应用问题,而问题的解决又是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的。这些服务通常使用对应的协议,常见的几种服务协议有(HTTP,FTP/TFTP, TELENT)无论是哪种服务,都需要域名服务器(DNS)来解析ip地址才能通信以提供服务

所以其实Web请求实际上是客户使用浏览器充当客户端,通过http协议与部署了Web应用程序的服务器进行数据通信的过程,那么Web开发其实就是我们开发出能通过http协议与之通信的应用程序(这种架构我们叫B/S架构)。本质上与我们使用foxmail充当客户端,通过SMTP及POP3协议与部署了邮件应用程序的服务器进行数据通信没有什么区别(这种架构我们叫C/S架构)。之所以Web开发比较普遍是因为相比于其它通信协议的单一性,http能够传送的数据内容更丰富也更全面。

Web应用程序概述

我们上边提到了Web应用程序开发的两种架构模式,接下来详细讨论下并且关注下静态网站和动态网站的异同。

B/S架构和C/S架构

B/S 体系结构相对于 C/S 体系结构而言具有更多的优势,目前大量的应用程序开始转移到应用 B/S 体系结构,其主要优势在于以下几点

  • 安装维护升级方便,仅部署服务器,客户端有各种各样的浏览器开箱即用,例如谷歌,Edge
  • 对客户机配置要求不高,满足服务器配置即可,服务器我们也有较为通用的部署工具,Tomcat
  • 访问范围更广,超文本传输协议传递的内容更丰富

所以其实要搞清一个概念,Web开发不是独立的一个分支,而只是应用层开发里最火的一个分支。简单的可以这么认为,B/S架构是使用浏览器作为客户端的C/S架构。

静态网站和动态网站

Web 应用程序大致可以分为两种,即静态网站和动态网站,静态网站采用Html语言编写,放置于 Web 服务器上,用户通过浏览器直接请求解析显示,缺点:内容固定不变,改变显示必须修改html代码
在这里插入图片描述
随着网络技术的发展,基于 Internet 的 Web 应用程序也变得越来越复杂,更多的内容需根据用户的请求动态生成页面信息,即动态网站,动态网站指在Html静态页面中嵌入Java、C#、Php等脚本代码,将编写后的页面放入Web服务器,由服务器编译转换为最终Html返回给客户端
解析当然是调用

Http协议概述

HTTP全称超级文本传输协议(Hypertext Transfer Protocol)是关于如何在网络上传输超级文本及HTML 文档的协议(规范),Web 浏览器按照 HTTP 协议的规定向 Web 服务器发送请求信息,Web 服务器接收到浏览器的请求后,再按照 HTTP 协议的要求将结果发送给 Web 浏览器解析显示

统一资源定位符URL

URL 相当于一个文件名在网络范围的扩展,URL是与互联网相连的机器上的任何可访问对象的一个指针。由于访问不同对象所使用的协议不同,所以URL还指出读取某个对象时所使用的协议,URL的统一格式为:<协议>://<主机>:<端口>/<路径>

  • <协议>就是指出使用什么协议来获取该万维网文档。现在最常用的协议就是http(超文本传送协议HTTP )以及https(简单讲是HTTP的安全版),其次是ftp(文件传送协议FTP)
  • 在<协议>后面的://是规定的格式,: 也是固定格式。它的右边是第二部分<主机>,它指出这个万维网文档是在哪一台主机上。这里的<主机>就是指该主机在互联网上的域名
  • 再后面是第三和第四部分<端口>和<路径>,有时可省略

对应例如:http://localhost:8080/AIR/index.jsp端口和路径有时可以省略。HTTP的默认端口号是80,通常可省略。若再省略文件的<路径>项,则URL就指到互联网上的某个主页(home page)

超文本传送协议HTTP

HTTP 协议定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,HTTP是面向事务的无状态的(transaction-oriented)应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。请注意,HTTP不仅传送完成超文本跳转所必需的信息,而且也传送任何可从互联网上得到的信息,如文本、超文本、声音和图像等
在这里插入图片描述
这是一个逻辑上的通信过程,实际通信还依赖下三层(物理层,数据链路层,网络层):

  • HTTP使用了面向连接的TCP作为运输层协议,保证了数据的可靠传输。HTTP不必考虑数据在传输过程中被丢弃后又怎样被重传。但是,HTTP协议本身是无连接的。这就是说,虽然HTTP使用了TCP连接,但通信的双方在交换HTTP报文之前不需要先建立HTTP连接
  • HTTP协议是无状态的(stateless)。也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同(假定现在服务器还没有把该页面更新),因为服务器并不记得曾经访问过的这个客户,也不记得为该客户曾经服务过多少次。HTTP的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP请求

HTTP的无状态可以理解为幂等的

Http协议工作流程

一次完整的请求响应过程分为以下几个步骤,主要是四个步骤,在这个过程中交互载体为协议包。

  1. 浏览器发起连接(通过dns把域名转为ip,ip通过ip路由找到服务器地址)
  2. 建立连接后,客户发送请求(第一条肯定是对该页面请求)
  3. 服务器响应请求(返回一个html页面,由浏览器把该html解析为网页,按请求顺序响应)
  4. 关闭连接(1.1版本开始持续连接,在一定时间内连接不会断开,只需建立一条连接)

更详细的过程可以参照我的这篇Blog【计算机网络基础 七】输入URL到浏览器发生了什么,我们讨论下整个过程中的连接双方(浏览器、Http服务器)和传递载体(Http请求协议包,Http响应协议包)。

Http请求协议包

在浏览器准备发送请求时,由浏览器负责生成一个Http请求协议包,并将请求信息写入Http请求协议包,然后将Http请求协议包推送给Http服务器。包括四部分内容:

  • 请求行:包括三部分,即方法,请求资源的URL,以及http的版本
  • 请求头:如果浏览器以GET方式发送请求,则请求参数存放在请求头中。
  • 空白行:无内容,但是必须存在。可以理解为用来分隔请求头和请求体。
  • 请求体:如果浏览器以POST方式发送请求,则请求参数存放在请求体中

我们重点关注下请求行里的请求方式:
在这里插入图片描述
重点关注Post和Get即可:

  • Get是从服务器上获取数据,是安全的和幂等的,POST是修改服务器上的数据安全的意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态;幂等的意味着对同一URL的多个请求应该返回同样的结果。
  • GET请求的数据会附在URL之后,POST把提交的数据则放置在是HTTP包的包体中。POST的安全性更高
  • GET方式提交的数据最多只能是2048字节,理论上POST没有限制,可传较大量的数据
  • GET支持缓存(取到的资源),POST不支持缓存

总的来说,Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求。

Http响应协议包

在Http服务器准备返回结果时,由Http服务器负责生成一个Http响应协议包,调用输出流将文件内容(文字、数字、像素、帧)写入到Http响应协议包,然后将Http响应协议包推送给发起请求的浏览器。也包括四部分内容:

  • 响应行(状态行):http版本,状态码,以及解释状态码的简单短语。
  • 响应头:content-type,指定浏览器使用对应的解析器或者编译器,将从Http服务器返回过来的相应的二进制信息进行解析或者编译。
  • 空白行:无内容,但是必须存在。
  • 响应体:本次索要的文件内容。

状态码的含义如下:

  • 1XX Informational(信息性状态码),服务器收到请求,需要请求者继续执行
  • 2XX Success(成功状态码)。例如:200 OK 表示从客户端发来的请求在服务器端被正常处理了。
  • 3XX Redirection(重定向状态码) 例如:302,客户请求的文档转移到了一个新的地址,请求被重定向了。
  • 4XX Client Error(客户端错误状态码)。例如:404 Not Found 该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。
    • 网站名不对。
    • 网站名正确,但是资源文件名不对。
    • tomcat没有在网站定位默认欢迎资源文件。(标签 <welcome-file-list>...</welcome-file-list>
    • 请求地址没有按照 uri 的标准格式进行设置。
    • IDEA没有将最新网站内容交给tomcat。
  • 5XX Server Error(服务器错误状态码)。例如:500 Internal Server Error 该状态码表明服务器端在执行请求时发生了错误

这里只列举大概含义,还有一些别的例如405:Http服务器通知浏览器本次索要的资源文件已经被找到了,但是这个资源文件对于浏览器请求方式无法接收。(get、post)。

Http服务器作用

在这个交互过程中浏览器不需要过多关注,对于我们后端开发来说,主要关注我们编写的服务端程序,所以我们关注Http服务器:

  • 对于一个Java程序员来说,所有的Http服务器都是由Java编程语言开发的应用程序。
  • Http服务器可以接收由浏览器发出的Http请求协议包。
  • Http服务器可以解析由浏览器发来的Http请求协议包,将该协议包解析为二进制数据,以便了解用户的请求。
  • Http服务器可以自动定位被访问的资源文件。
  • Http服务器可以自动将被访问的文件内容或者运行结果通过输出流以二进制形式写入到Http响应协议包中。
  • Http服务器可以自动将Http响应协议包推送给发起请求的浏览器

所以一个合格的Http服务器是可以自动接收、解析请求并定位资源文件,并且可以将响应写入并推送给发起请求的浏览器

Tomcat服务器概述

Tomcat就是上文提到的Http服务器中应用最广泛的一种。在另一篇Blog【Java SE基础 零】Java开发环境初始化里我详细介绍了Tomcat是如何与IDEA集成起来使用的,这里就不再赘述了,同时MAC版本的安装方式这篇博客有介绍Mac安装Tomcat【打开Finder窗口,输入shift + Command + G,再输入/Library,进入此目录后,将Tomcat文件夹复制到此目录下】,这里我们主要聊聊Tomcat的结构和它是如何工作的,可以看下目录的组成结构:
在这里插入图片描述
各个文件目录的主要作用如下:

  • bin:tomcat 管理命令,所有的可执行命令存放在这里,启动和关闭服务器的命令就在此文件夹中
  • conf:tomcat 配置文件。其中 server.xml是 tomcat 的核心配置文件。
  • lib:tomcat 应用程序在运行时依赖的第三方jar。
  • logs:存放 tomcat 的运行日志。
  • temp:存放 tomcat 运行时生成的临时文件。
  • webapps:tomcat 在默认情况下,接收到请求之后到 webapps下定位资源文件,Web 应用程序存放的目录,Web 项目保存到此目录中即可发布
  • work:tomcat在默认情况下,在work文件夹下将jsp文件编辑为java文件,并编译为.class文件。

在接下来要聊到的JSP和Servlet两种文件类型,其是运行到Tomcat这种Web服务器上来进行工作的。请求到达后先匹配到项目目录,然后去加载webapps里对应的项目的资源。后边我们会提到。

JSP&Servlet文件

JSP&Servlet是Java Web编程最常用的两种文件,非常重要,这里我们先简单了解下他们的区别和联系以及用途,后边详细说明:

  • JSP经编译后就变成了Servlet,JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类
  • JSP更擅长表现于页面显示,Servlet更擅长于逻辑控制.
  • Servlet中没有内置对象,JSP中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.
  • JSP是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,JSP中的Java脚本如何镶嵌到一个类中,由JSP容器完成,而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。

Servlet和JSP最主要的不同点在于:Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件,JSP侧重于视图,Servlet主要用于控制逻辑

总结一下

说白了Web开发就是一个普通的应用程序开发,BS和CS架构的不同点就是客户端为浏览器,我们无需关系如何进行客户端的升级和开发,只要按照标准开发服务端程序即可;而Web开发也没什么神秘的,就是依赖http协议在获取到请求后给予响应即可,和依赖smtp协议开发的邮件程序没什么本质区别。更进一步我们甚至不用开发服务器,tomcat已经帮我们做好了一切,我们只需要按照tomcat的规范编写jsp&servlet这些文件和代码即可,换句话说专注业务逻辑即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
提供典型应用案例,剖析JSP/Servret技术与Struts 2技术在Web开发中的不同 提供完整的应用案例,使读者可以深入体会SSH开发模式的精髓 所有开发工具和框架均使用目前的最新版本,紧跟技术发展的趋势 提供230个实例和4个综合案例,可以作为案头必备的查询手册 一线开发人员全力打造,分享技术盛宴! 重点内容及特色 《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》介绍了Web开发中客户端技术的基础知识,包括JavaScript、CSS、AJAX等,这些技术都是Web应用中常用的客户端技术。 《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax+》讲解了JSP/S rvlet技术的基础知识,并提供了一个综合案例展示其具体应用,它们是Java Web服务端技术的基石,也是Java Web开发所要必须掌握的技术。 《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和事务管理等,Spring中的数据库技术与AOP等。 《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》特别介绍了Struts 2对AjAX的支持,还重点剖析了SSH框架的整合开发,并给出了两个综合案例来展示整合SSH框架开发Web应用。 和已经出版的同类图书相比,《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》讲解由浅入深,涵盖更多内容,列举了大量典型实例具有超强的实用性,另外,《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》各篇独立,适合读者全面习或对部分内容重点习。 读者对象 有Java基础,想进一步习SSH框架整合开发的人员 了解SSH整合开发,想进一步提高开发技术的人员 正在使用SSH整合技术开发项目,想查阅资料的人员 大中专院校的生和老师,以及Java培训班的员和讲师 需要一本案头必备查询手册的程序员 光盘内容 6小时多媒体体视频讲解 《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》所涉及的源代码 布衣暖,菜根香,好书滋味长!清华大出版社长期以来一直秉承为读者多出好书的宗旨,多年来为读者奉献了大量脍炙人口的精品图书。尤其在计算机图书出版领域更是形成了鲜明特色,所出版的各类计算机图书受到了广大读者的好评。本次出版的“原创经典,程序员典藏”系列图书是清华大出版社的重点精品计算机图书,旨在帮助读者全面习各类程序设计语言和开发工具,提高开发水平。同时也为广大程序员提供良好的技术参考,以便作为案头必备的查询手册。 内容提要 -------------------------------------------------------------------------------- 《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》通过对SSH中的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法。《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring(Ioc容器、装配Java Bean、Jdbc和Hibernate模板、事务管理、Spring AOP等)以及 Hibernate(会话、映射、标准查询API、HQL、事务管理、锁等)。除此之外,《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》还提供了两个完整的实例来讲解开发SSH的详细步骤和方法。通过对这两个实例的习,读者可以对SSH开发模式有更透彻地理解和认识。SSH是目前最流行的Java Web开发技术。 《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》适合广大从事Java Web开发工作的技术人员、对SSH开发感兴趣的人员以及大专院校生阅读,尤其是具有一定的Web开发经验的技术人员。 目录 -------------------------------------------------------------------------------- 第1篇 web开发基础篇 第1章 搭建开发环境 1.1 本书使用的软件和框架的版本 1.2 JDK6的下载与安装 1.3 Eclipse3.4 的下载与安装 1.4 MyEclipse6.5 的下载与安装 1.5 Eclipse:IDEforJavaEEDevelopers的下载与安装 1.6 Tomcat6的下载与安装 1.7 在MyEclipse中配置。Tomcat 1.8 在EclipseIDEforJavaEEDevelopers中配置Tomcat 1.9 小结 第2章 JavaWeb应用开发基础 2.1 Web技术的发展 2.2 JavaWeb技术 2.2.1 Java.Welb程序的基本组成 2.2.2 JavaWeb程序的目录结构 2.2.3 JavaWeb程序的配置文件 2.3 MVC模式与MvC框架 2.3.1 JSP模型1和JSP模型2 2.3.2 Web应用程序需要的基础服务 2.3.3 MVC模式概述 2.3.4 常用的MvC框架 2.4 小结 第3章 Web开发中的客户端技术 3.1 常用的JavaScriptIDE简介 3.1.1 在MyEclipse中使用JavaScript 3.1.2 在EclipseIDEforJavaEE中使用JavaScript 3.1.3 在NetBeans中使用JavaScript 3.1.4 其他的JavaScriptIDE 3.2.1 avaScdpt语法基础 3.2.1 实例:编写第一个JavaScript程序:Greet 3.2.2 变量 3.2.3 原始类型 3.2.4 类型转换 3.2.5 函数与函数调用 3.2.6 类和对象 3.3 JavaScript高级技术 3.3.1 DOM技术概述 3.3.2 获得HTML元素的3种方法 3.3.3 实例:图像自动切换 3.3.4 正则表达式 3.3.5 实例:表格排序 3.4 CSS基础 3.4.1 CSS的基本语法 3.4.2 在Style属性中定义样式 3.4.3 在HTML中定义样式 3.4.4 在外部文件中定义样式 3.4.5 样式的继承 3.5 AJAX.基础 3.5.1 AJAX概述 3.5.2 实例:使用XMLHttpRequest获得Web资源 3.5.3 实例:使用XMLHttpRequest跨域访问Web资源 3.5.4 实例:AJAX的3种交换数据方法 3.6 小结 第4章 Servlet技术 4.1 Servlet的Helloworld程序 4.1.1 实例:在My Eclipse中编写Helloworld程序 4.1.2 实例:手工编写:Helloworld程序 4.2 Servlet基础 4.2.1 配置数据库连接池 4.2.2 数据库连接池的应用 4.2 -3实例:用doGet方法处理客户端请求 4.2.4 实例:用doPost方法处理客户端请求 4.2.5 实例:用service方法处理客户端请求 4.2.6 实例:初始化(init)和销毁(destroy)Servlet 4.2.7 实例:使用PrintWriter输出响应消息 4.2.8 实例:用ServletOutputStream显示图像 4.2.9 实例:使用RequestDispatcher包含Web资源 4.2.10 实例:使用RequestDispatcher转发Web资源 4.3 HttpServletResponse类的其他功能 4.3.1 产生状态响应码 4.3.2 设置响应消息头 4.3.3 实例:验证响应头设置情况 4.4 使用:HttpServletRequest获得请求消息 4.4.1 获取请求行消息 4.4.2 获取网络连接消息 4.4.3 获取请求头消息 4.5 处理Cookie 4.5.1 什么是Cookie 4.5.2 Cookie类中的方法 4.5.3 实例:用Cookie读写客户端信息 4.5.4 实例:用Cookie读写复杂数据 4.6 处理Session 4.6.1 什么是Session 4.6.2 HttpSession接口中的方法 4.6.3 HttpServletRequest接口中的Session方法 4.6.4 实例:通过Cookie跟踪Session 4.6.5 实例:通过重写uRL跟踪Session 4.7 Web开发的中文问题 4.7.1 Java的编码原理 4.7.2 实例:解决输出中文乱码问题 4.7.3 实例:解决服务端程序读取中文请求消息的乱码问题 4.7.4 实例:用AJAX技术发送和接收中文信息 4.7.5 实例:在请求消息头和响应消息头中转输中文 4.8 小结 第5章 JSP技术 5.1 用MyEclipse编写第一个JSP程序 5.1.1 实例:编写显示服务器当前时间的JSP程序 5.1.2 调试JSP程序 5.1.3 改变JSP的访问路径和扩展名 5.1.4 手动发布JSP程序 5.2 JSP的运行原理 5.2.1 Tomcat如何处理JSP页 5.2.2 分析由JSP生成的Servlet代码 5.3 JSP基本语法 5.3.1 JSP表达式 5.3.2 在JSP中嵌入Java代码 5.3.3.JSP声明 5.3.4.JSP表达式语言(EL) 5.3.5 实例:用EL函数替换HTML中的特殊字符 5.3.6 JSP页面中的注释 5.4 JSP指令 5.4.1 JSP指令简介 5.4.2 page页面指令 5.4.3 include加入指令 5.5.JSP的9个内置对象 5.5.1 out输出对象 5.5.2 pageContext封装对象 5.5.3 其他的JSP内置对象 5.6 JSP标签 5.6.1 插入标签 5.6.2 转发标签 5.6.3 传参标签 5.6.4 创建:Bean标签 5.6.5 设置属性值标签 5.6.6 获取属性值标签 5.7 JSP的标准标签库(JSTL) 5.7.1 如何使用JSTL 5.7.2 条件标签 5.7.3 循环标签 5.8 小结 第6章 用Servlet和JSP实现注册登录系统 第2篇 Struts 2篇 第7章 编写Struts 2的第一个程序 第8章 Struts 2进阶 第9章 Struts 2的* 第10章 Struts 2的类型转换 第11章 Struts 2的输入校验 第12章 文件的上传和下载 第13章 国际化 第14章 Struts 2的标签库 第15章 Struts 2对AJAX的支持 第16章 用Struts 2实现注册登录系统 第3篇 Hibernate篇 第17章 Hibernate的Helloworld程序 第18章 配置Hibernate 第19章 Hibernate的会话与O/R映射 第20章 Hibernate的查询与更新技术 第21章 Hibernate的高级技术 第4篇 Spring篇 第22章 Spring的Helloworld程序 第23章 反向控制(Ioc)与装配JavaBean 第24章 Spring中的数据库技术 第25章 Spring的其他高级技术 第5篇 综合实例篇 第26章 Struts 2与Hibernate、Spring的整合 第27章 网络硬盘 第28章 论坛系统

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

存在morning

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值