Jsp&Servlet学习笔记(二)

本文深入探讨了JSP中的EL表达式的使用方法,包括内置对象、访问范围属性、接收请求参数、对象和集合操作等。同时,介绍了JSP自定义标签、JSTL标签库的使用,涵盖核心标签、国际化、SQL、XML和函数标签库的详细应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Jsp&Servlet学习笔记(二)

 

第六章EL 表达式

第一节:EL 表达式简介

表达式语言(Expression Language,EL)

提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。

 

第二节:EL 表达式内置对象

1、pageContext 表示javax.servlet.jsp.PageContext 对象

2、pageScope 表示从page 属性范围查找输出属性

3、requestScope 表示从request 属性范围查找输出属性

4、sessionScope 表示从session 属性范围查找输出属性

5、applicationScope 表示从application 属性范围查找输出属性

6、param 接收传递到本页面的参数

7、paramValues 接收传递到本页面的一组参数

8、header 取得一个头信息数据

9、headerValues 取出一组头信息数据

10、cookie 取出cookie 中的数据

11、initParam 取得配置的初始化参数

 

第三节:EL 表达式访问4 种范围属性

寻找值的顺序:page->request->session->application

<body>

<%

    pageContext.setAttribute("info1","page范围的值");

    request.setAttribute("info1","request范围的值");

    session.setAttribute("info1","session范围的值");

    application.setAttribute("info1","application范围的值");

%>

<h1>${info1 }</h1>

</body>

执行结果是:page范围的值

 

第四节:EL 表达式接收请求参数

param:单个参数

paramValues:一组参数

<body>

    <form action="el2.jsp" method="post">

       <input type="text" name="name"/>

       <input type="submit" value="提交el2.jsp"/>

    </form>

    <a href="el2.jsp?age=12">提交el2.jsp</a>

   

    <form action="el2.jsp" method="post">

       <input type="checkbox" name="hobby" value="java语言"/>java语言

       <input type="checkbox" name="hobby" value="C#语言"/>C#语言

       <input type="checkbox" name="hobby" value="php语言"/>php语言

       <input type="submit" value="提交el2.jsp"/>

    </form>

</body>

//el2.jsp

<body>

<%

    request.setCharacterEncoding("utf-8");

%>

<h1>姓名:${param.name }</h1>

<h1>年龄:${param.age }</h1>

<h1>爱好一:${paramValues.hobby[0] }</h1>

<h1>爱好二:${paramValues.hobby[1] }</h1>

<h1>爱好三:${paramValues.hobby[2] }</h1>

</body>

 

第五节:EL 表达式对象操作

<%@page import="com.java1234.model.People" %>

<body>

<%

    People zhangsan=new People();

    zhangsan.setId(1);

    zhangsan.setName("张三");

    zhangsan.setAge(20);

    pageContext.setAttribute("zhangsan",zhangsan);

%>

<h1>编号:${zhangsan.id }</h1>

<h1>姓名:${zhangsan.name }</h1>

<h1>年龄:${zhangsan.age }</h1>

</body>

 

第六节:EL 表达式集合操作

<%@ page import="java.util.*" %>

<body>

<%

    List all=new LinkedList();

    all.add(0,"元素一");

    all.add(1,"元素二");

    all.add(2,"元素三");

    request.setAttribute("all",all);

%>

<h1>${all[0] }</h1>

<h1>${all[1] }</h1>

<h1>${all[2] }</h1>

</body>

 

第七节:EL 表达式运算符操作

算数运算符,关系运算符,逻辑运算符;

三目运算符;

empty 关键字:判断是否空

<body>

<%

    request.setAttribute("num1",10);

    request.setAttribute("num2",3);

    request.setAttribute("flag1",true);

    request.setAttribute("flag2",false);

%>

<h5>算数运算符</h5>

<p>num1=${num1 },num2=${num2 }</p>

<p>num1+num2=${num1+num2 }</p>

<p>num1-num2=${num1-num2 }</p>

<p>num1*num2=${num1*num2 }</p>

