Java(9):MVC框架基础:Servlet+Jsp+javabean(1)

MVC三层架构-Jsp+Servlet+Javabean 该例子是一个简单的MVC的小例子,通过JSP+Servlet+JavaBean来完成,并且里面用到了封装以及集合类。非常适合初学者,快速掌握MVC框架. 立即下载

日期:2017/11/10

      自学Java一个月了,这段经历给我的感受是:确保每天进步一点点;前三个星期是领悟--通过持续不断的练习,熟练掌握面向对象的编程;后面的时间则是冲击流行框架(spring/springMVC/Mybatis/Hibernate/structs等等)的掌握,力求做出成品,现在熟悉了MVC(Servlet+JSP+JavaBean)开发的小Demo后,果然还是功力稍显嫩。

      保持脚踏实地、实事求是,现在对学会的作下总结:

一、Servlet

A servlet is a small Java program that runs within a Web server. Servlets receive and respond to requests from Web clients, usually across HTTP, the HyperText Transfer Protocol.

     一段运行在服务器(Tomcat)的程序,它是java代码,常用的继承类是HttpServlet,类的方法见下列表,但最常用的方法是doGet()和doPost():

Modifier and Type Method and Description
protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
Called by the server (via the  service method) to allow a servlet to handle a DELETE request.
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
Called by the server (via the  service method) to allow a servlet to handle a GET request.
protected void doHead(HttpServletRequest req, HttpServletResponse resp)
Receives an HTTP HEAD request from the protected  service method and handles the request.
protected void doOptions(HttpServletRequest req, HttpServletResponse resp)
Called by the server (via the  service method) to allow a servlet to handle a OPTIONS request.
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
Called by the server (via the  service method) to allow a servlet to handle a POST request.
protected void doPut(HttpServletRequest req, HttpServletResponse resp)
Called by the server (via the  service method) to allow a servlet to handle a PUT request.
protected void doTrace(HttpServletRequest req, HttpServletResponse resp)
Called by the server (via the  service method) to allow a servlet to handle a TRACE request.
protected long getLastModified(HttpServletRequest req)
Returns the time the  HttpServletRequest object was last modified, in milliseconds since midnight January 1, 1970 GMT.
protected void service(HttpServletRequest req, HttpServletResponse resp)
Receives standard HTTP requests from the public  service method and dispatches them to the  do XXX methods defined in this class.
void service(ServletRequest req, ServletResponse res)
Dispatches client requests to the protected  service method.

      仔细观察可以发现,这些方法共同的地方是引用了两个参数:HttpServletRequest req,HttpServletResponse resp。而service()是一个处理请求分发的方法,分配给doGet和DoPost。

Parameters:
req - an  HttpServletRequest object that contains the request the client has made of the servlet
resp - an  HttpServletResponse object that contains the response the servlet sends to the clientreq 是一个 HttpServletRequest 对象,代表了客户端的请求信息;

resp 是一个 HttpServletResponse 对象,代表了服务端的响应信息;


 HttpServletRequest 

Extends the ServletRequest interface to provide request information for HTTP servlets.

The servlet container creates an HttpServletRequest object and passes it as an argument to the servlet's service methods (doGet, doPost, etc).

     它是一个接口(interface),继承了另一个父接口--ServletRequest , HttpServletRequest 有一大批实现了的常用的方法:

Modifier and Type Method and Description
boolean authenticate(HttpServletResponse response)
Use the container login mechanism configured for the  ServletContext to authenticate the user making this request.
String changeSessionId()
Change the session id of the current session associated with this request and return the new session id.
String getAuthType()
Returns the name of the authentication scheme used to protect the servlet.
String getContextPath()
Returns the portion of the request URI that indicates the context of the request.
Cookie[] getCookies()
Returns an array containing all of the  Cookie objects the client sent with this request.
long getDateHeader(String name)
Returns the value of the specified request header as a  long value that represents a  Date object.
String getHeader(String name)
Returns the value of the specified request header as a  String.
Enumeration<String> getHeaderNames()
Returns an enumeration of all the header names this request contains.
Enumeration<String> getHeaders(String name)
Returns all the values of the specified request header as an  Enumeration of  String objects.
default HttpServletMapping getHttpServletMapping()
Return the  HttpServletMapping by which the  HttpServlet for this  HttpServletRequest was invoked.
int getIntHeader(String name)
Returns the value of the specified request header as an  int.
String getMethod()
Returns the name of the HTTP method with which this request was made, for example, GET, POST, or PUT.
Part getPart(String name)
Gets the  Part with the given name.
Collection<Part> getParts()
Gets all the  Part components of this request, provided that it is of type  multipart/form-data.
String getPathInfo()
Returns any extra path information associated with the URL the client sent when it made this request.
String getPathTranslated()
Returns any extra path information after the servlet name but before the query string, and translates it to a real path.
String getQueryString()
Returns the query string that is contained in the request URL after the path.
String getRemoteUser()
Returns the login of the user making this request, if the user has been authenticated, or  null if the user has not been authenticated.
String getRequestedSessionId()
Returns the session ID specified by the client.
String getRequestURI()
Returns the part of this request's URL from the protocol name up to the query string in the first line of the HTTP request.
StringBuffer getRequestURL()
Reconstructs the URL the client used to make the request.
String getServletPath()
Returns the part of this request's URL that calls the servlet.
HttpSession getSession()
Returns the current session associated with this request, or if the request does not have a session, creates one.
HttpSession getSession(boolean create)
Returns the current  HttpSession associated with this request or, if there is no current session and  create is true, returns a new session.
default Map<String,String> getTrailerFields()
Get the request trailer fields.
Principal getUserPrincipal()
Returns a  java.security.Principal object containing the name of the current authenticated user.
boolean isRequestedSessionIdFromCookie()
Checks whether the requested session ID was conveyed to the server as an HTTP cookie.
boolean isRequestedSessionIdFromUrl()
Deprecated. 
As of Version 2.1 of the Java Servlet API, use isRequestedSessionIdFromURL() instead.
boolean isRequestedSessionIdFromURL()
Checks whether the requested session ID was conveyed to the server as part of the request URL.
boolean isRequestedSessionIdValid()
Checks whether the requested session ID is still valid.
default boolean isTrailerFieldsReady()
Return a boolean indicating whether trailer fields are ready to read using  getTrailerFields().
boolean isUserInRole(String role)
Returns a boolean indicating whether the authenticated user is included in the specified logical "role".
void login(String username, String password)
Validate the provided username and password in the password validation realm used by the web container login mechanism configured for the ServletContext.
void logout()
Establish  null as the value returned when  getUserPrincipal,  getRemoteUser, and  getAuthType is called on the request.
default PushBuilder newPushBuilder()
Instantiates a new instance of  PushBuilder for issuing server push responses from the current request.
<T extends HttpUpgradeHandler>
T
upgrade(Class<T> handlerClass)
Creates an instance of  HttpUpgradeHandler for a given class and uses it for the http protocol upgrade processing.

同理,HttpServletRequest也是一样:

Extends the ServletResponse interface to provide HTTP-specific functionality in sending a response. For example, it has methods to access HTTP headers and cookies.

The servlet container creates an HttpServletResponse object and passes it as an argument to the servlet's service methods (doGet, doPost, etc).

常用的方法有:

Modifier and Type Method and Description
void addCookie(Cookie cookie)
Adds the specified cookie to the response.
void addDateHeader(String name, long date)
Adds a response header with the given name and date-value.
void addHeader(String name, String value)
Adds a response header with the given name and value.
void addIntHeader(String name, int value)
Adds a response header with the given name and integer value.
boolean containsHeader(String name)
Returns a boolean indicating whether the named response header has already been set.
String encodeRedirectUrl(String url)
Deprecated. 
As of version 2.1, use encodeRedirectURL(String url) instead
String encodeRedirectURL(String url)
Encodes the specified URL for use in the  sendRedirect method or, if encoding is not needed, returns the URL unchanged.
String encodeUrl(String url)
Deprecated. 
As of version 2.1, use encodeURL(String url) instead
String encodeURL(String url)
Encodes the specified URL by including the session ID, or, if encoding is not needed, returns the URL unchanged.
String getHeader(String name)
Gets the value of the response header with the given name.
Collection<String> getHeaderNames()
Gets the names of the headers of this response.
Collection<String> getHeaders(String name)
Gets the values of the response header with the given name.
int getStatus()
Gets the current status code of this response.
default Supplier<Map<String,String>> getTrailerFields()
Gets the supplier of trailer headers.
void sendError(int sc)
Sends an error response to the client using the specified status code and clears the buffer.
void sendError(int sc, String msg)
Sends an error response to the client using the specified status and clears the buffer.
void sendRedirect(String location)
Sends a temporary redirect response to the client using the specified redirect location URL and clears the buffer.
void setDateHeader(String name, long date)
Sets a response header with the given name and date-value.
void setHeader(String name, String value)
Sets a response header with the given name and value.
void setIntHeader(String name, int value)
Sets a response header with the given name and integer value.
void setStatus(int sc)
Sets the status code for this response.
void setStatus(int sc, String sm)
Deprecated. 
As of version 2.1, due to ambiguous meaning of the message parameter. To set a status code use setStatus(int), to send an error with a description use sendError(int, String). Sets the status code and message for this response.
default void setTrailerFields(Supplier<Map<String,String>> supplier)
Sets the supplier of trailer headers.