<p>num1/num2=${num1/num2 }</p>

<p>num1%num2=${num1%num2 }</p>

<p>num1*(num1-num2)=${num1*(num1-num2) }</p>

<h5>关系运算符</h5>

<p>flag1=${flag1 },flag2=${flag2 }</p>

<p>与操作flag1 && flage2${flag1 && flage2 }</p>

<p>或操作flag1 || flage2${flag1 || flage2 }</p>

<p>非操作!flag1${!flag1}</p>

<h5>三目运算符</h5>

<p>三目操作:num1>num2${num1>num2?"yes":"no" }</p>

<h5>empty关键字</h5>

<p>判断空操作:${empty num1 }</p>

<p>判断空操作:${empty num3 }</p>

</body>

第七章Jsp 自定义标签

第一节:Jsp 自定义标签简介

Jsp自定义标签在功能上逻辑上与javaBean 类似,都封装Java代码。自定义标签是可重用的组件代码,并且允许开发人员为复杂的操作提供逻辑名称。

JSP开发人员使用标签库创建标签.标签库是按照功能或实现进行分组的自定义标签的集合。

第二节:问候自定义标签他大爷

//HelloWorldTag.java

package com.java1234.tag;

 

import java.io.IOException;

public class HelloWorldTag extends TagSupport {

 

    private static final long serialVersionUID = 1L;

 

    @Override

    public int doStartTag() throws JspException {

       // TODO Auto-generated method stub

       JspWriter out=this.pageContext.getOut();

       try {

           out.print("自定义标签大爷你好!");

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

       return TagSupport.SKIP_BODY;    //直接结束标签

      

    }  

}

//WEB-INF目录下新建一个java1234.tld文件,配置

    <tag>

    <name>helloWorld</name>

    <tag-class>

        com.java1234.tag.HelloWorldTag

    </tag-class>

    <body-content>empty</body-content>

    </tag>

//helloWorldTag.jsp

<%@ taglib prefix="java1234" uri="/WEB-INF/java1234.tld" %>

<body>

<java1234:helloWorld/>

</body>

运行结果如图:

第三节:自定义有属性的标签

在上面的HelloWorldTag.java添加name属性,文件命名为HelloWorldTag2.java

public class HelloWorldTag2 extends TagSupport {

 

    private static final long serialVersionUID = 1L;

   

    private String name;

 

    public String getName() {

       return name;

    }

 

    public void setName(String name) {

       this.name = name;

    }

 

    @Override

    public int doStartTag() throws JspException {

       // TODO Auto-generated method stub

       JspWriter out=this.pageContext.getOut();

       try {

           out.print(name+"自定义标签大爷你好!");

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

       return TagSupport.SKIP_BODY;    //直接结束标签

      

    }  

}

配置Java234.tld文件

<tag>

    <name>helloWorld2</name>

    <tag-class>

        com.java1234.tag.HelloWorldTag2

    </tag-class>

    <body-content>empty</body-content>

    <attribute>

        <name>name</name>

        <required>true</required>

        <rtexprvalue>true</rtexprvalue>

    </attribute>

  </tag>

helloWorldTag.jsp

<body>

<java1234:helloWorld2 name="JspServlet屌炸天"/>

</body>

运行结果:

第四节:自定义有标签体的标签

//IterateTag.java,tld文件配置略

public class IterateTag extends TagSupport{

 

    private static final long serialVersionUID = 1L;

   

    private String var;

    private String items;

    private Iterator iter;

   

    public String getVar() {

       return var;

    }

 

    public void setVar(String var) {

       this.var = var;

    }

 

    public String getItems() {

       return items;

    }

 

    public void setItems(String items) {

       this.items = items;

    }

 

    public Iterator getIter() {

       return iter;

    }

 

    public void setIter(Iterator iter) {

       this.iter = iter;

    }

 

    @Override

    public int doStartTag() throws JspException {

       Object value=this.pageContext.getAttribute(items);    //items="people"

       if(value!=null && value instanceof List){

           this.iter=((List)value).iterator();

           if(iter.hasNext()){

              this.pageContext.setAttribute(var, iter.next());    //var="p"

              return TagSupport.EVAL_BODY_INCLUDE; // 执行标签体

           }else{

              return TagSupport.SKIP_BODY; // 退出标签执行

           }

       }else{

           return TagSupport.SKIP_BODY; // 退出标签执行

       }

    }

 

    @Override

    public int doAfterBody() throws JspException {

       if(iter.hasNext()){

           this.pageContext.setAttribute(var, iter.next());

           return TagSupport.EVAL_BODY_AGAIN; // 再执行一次标签体

       }else{

           return TagSupport.SKIP_BODY; // 退出标签执行

       }

    }

}

//iterateTag.jsp

<body>

<%

    List people=new ArrayList();

    people.add(0,"王二小");

    people.add(1,"丝丝光");

    people.add(2,"草泥马");

    pageContext.setAttribute("people", people);

%>

<java1234:iterate items="people" var="p">

    <h2>${p }</h2>

</java1234:iterate>

</body>

 

第五节:简单标签

//IterateSimpleTag.java,tld文件配置略

public class IterateSimpleTag extends SimpleTagSupport{

 

    private static final long serialVersionUID = 1L;

   

    private String var;

    private String items;

   

    public String getVar() {

       return var;

    }

 

    public void setVar(String var) {

       this.var = var;

    }

 

    public String getItems() {

       return items;

    }

 

    public void setItems(String items) {

       this.items = items;

    }

 

    @Override

    public void doTag() throws JspException, IOException {

       Object value=this.getJspContext().getAttribute(items);

       if(value!=null && value instanceof List){

           Iterator iter=((List)value).iterator();

           while(iter.hasNext()){

              this.getJspContext().setAttribute(var, iter.next());

              this.getJspBody().invoke(null); // 响应页面

           }

       }

    }

}

//iterateSimpleTag.jsp

<body>

<%

    List people=new ArrayList();

    people.add("王二小2");

    people.add("丝丝光2");

    people.add("草泥马2");

    pageContext.setAttribute("people", people);

%>

<java1234:iterate2 items="people" var="p">

    <h2>${p }</h2>

</java1234:iterate2>

</body>

 

第八章Jsp 标准标签库

第一节:JSTL 引入

JSTL(JSP Standard Tag Library ,JSP 标准标签库)

 

第二节:问候JSTL 他大爷

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<body>

<c:out value="jstl大爷你好"></c:out>

</body>

 

第三节:JSTL 核心标签库

c:out 内容输出标签;

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<body>

<%

    pageContext.setAttribute("people","张三");

%>

<h2><c:out value="${people}"></c:out></h2>

<h2><c:out value="${people2}" default="某人"></c:out></h2>

</body>

c:set 用来设置4属性范围值的标签;

<body>

<c:set var="people" value="张三" scope="request"></c:set>

<h2><c:out value="${people}"></c:out></h2>

<jsp:useBean id="people2" class="com.java1234.model.People" scope="page"></jsp:useBean>

<c:set property="id" target="${people2 }" value="007"></c:set>

<c:set property="name" target="${people2 }" value="王二小"></c:set>

<c:set property="age" target="${people2 }" value="16"></c:set>

<h2>编号:${people2.id }</h2>

<h2>姓名:${people2.name }</h2>

<h2>年龄:${people2.age }</h2>

</body>

c:remove 用来删除指定范围中的属性;

<body>

<c:set var="people" value="张三" scope="request"></c:set>

<h2><c:out value="${people}" default="没人啊"></c:out></h2>

<c:remove var="people" scope="request"/>

<h2><c:out value="${people}" default="没人啊"></c:out></h2>

</body>

c:catch 用来处理程序中产生的异常;

<body>

<c:catch var="errMsg">

    <%

       int a=1/0;