二、JSP

     java server page,动态技术标准,嵌入了java的html文件,引入目的:负责用户的html显示,实现"业务逻辑"和“视图实现”的分离。本质还是一个servlet,因为它不是被客户端直接的调用,而是 先翻译成 .java 文件,编译成 .class 文件而执行。



三、JavaBean

     java bean是可复用组件(说明白了,就是将复用性强的java代码封装在一个类文件中)。对比 EJB,主要用在客户端的开发,只能在开发阶段定制,也不是什么分布式对象,只能在web-app内部被访问。




待续...


【R-terra包|第一节】- 栅格相关性、散点图 、波段的计算与异常值处理 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 —```mermaid flowchat st=>start: 开始 e=>end: 结束 op=>operation: 我的操作 cond=>condition: 确认? st->op->cond cond(yes)->e cond(no)->op 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能. 阅读详情

相关推荐

关于使用vcpkg下载osgearth遇到的问题

注意--x-manifest-root=后面跟着的E:\gitproject\osgearth-osgearth-3.5\vcpkg是你下载的源码解压缩后vcpkg.json的文件地址,然后等待编译完成。安装vcpkg后使用vcpkg install osgearth:x64-windows安装好osgearth并且导入项目使用时,发现无法运行官方文档中示例的main.cpp。这里写一种自己用过的使用vcpkg安装osgearth3.5的方法,源码,打开vcpkg所在的命令行,执行。示例main.cpp。

m0_61776040的博客 1524

JavaWeb基础学习6

web服务器接收到客户端的HTTP请求,针对这个请求,分别创建一个代表的HttpServletRequest对象,代表响应的一个HttpServletResponse对象。

m0_67538972的博客 668

ubuntu20.4源码安装最新gcc(gcc V12.2)

Ubuntu20.4自带的gcc为V9.4.0的版本,老版本的gcc存在不支持新版本C语言规范,在配置、编译、安装应用软件或工具时,可能存在不能正确安装的问题。(比如:libpqxx-7.7.4在配置时要求c++17版本的支持,但gcc V9.4.0版本不支持c++17)。因此本文介绍ubuntu20.4的系统下载最新gcc12.2版本源码,并进行本地编译、安装。本节内容包括gcc12.2的必备库安装和gcc12.2安装两部分内容组成。

q544344318的博客 1万+

java pss项目总结_Java PSSParameterSpec.getTrailerField方法代码示例

import java.security.spec.PSSParameterSpec; //导入方法依赖的package包/类@Overrideprotected final void engineSetParameter(AlgorithmParameterSpec params)throws InvalidAlgorithmParameterException {if (!(params in...

weixin_39646725的博客 453

6.5 构网型储能系统的协同控制策略

本文系统阐述了构网型储能系统的协同控制策略,重点分析了多机组群协同运行面临的功率分配不均、动态响应失配等挑战。研究提出了改进型下垂控制与虚拟阻抗法、基于一致性算法的分布式协同控制等解决方案,探讨了构网型储能与同步发电机在惯性响应、一次调频等方面的协同机制,以及与跟网型电源在电压支撑、阻抗重塑等方面的互补作用。文章构建了分层控制架构,为实现多类型电源的全局优化运行提供了技术路径,对提升高比例新能源电力系统的稳定性具有重要意义。

技术工作者 1001

海康SDK实战:如何从PS流中提取H264裸流并实现前端播放(附完整代码)

本文详细介绍了如何利用海康SDK从PS流中提取H264裸流,并构建无插件前端播放的完整链路。通过解析PS流结构、提取H264 ES流,结合WebSocket实时传输与WFS.js前端播放器,实现了低延迟、高可控性的视频流处理方案,为开发者提供了从数据源到前端渲染的实战代码与清晰指南。

weixin_29051811的博客 476

简述介绍Spring MVC 框架

MVC模式是指Model-View-Controller(模式-视图-控制器)模式,是开发Web应用程序时常用的一种代码分层方式。

God021207的博客 2638

addBumpConnectTargetConstraint 命令详解

本文介绍了Cadence Innovus中用于倒装芯片设计的addBumpConnectTargetConstraint命令的核心功能和使用方法。该命令主要用于为凸点(Bump)添加连接目标约束,通过绑定实例、引脚/网络和端口号等属性,实现凸点与电源/信号网络的精准映射。文章详细解析了命令语法结构、参数说明及使用场景,包括必选参数(指定凸点方式)、分支选择(实例连接或电源连接类型)以及互斥参数(引脚名与网络名)等重要注意事项,并提供了典型应用示例。该命令特别适用于倒装芯片设计中凸点与PG网络、IO实例的连接

u013620135的博客 394

java三大框架是什么

java三大框架是什么 Struts、Hibernate和Spring是我们Java开发中的常用关键,他们分别针对不同的应用场景给出最合适的解决方案。但你是否知道,这些知名框架最初是怎样产生的?推荐课程:Java教程。 我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean。但是这种结构仍然存在问题:如JSP页.

阿星君 1233

RK3588 hdmirx 调试(含v4l2工具,edid编辑)

RK3588 Buildroot系统中调试HDMI-RX的过程,包括抓图、修改EDID数据、编辑EDID等操作。首先,通过logcat和寄存器信息查询HDMI-RX的状态,使用v4l2-ctl工具进行测试和修改EDID。

501846585_QQAndroid_java 2684

杰理AC695N芯片跑iic接口的oled驱动分享

本文介绍了一个基于IIC接口的0.96寸OLED显示屏驱动程序,适用于SSD1306控制器。驱动采用软件模拟IIC方式,支持字符、数字、字符串、汉字和图片显示,测试平台为杰理AC695N系列芯片。硬件参数包括128×64分辨率,IIC接口(地址0x78),使用IO_PORTA_02(SDA)和IO_PORTA_03(SCL)引脚。驱动包含OLED主文件(oled.c/h)、软件IIC实现(soft_iic.c/h)和字体/图片数据文件(oledfont.h/bmp.h),可通过修改soft_iic.h中的引

qq_42014563的博客 882

Jsp+JavaBean模式,Jsp+Servlet模式,MVC模式介绍

Jsp+JavaBean模式,Jsp+Servlet模式,MVC模式介绍 鉴于最近一些零基础的朋友要做项目,我梳理一下web项目的运行流程,主要是说一下理解思路,有什么不足或不对的,多多理解。 在N久前,传统的项目有用jsp+JavaBeans开发的,有用JSP+Servlet开发的,还有的是符合mvc的JSP+Servlet+JavaBeans开发的。这些说法都没有错。 前面两个年代久远,不说了...

空空说技术的博客 1万+

3.DJI-payload SDK自定义控件的设计:

自定义控件(Widget)是指负载运行时,在用户界面中显示的自定义 UI 控件,以帮助用户快速查看负载独特的设备状态,或者对负载设进行设置。这些 UI 控件可以显示在以下用户界面中。Pilot 2 应用程序;大疆智图;基于 MSDK 开发的应用程序。这种自定义控件并不是通过 MSDK 实现的,而是通过 PSDK 的配置实现的。。

哒宰的博客 770

基于jsp servlet javabean的学生管理系统

日期:2019/10/24 该学生管理系统基于jsp+servlet+javabean,使用MVC模式,是一个很基础的学生管理系统,由于这是本学期的课程大作业,所以现在还没有完全写完,这篇博文会根据进度逐步更新. 先贴一下该学生管理系统的网址(我已经上传到服务器上了) http://139.9.200.70:8080/StudentMS/login.html 如果要使用学生身份登陆,...

马马也的个人博客 6973

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

JSP&Servlet(9)——JSP+JavaBean+Servlet中的MVC

MVC MVC指MVC模式的某种框架,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet+ JavaBean的模式。 视图 视图是用户看到并与之交互的界面。 MVC好处是它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员...

二木成林 860

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Servlet+JSP+JavaBean开发模式(MVC)介绍

一、Servlet+JSP+JavaBean开发模式(MVC)介绍   Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式。   这里以一个最常用的用户登录注册程序来讲解S

chenxuyuandawang的博客 3633

基于MVC和三层架构,用jsp-servlet-JavaBean实现登录和注册

目录 1.创建数据库表(MySQL中)。 2.根据数据库表在model包下创建User类 3.写登录界面login.jsp 4.写登录时负责跳转的servlet,LoginServlet.java 5.根据LoginServlet中所用到的UserService中的login方法才能完成登录,所以我们要在service包中的UserService编写login方法 6.login方法要通过UserDao对象调用Dao层方法与数据库交互,接下来写Dao层的UserDao类 7.写一...

受气包Qi的博客 5754

JavaWeb--------Servlet+JSP+JavaBean整合

SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式。 一.JSP+JavaBean开发模式 1.1 jsp+javabean开发模式...

詹煜彪9527 1万+

Jsp,Servlet,JavaBean

什么是JSP   java服务器页面(Java Server Pages,JSP)技术是指:在HTML中嵌入Java脚本语言,然后由应用服务器中的JSP引擎来编译和执行,之后再将生成的整个页面返回给客户端. Web容器处理JSP文件请求需要经过三个阶段:   1.翻译阶段..JSP文件会被Web容器中的Jsp引擎转换成Java源码(.java)   2.编译阶段..Java源码会被编译成可

RenJanely的专栏 1325

初识JSP,JavaBean ,Servlet以及一个简单mvc模式的登录界面

1:JSP JSP的基本语法:指令标识page,include,taglib;page指令标识常用的属性包含Language用来定义要使用的脚本语言;contentType定义JSP字符的编码和页面响应的MIME类型;pageEncoding:jsp页面的字符编码;include指令&lt;%@ include file="path"%&gt;静态包含,先包含,后编译处理;&lt;jsp:inc...

qq_40285302的博客 1773

mysql+jdbc+servlet+jsp实现基于MVC的学生疫情信息打卡系统

目录概览环境:框架:功能介绍范式分析具体功能逻辑代码分析1.bean:2.dao与dao.impl:3.service与service.impl:4.servlet:5.utils:6.jsp:7.web.xml:结果整体反思 概览 小组团队完成的数据库,本人负责教师功能的一部分以及整个框架的初步构建。整体来讲分工还是有点混乱的,因为基本上互相都有修改各自的部分。 由于代码量较多,所以仅放出部分自己写的内容。 环境: Mysql8.0+Tomcat9.0+JDK1.8+Eclipse IDE for Ent

qq_40398985的博客 4438

JSP+JavaBean+Servlet模式及BeanUtils框架使用

JSP模式使用BeanUtils框架1. jsp+javaBean2. jsp+javaBean+Servlet(MVC)2.1 示例: 登陆实现3. 自定义 MyBeanUtils.populate() 1. jsp+javaBean jsp:请求处理、业务处理、数据库操作、数据显示 javaBean:数据封装 优点:开发简单 缺点:维护难,代码几乎都在 jsp 中 2. jsp+javaBea...

Hello, New World! 858

javaWeb入门<1>Servlet+Jsp+JavaBean实现MVC开发模式登陆注册实例详解

Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式。   这里以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模式,通过这个用户登录注册程序综合案例,把之前的学过的XML、Xpath、Servlet、jsp的知识点都串联起来。 分层架构的代码

飞翔的心 5171

JSP程序设计复习题库(客观题)

一、选择题 1、下面哪一个不是JSP本身已加载的基本类?(B ) A、java.lang.* B、java.io.* C、javax.servlet.* D、javax.servlet.jsp.* 2、以下关于JavaBean的说法中,错误的是(B) A、JavaBean是基于JA V A语言的。 B、JavaBean是JSP的内置对象之一。 C、JavaBean是一种Java类。 D、JavaBean是一个可重复使用的软件组件。 3、下面的说法错误的是:(D) A Jsp可以处理动态内容和静态内容 B 在

qq_44111805的博客 4万+

基于MVC模式实现用户注册和登录功能

目录1、实验简介2、具体细节分析3、实验工具4、整体框架截图5、代码实现1、login.jsp2、ok.jsp3、register.jsp4、list.jsp5、edit.jsp6、DBConn.java7、User.java8、UserService.java9、AddServlet.java10、DeleteServlet.java11、EditServlet.java12、LoginServ...

Haa__的博客 2万+

基于Servlet+JSP+JavaBean开发模式的用户登录注册

一、Servlet+JSP+JavaBean开发模式(MVC)介绍  Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式。  这里以一个最常用的用户登录注册程序来讲解Servl...

qq_15150903的博客 2038
上一篇: Java(6):基础语法(1)---else if
下一篇: Java(18):多线程的启用
后台技术汇
博客等级 码龄11年 670粉丝 531原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

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

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

打赏作者

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

抵扣说明:

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

余额充值