    %>

</c:catch>

<h2>异常信息:${errMsg }</h2>

</body>

c:if 用来条件判断;

<body>

<jsp:useBean id="people" class="com.java1234.model.People" scope="page"></jsp:useBean>

<c:set property="id" target="${people }" value="007"></c:set>

<c:set property="name" target="${people }" value="王二小"></c:set>

<c:set property="age" target="${people }" value="16"></c:set>

<c:if test="${people.name=='王二小' }" var="r" scope="page">

    <h2>是王二小</h2>

</c:if>

<c:if test="${people.age<18 }">

    <h2>是未成年</h2>

</c:if>

</body>

c:choosec:whenc:otherwise 用来多条件判断;

<body>

<jsp:useBean id="people" class="com.java1234.model.People" scope="page"></jsp:useBean>

<c:set property="id" target="${people }" value="007"></c:set>

<c:set property="name" target="${people }" value="王二小"></c:set>

<c:set property="age" target="${people }" value="19"></c:set>

 

<c:choose>

    <c:when test="${people.age<18 }">

       <h2>小于18</h2>

    </c:when>

    <c:when test="${people.age==18 }">

       <h2>等于18</h2>

    </c:when>

    <c:otherwise>

       <h2>大于18</h2>

    </c:otherwise>

</c:choose>

</body>

c:forEach 用来遍历数组或者集合;

<%@ page import="com.java1234.model.*"%>

<%@ page import="java.util.*"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<body>

<%

    String dogs[]={"小黑","小黄","小白","小小"};

    pageContext.setAttribute("dogs",dogs);

%>

<c:forEach var="dog" items="${dogs }">

    ${dog }

</c:forEach>

<hr/>

<c:forEach var="dog" items="${dogs }" step="2">  <!-- 2个取一个,隔着取 -->

    ${dog }

</c:forEach>

<hr/>

<c:forEach var="dog" items="${dogs }" begin="1" end="2">

    ${dog }

</c:forEach>

<hr/>

<%

    List<People> pList=new ArrayList<People>();

    pList.add(new People(1,"张三",10));

    pList.add(new People(2,"李四",20));

    pList.add(new People(3,"王五",30));

    pageContext.setAttribute("pList",pList);

%>

<table>

    <tr>

       <th>编号</th>

       <th>姓名</th>

       <th>年龄</th>

    </tr>

    <c:forEach var="p" items="${pList }">

       <tr>

           <td>${p.id }</td>

           <td>${p.name }</td>

           <td>${p.age }</td>

       </tr>

    </c:forEach>

</table>

</body>

c:fortoke ns 分隔输出;

<body>

<%

    String str1="www.java1234.com";

    String str2="张三,李四,王五";

    pageContext.setAttribute("str1",str1);

    pageContext.setAttribute("str2",str2);

%>

<c:forTokens items="${str1 }" delims="." var="s1">

    ${s1 }

</c:forTokens>

<hr/>

<c:forTokens items="${str2 }" delims="" var="s2">

    ${s2 }

</c:forTokens>

</body>

c:import 导入页面;

<body>

<c:import url="c_if.jsp"></c:import>

<c:import url="c_choose.jsp"></c:import>

</body>

 

c:url 生成一个url 地址;

<body>

<c:url value="http://www.java1234.com" var="url">

    <c:param name="name" value="xiaofeng"></c:param>

    <c:param name="age" value="26"></c:param>

</c:url>

<a href="${url }">Java知识分享网</a>

</body>

c:redirect 客户端跳转

<body>

<c:redirect url="target.jsp">

    <c:param name="name" value="xiaofeng"></c:param>

    <c:param name="age" value="26"></c:param>

</c:redirect>

</body>

//target.jsp

<body>

<h2>姓名:${param.name }</h2>

<h2>年龄:${param.age }</h2>

</body>

第四节:JSTL 国际化标签库

fmt:setLocale 设定用户所在的区域;

fmt:formatDate 对日期进行格式化;

<%@ page import="java.util.*"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<body>

<%

    pageContext.setAttribute("date",new Date());

%>

中文日期:

<fmt:setLocale value="zh_CN"/>

<fmt:formatDate value="${date }"/>

<hr/>

英文日期:

<fmt:setLocale value="en_US"/>

<fmt:formatDate value="${date }"/>

</body>

fmt:requestEncoding 设置所有的请求编码;

<body>

<fmt:requestEncoding value="UTF-8"/>

</body>

fmt:bundle fmt:message fmt:param 读取国际化资源;

//文件info_zh_CN.properties

name=\u5c0f\u950b

info=\u5f53\u524d\u7528\u6237{0}:\u6b22\u8fce\u4f7f\u7528\u672c\u7cfb\u7edf

//文件info_en_US.properties

name=xiaofeng

info=Current user{0}:Welcome to use our system

//fmt_bundle.jsp

<body>

<fmt:setLocale value="zh_CN"/>

<fmt:bundle basename="info">

    <fmt:message key="name" var="userName"/>

</fmt:bundle>

<h2>姓名:${userName }</h2>

<fmt:bundle basename="info">

    <fmt:message key="info" var="infomation">

       <!-- 动态插入参数 -->

       <fmt:param value="<font color='red'>小锋</font>"/>  

    </fmt:message>

</fmt:bundle>

<h2>信息:${infomation }</h2>

<hr/>

<fmt:setLocale value="en_US"/>

<fmt:bundle basename="info">

    <fmt:message key="name" var="userName"/>

</fmt:bundle>

<h2>姓名:${userName }</h2>

<fmt:bundle basename="info">

    <fmt:message key="info" var="infomation">

       <fmt:param value="<font color='red'>小锋</font>"/>

    </fmt:message>

</fmt:bundle>

<h2>信息:${infomation }</h2>

</body>

fmt:formatNumber 格式化数字;

<body>

<!-- value:数值 ;  type:数值类型;  pattern:格式 -->

<fmt:formatNumber value="12" type="currency" pattern=".00"/>

<fmt:formatNumber value="12" type="currency" pattern=".0#"/>

<!-- 末尾的#若为0则省略 -->

<fmt:formatNumber value="1234567890" type="currency"/>

<fmt:formatNumber value="123456.7891" pattern="#,#00.0#"/>

</body>

fmt:formatDate 格式化日期;
<body>

<%

    Date date=new Date();

    pageContext.setAttribute("date",date);

%>

<fmt:formatDate value="${date }" pattern="yyyy-MM-dd HH:mm:ss"/>

<hr/>

<fmt:formatDate value="${date }" pattern="yyyy-MM-dd"/>

</body>

fmt:timeZone 设置临时时区;

<body>

<%

    Date date=new Date();

    pageContext.setAttribute("date",date);

%>

当前时间:<fmt:formatDate value="${date }" pattern="yyyy-MM-dd HH:mm:ss"/>

<hr/>

格林尼治时间:

<fmt:timeZone value="GMT">

   <fmt:formatDate value="${date }" pattern="yyyy-MM-dd HH:mm:ss"/>

</fmt:timeZone>

</body>

第五节:JSTL SQL 标签库

Sql:setDataDource 设置JDBC 连接;

<body>

<h1>设置JDBC连接</h1>

<sql:setDataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/db_jstl?serverTimezone=UTC" user="root" password="password" />

</body>

sql:query 数据库查询操作;

<body>

<h1>设置JDBC连接</h1>

<sql:setDataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/db_jstl?serverTimezone=UTC" user="root" password="password" />

<sql:query var="result">

    select * from t_student;

</sql:query>

<h2>总记录数:${result.rowCount }</h2>

<table>

    <tr>

       <th>编号</th>

       <th>学号</th>

       <th>姓名</th>

       <th>出生日期</th>

       <th>性别</th>

    </tr>

    <c:forEach var="student"  items="${result.rows }">

    <tr>

       <td>${student.id }</td>

       <td>${student.stuNo }</td>

       <td>${student.stuName }</td>

       <td>${student.birthday }</td>

       <td>${student.sex }</td>

    </tr>

    </c:forEach>

</table>

</body>

Sql:update 数据库添加,修改,删除操作;

<h1>添加数据</h1>

<sql:update var="result" >

    insert into t_student values(null,"008","草泥马","1991-1-1","");

</sql:update>

<h1>修改数据</h1>

<sql:update var="result" >

    update t_student set stuNo="010",sex="未知" where id=6

</sql:update>

<h1>删除数据</h1>

<sql:update var="result" >

    delete from t_student where id=6

</sql:update>

sql:transaction 数据库事务;

<h1>事务</h1>

<sql:transaction>

    <sql:update var="result" >

       insert into t_student values(null,"008","草泥马","1991-1-1","");

    </sql:update>

</sql:transaction>

 

第六节:JSTL XML 标签库

x:parse 解析xml

x:out 输出xml 文件的内容;

//usersInfo.xml

<?xml version="1.0" encoding="UTF-8"?>

<users>

    <user>

       <name id="n1">张三</name>

       <birthday>2011-1-1</birthday>

    </user>

</users>

//xml_out.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>

</head>

<body>

<c:import var="usersInfo" url="usersInfo.xml" charEncoding="UTF-8"/>

<x:parse var="usersInfoXml" doc="${usersInfo }"/>

<h2>姓名:<x:out select="$usersInfoXml/users/user/name"/>

(ID:<x:out select="$usersInfoXml/users/user/name/@id"/>)</h2>

<h2>出生日期:<x:out select="$usersInfoXml/users/user/birthday"/></h2>

</body>

x:set xml 读取的内容保存到指定的属性范围;

<body>

<c:import var="usersInfo" url="usersInfo.xml" charEncoding="UTF-8"/>

<x:parse var="usersInfoXml" doc="${usersInfo }"/>

<x:set var="userInfoXml" select="$usersInfoXml/users/user"/>

<h2>姓名:<x:out select="$userInfoXml/name"/></h2>

</body>

x:if 判断指定路径的内容是否符合判断的条件;

<body>

<c:import var="usersInfo" url="usersInfo.xml" charEncoding="UTF-8"/>

<x:parse var="usersInfoXml" doc="${usersInfo }"/>

<x:if select="$usersInfoXml/users/user/name/@id='n1'">

    <h2>有编号是n1user信息</h2>

</x:if>

</body>

x:choose x:when x:otherwise 多条件判断;

<body>

<c:import var="usersInfo" url="usersInfo.xml" charEncoding="UTF-8"/>

<x:parse var="usersInfoXml" doc="${usersInfo }"/>

<x:choose>

    <x:when select="$usersInfoXml/users/user/name/@id='n2'">

       <h2>有编号是n2user信息</h2>

    </x:when>

    <x:otherwise>

       <h2>没有编号是n2user信息</h2>

    </x:otherwise>

</x:choose>

</body>

x:forEach 遍历

//usersInfo2.xml

<?xml version="1.0" encoding="UTF-8"?>

<users>

    <user>

       <name id="n1">张三</name>

       <birthday>2011-1-1</birthday>

    </user>

    <user>

       <name id="n2">王五</name>

       <birthday>2011-1-2</birthday>

    </user>

    <user>

       <name id="n3">赵六</name>

       <birthday>2011-1-3</birthday>

    </user>

</users>

//xml_forEach.jsp

<body>

<c:import var="usersInfo" url="usersInfo2.xml" charEncoding="UTF-8"/>

<x:parse var="usersInfoXml" doc="${usersInfo }"/>

<x:forEach select="$usersInfoXml/users/user" var="userInfoXml">

    姓名:<x:out select="$userInfoXml/name"/><br>

    出生日期:<x:out select="$userInfoXml/birthday"/>

    <hr/>

</x:forEach>

</body>

第七节:JSTL 函数标签库

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

<body>

<%

    pageContext.setAttribute("info","www.java1234.com");

%>

<h2>查找java1234位置:${fn:indexOf(info,"java1234")}</h2>

<h2>判断java1234是否存在:${fn:contains(info,"java1234")}</h2>

<h2>截取:${fn:substring(info,0,5)}</h2>

<h2>拆分:${fn:split(info,".")[1]}</h2>

</body>

 

End完!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值