JSP--JSP内置对象

3.1JSP内置对象的概述

为了简化Web程序开发过程,JSP提供了由容器实现和管理的内置对象,也可以将其称为固有对象,隐含对象。这些内置对象在所有的JSP页面中都可以直接使用,不需要JSP页面编写者来实例化。

JSP中采用Java语言作为脚本编程语言,这样不但是系统具有了强大的对象处理能力,还可以动态创建Web页面内容。但Java语法在使用一个对象之前进行实例化,比较繁琐,为了简化开发,JSP提供了一下内置对象,这也是JSP语法结构中的独特语句变量,又被称为JSP预定义变量。它们都是由系统容器实现和管理,在JSP页面中不需要定义,可以直接使用。

在JSP中一共预先定义了9个这样的对象。

  • request
  • response
  • session
  • application
  • out
  • pageContext
  • config
  • page
  • exception

3.2request对象

request对象是javax.servlet.http.HttpServletRequest类型的对象。该对象代表了客户端的请求信息,主要用于接收通过HTTP协议传送到服务器端的数据(包括头信息,系统信息,请求方式以及请求参数等)。request对象的作用域为一次请求。

获取请求参数值

在一个请求中,可以通过“?”的方式来传递参数,然后通过request对象的getParameter()方法来获取参数的值。

String id=request.getParameter("id");
使用getParameter()方法从request对象中获取参数id的值,如果request对象中不存在此参数,那么该方法将返回null.

(1)创建index.jsp页面,在其中加入一个超链接按钮用来请求show.jsp页面,并在请求后加一个参数id。

<body>
         <a href="show.jsp"?id=001">获取请求参数的值</a>
</body>
(2)新建show.jsp页面,在其中通过getParameter()方法来获取id参数与name参数的值,并将其输出到页面中。

<body>
         id参数的值为:<%=request.getParameter("id")%><br>
         name参数的值为:<%=request.getParameter("name")%>
</body>
运行结果:
id参数的值为:001
name参数的值为:null
解决中文乱码

在显示参数值是中文内容时变成乱码,是因为请求参数文字编码方式与页面中的不一致造成的。所有的request请求都是iso-8859-1的,而在此页面采用的是GBK的编码方式。

要解决此问题,只要将获取到的数据通过String的构造方法使用指定的编码类型重新构造一个String对象即可正确地显示出中文。

(1)创建index.jsp页面,在其中加入一个超链接,并在该超链接中传递两个参数:name和sex,其值全部为中文。

<%@ page import="java.net.URLEncoder"%>
<body>
         <a href ="show.jsp?name=<%=URLEncoder.encode("无语")%> & sex=<%=URLEncoder("男")%>">解决中文乱码</a>
</body>
在超链接中传递中文和参数时,这个中文的参数需要应用java.net.URLEncoder.encode()方法进行编码处理,否则在IE6浏览器运行时,有些文字会产生中文乱码。

(2)创建show.jsp页面,在其中将第一个参数name的值进行编码转换。

<body>
        name的参数值为:<%=new String(request.getParameter("name").getBytes("iso-8859-1"),"gbk")%>
        sex的参数值为:<%=request.getParameter("sex")%>
</body> 
运行结果:
name的参赛值为:无语
sex的参数值为:??
获取Form表单的信息
除了获取请求参数中传递的值之外,还可以使用request对象获取从表单中提交过来的信息。

在一个表单中会有不同的标签元素,对于文本元素,单选按钮,下拉列表框都可以使用getParameter()方法来获取其具体的值。

对于复选框以及多选列表框被选定内容就要使用getParameterValues()方法来获取了,该方法会返回一个字符串数组,通过循环遍历这个数组就可以得到用户选定的所有内容。

(1)创建index.jsp页面,在该页面中创建一个form表单。

<form action="show.jsp" method="post">
     <ul style="list-style:none;line-height:30px">
            <li>please input username:<input type="text" name="name"/><br></li>
            <li>select sex:
                   <input name="sex" type="radio" value="男"/>男
                   <input name="sex" type="radio" value="女"/>女
            </li>
            <li>
                  please choose question for password :
                  <select name="question">生日</option>
                        <option value="name">姓名</option>
                  </select>
             </li>
             <li>please input the answer of question: <input type="text" name="key"/></li>
             <li>
                    please choose your habits:
                   <div style="width:400px">
                         <input name="like" type="chexbox" value="dance"/>跳舞
                         <input name="like" type="chexbox" value="sing"/>唱歌
                         <input name="like" type="chexbox" value="read"/>阅读
                   </div>
             </li>
             <li><input type="submit" value="submit"/></li>
     </ul>
</form>
(2)编写show.jsp页面,用来处理请求的。

<ul style="list-style:none;line-height:30px">
      <li>please input username:<%=new String(request.getParameter("name").getBytes("iso-8859-1","gbk")%></li>
      <li>select sex: <%=new String(requset.getParameter("sex").getBytes("iso-8859-1","gbk")%></li>
      <li>please choose question for password :<%=new String(request.getParameter("question").getBytes("iso-8859-1","gbk")%></li>
      <li>please input the answer of question: <%=new String(request.getParameter("key").getBytes("iso-8859-1","gbk")%></li>
      <li>please choose your habits: 
             <%
                     String[] like=request.getParameterValues("like");
                     for(int i=0;i<like.length;i++){
              %>
             <%=new String(like[i].getBytes("iso-8859-1","gbk")+"&nbsp;&nbsp;"%>
            <% }
             %>
       </li>
</ul>
获取请求客户端信息

在request对象中通过相关的方法,还可以获取客户端的相关信息,如HTTP报头信息,客户信息提交方式,客户端主机IP地址,端口号等

request获取客户端信息方法
方法返回值说明
getHeader(String name)String返回指定名称的HTTP头信息
getMethod()String获取客户端向服务器发送请求的方法
getContextPath()String返回请求路径
getProtocol()String返回请求使用的协议
getRemoteAddr()String返回客户端IP地址
getRemoteHost()String返回客户端主机名称
getRemotePort()int返回客户端发出请求端口号
getServletPath()String返回接受客户提交信息的页面
getRequestURI()String返回部分客户端请求的地址,不包括请求的参数
getRequestURL()StringBuffer返回客户端请求地址
使用方法:request.方法名

在作用域中管理属性

通过使用setAttribute()方法可以在request对象的属性列表中添加一个属性,然后在request对象的作用域范围内通过使用getAttribute()方法将其属性取出。

还可以使用removeAttribute()方法将一个属性删除掉。

request对象的作用域为一次请求,超出作用域后属性列表中的属性即会失效。

<%
      request.setAttribute("date",new Date());
%>
<ul style="line-height:24px">
      <li>获取Date属性:<%=request.getAttribute("date")%></li>
      <!--将属性删除--!>
      <%=request.removeAttribute("date");%>
      <li>删除后再获取Date属性:<%=request.getAttribute("date")%></li>
</ul>
cookie管理

cookie是小段的文本信息,通过使用cookie可以标识用户身份,记录用户名及密码,跟踪重复用户。

cookie在服务器端生成并发送给浏览器,浏览器将cookie的key/value保存到某个指定的目录中,服务器的名称与值可以由服务器端定义。

通过cookie的getCookies()方法可以获取所有的cookie对象集合,然后通过cookie对象的getName()方法获取到指定名称的cookie,再通过getValue()方法即可获取到cookie对象的值。

将一个cookie对象发送到客户端使用了response对象的addCookies()方法。

(1)创建index.jsp页面,在其中创建form表单。从request对象中获取cookie,判断是否含有此服务器发送过的cookie,如果没有,则说明该用户第一次访问本站,如果有,则直接将值读取出来,并赋给对应的表单

<%
     String welcome="第一次访问";
     String[] info =new String[]{"","",""};
     Cookie[] cook=request.getCookies();
     if(cook!=null){
             for(int i=0;i<cook.length;i++){
                      if(cook[i].getName().equals("mrCooklnfo")){
                                   info=cook[i].getValue.split("#");
                                   welcome="欢迎回来!";
                        }
               }
         }
%>
<%=info[0]+welcome %>
           <form action="show.jsp" method="post">
                 <ul style="line-height:23px">
                          <li>姓&nbsp;&nbsp;&nbsp;&nbsp;名:<input name="name" type="text" value="<%=info[0]%>"></li>
                          <li>出生日期:<input name="birthday" type="text" value="<%=info[1]%>"></li>
                          <li>邮箱地址:<input name="mail" type="text" value="<%=info[2]%>"></li>
                          <li><input type="submit" value="提交"></li>
                  </ul>
            </form>
(2)创建show.jsp页面文件,在该页面中通过request对象将用户输入的表单信息提取出来;创建一个cookie对象,并通过response对象的addCookie()方法将其发送到客户端。

<%
      String name=request.getParameter("name");
      String birthday=request.getParameter("birthday");
      String mail=request.getParameter("mail");
      Cookie myCook=new Cookie("mrCooklnfo",name+"#"+birthday+"#"+mail);
      myCook.setMaxAge(60*60*24*365);//设置cookie有效期
      response.addCookie(myCook);
%>
表单提交成功
<ul style="line-height:24px">
      <li>姓名:<%=name%></li>
      <li>出生日期:<%=birthday%></li>
      <li>邮箱:<%=mail%></li>
      <li><a href ="index.jsp">返回</a>
</ul>
第一次访问页面时用户表单中的信息是空的;当用户提交过一次表单之后,表单中的内容就会被记录到cookie对象中,再次访问时会从cookie中获取用户输入的表单信息并显示在表单中。
获取浏览器使用的语言

在一个支持国际化的站点中,一般都是根据浏览器设定的语言来显示对应内容,只需通过getLocale()方法就可以获取客户端浏览器的语言类型。

3.3response对象

response代表的是对客户端的响应,主要将JSP容器处理过的对象传回客户端。response对象也具有作用域,它只在JSP页面内有效。

response对象的常用方法
方法返回值说明
addHeader(String name,String value)void添加HTTP文件头,如果同名的头存在,则覆盖
setHeader(String name,String value)void设定指定名称的文件头的值,如果存在则覆盖
addCookie(Cookie cookie)
void
向客户端添加一个cookie对象
sendError(int sc,String msg)void向客户端发送错误信息,如404网页找不到
sendRedirect(String location)void发送请求到另一个指定位置
getOutputStream()ServletOutputStream获取客户端输出流对象
setBufferSize(int size)void设置缓冲区大小
重定向网页

重定向是通过使用sendRedirct()方法,将响应发送到另一个指定位置进行处理。

重定向可以将地址重新定向到不同的主机上,在客户端浏览器上将会得到跳转的地址,并重新发送请求链接。用户可以从浏览器的地址栏中看到跳转后的地址。

进行重定向操作后,request中的属性全部失效,并且进入一个新的request对象的作用域。

response.sendRedirect("www.baidu.com");将重定向到百度

注意:在JSP页面中使用该方法前面不要有HTML代码,并且在重定向操作之后紧跟一个return,因为重定向之后下面的代码已经没有意义啦,并且还可能产生错误。

处理HTTP文件头

setHeader()方法通过两个参数——头名称与参数值的方式类设置HTTP文件头。

response.setHeader("refresh","5");//设置网页每5秒自动刷新一次

response.setHeader("refresh","2;URL=welcome.jsp");//设置网页2秒后自动跳转至指定页面

refresh参数并不是HTTP1.1规范中的标准参数,但IE与Netscape浏览器都支持该参数。

response.setContentType("text/html");//设置响应类型

设置输出缓冲

通常情况下,,服务器要输出到客户端的内容不会直接写到客户端,而是先写到一个输出缓冲区。

只有以下3种情况下,才会把缓冲区的内容写到客户端:

  • JSP页面的输出信息已经全部写入缓冲区。
  • 缓冲区已满
  • 在JSP页面中调用了flushbuffer()方法或out对象的flush()方法。

使用response对象的setBufferSize()方法可以设置缓冲区的大小。

response.setBufferSize(2KB);//缓冲区大小为2KB

还可以使用isCommitted()方法来检测服务器是否已经把数据写入到了客户端。

3.4session对象

session对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生产一个session对象,用于保存该用户的信息,跟踪用户的操作状态。

session对象内部使用Map类来保存数据,因此保存数据的格式为key/value。

session对象的value可以是复杂的对象类型,而不仅仅局限于字符串类型。

session对象的常用方法
方法返回值说明
getAttribute(String name)Object获得指定名字的属性
getAttributeNames()Enumeration获得session中所以属性对象
getCreationTime()long获得session对象创建时间
getId()String获得session对象唯一编号
getLastAccessdTime()long获得session对象最后一次被操作的时间
getMaxInactiveInterval()int获得session对象有效时间
isNew()boolean获得session对象是否为新创建的
removeAttribute(String name)void获得session对象中指定名称的属性
invalidate()void获得session对象
setMaxInactiveInterval(int interval)void设置session对象的最大有效时间
setAttribute(String key,Object obj)void将obj以key名称保存在session中
创建及获取session信息

session是请求有关的会话对象,是java.servlet.http.HttpSession对象,用于保存和存储页面的请求信息。

session对象的setAttribute(String key,Object obj)方法可实现将信息保存在session范围内,而通过getAttribute(String name)方法可以获取保存在session范围内的信息。

setAttribute(String key,Object obj):key:保存在session范围内的关键字,obj:保存在session范围内的对象

getAttribute(String name) name:指定保存在session范围内的关键字

(1)在index.jsp页面中,实现将文字信息保存在session范围内

<span id="_xhe_cursor"></span><span id="_xhe_temp" width="0" height="0"></span><body>
      <%
           String sessionMessage="session test";
           session.setAttribute("message",sessionMessage);
           out.print("保存在session范围内的对象为:"+sessionMessage);
        % >
</body>
(2)在default.jsp页面中,获取保存在session范围内的信息并在页面中显示

<body>
      <%
           String message=(String)session.getAttribute("message);
           out.print("保存在session范围内的对象为:"+message);
        % >
</body>
session默认在服务器上的存储时间为30分钟,当客户端停止操作30分钟后,session中存储的信息会自动失效。此时调用getAttribute()等方法,将出现异常。
从会话中移除指定的绑定对象

对于存储在session会话中的对象,如果想将其从session会话中移除,可以使用session对象的removeAttribute()方法。

removeAttribute(String key);key:保存在session范围内的关键字

销毁session

当调用session对象的invalidate()方法后,表示session对象被删除,即不可以再使用session对象。

session.invalidate();

如果调用了session对象的invalidate()方法,之后再调用session对象的任何其他方法时,都将报出Session already invalidated异常。

会话超时管理

应用session对象时应注意session的生命周期。一般来说,session的生命周期在20-30分钟。

当用户首次访问时将产生一个新的会话,以后服务器就可以记住这个会话状态,当会话生命周期超时时,或者服务器端强制使会话失效时,这个session就不能使用了。

为了避免用户登录网站后在session失效时操作,在开发系统时应该对session的有效性进行判断。

session对象提供了设置会话生命周期的方法:

  •  getLastAccessedTime():返回客户端最后一次与会话相关联的请求时间。
  • getMaxInactiveInterval():以秒为单位返回一个会话内两个请求最大时间间隔。超过这个范围session将失效。
  • setMaxInactiveInterval():以秒为单位设置session的有效时间。

session对象的应用

在index.jsp页面中,提供了用户输入用户名文本框;在session.jsp页面中,将用户输入的用户名保存在session对象中,用户在该页面中可以添加最喜欢去的地方;在result.jsp页面中,将用户输入的用户名与最想去的地方在页面中显示。

(1)index.jsp

<form name="form1" id="form1" action="session.jsp" method="post">
    <div align="center">
         <table width="23%" border="0">
                <tr>
                      <td width="36%"><div align="center">您的名字是:</div></td>
                      <td width="64%">
                      <lable>
                      <div align="center">
                               <input type="text" name="name"/>
                      </div>
                      </lable>
                      </td>
                </tr>
                <tr>
                      <td colspan="2">
                      <lable>
                            <div align="center">
                                    <input type="submit" name="submit" value="提交"/>
                            </div>
                      </lable>
                      </td>
                 </tr>
            </table>
      </div>
</form>
(2)session.jsp

<%
     String name=request.getParameter("name");
     session.setAttribute("name",name);
     %>
     <div align="center">
           <form id="form1" name="form1" method="post" action="result.jsp">
                   <table width="28%" border="0">
                         <tr>
                                 <td>您的名字是:</td>
                                 <td><%=name%></td>
                         </tr>
                         <tr>
                                  <td>您喜欢去的地方是:</td>
                                  <td><lable>
                                              <input type="text" name="address"/>
                                   </lable></td>
                         </tr>
                          <tr>
                                   <td colspan="2"><lable>
                                         <div align="center">
                                                <input type="submit" value="提交" name="submit"/>
                                         </div></lable>
                                   </td>
                           </tr>
                   </table>
             </form>
       </div>
(3)result.jsp
<%
     String name=(String)session.getAttribute("name");
     String address=request.getParameter("address");
      %>
<form id="form1" name="form1" method="post" action="">
      <table width="28%" border="0">
            <tr>
                   <td colspan="2"><div align="center"><strong>显示</strong></div></td>
            </tr>
            <tr>
                   <td width="49%"><div align="left">您的名字是:</div></td>
                   <td width="51%><lable>
                          <div align="left"><%=name%></div>
                   </lable></td>
             </tr>
              <tr>
                    <td><lable>
                        <div align="left">您喜欢去的地方是:</div>
                    </lable></td>
                    <td><div align="left"><%=address%></div></td>
            </tr>
       </table>
</form>
3.5application对象
application对象可以将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象的生命周期更长,类似于系统的“全局变量”。

application对象的常用方法
方法返回值说明
getAttribute(String name)Object通过关键字返回保存在application对象中的信息
getAttributeNames()Enumeration获取所有application对象使用的属性名
setAttribute(String key,Object obj)void通过指定的名称将一个对象保存在application对象中
getMajorVersion()int获取服务器支持的Servlet版本号
getServerInfo()String返回JSP引擎的相关信息
removeAttribute(String name)void删除application对象中指定名称的属性
getRealPath()String返回虚拟路径的真实路径
getInitParameter(String name)String获取指定name的application对象属性的初始值
访问应用程序初始化参数

application提供了对应用程序环境属性访问的访问。application对象访问应用程序初始化参数的方法如下:

getInitParameter(String name):返回一个已命名的参数值

getAttributeNames():返回所有已定义的应用程序初始化名称的枚举

例:访问应用程序初始化参数

(1)在web.xml文件中通过配置<context-param>元素初始化参数

<context-param>              <!--定义连接数据库的URL--!>
          <param-name>url</param-name>
          <param-value>jdbc:mysql//locathost:3306/jrsoft</param-value>
</context-param>
<context-param>              <!--定义连接数据库的用户名--!>
          <param-name>name</param-name>
          <param-value>root/param-value>
</context-param>
<context-param>              <!--定义连接数据库的密码--!>
          <param-name>password</param-name>
          <param-value>123456</param-value>
</context-param>
(2)在index.jsp页面中,访问web.xml文件获取初始化参数

<%
     String url=application.getInitParameter("url");
     String name=application.getInitParameter("name");    
     String password=application.getInitParameter("password");<span id="_xhe_temp" width="0" height="0"></span>
     Out.print("URL :"+url+"<br>");
<span id="_xhe_temp" width="0" height="0"></span><pre name="code" class="java">     Out.print("name :"+name+"<br>");<span id="_xhe_temp" width="0" height="0"></span><pre name="code" class="java">     Out.print("password :"+password+"<br>");

 %> 

 
管理应用程序环境属性 

与session对象相同,可以在application对象中设置属性。

与session对象不同,session只是在当前客户的会话范围内有效,当超过保存时间,session对象就被收回。而application对象在整个应用区域中都有效。

application对象管理应用程序环境属性方法如下:

  • getAttributeNames():获得所有application对象使用的属性名
  • getAttribute(String name):从application对象中获取指定对象名
  • setAttribute(String key,Object obj):使用指定名称和指定对象在application对象中进行关联
  • removeAttribute(String name):从application对象中去掉指定名称的属性

3.6Out对象

out对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。使用out对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

管理响应缓冲

使用out输出数据时,需要使用clear()方法清除缓冲区内容,以便重新开始操作。也可通过clearBuffer()方法清除缓冲区的内容。

两者区别是:通过clear()方法清除缓冲区,如果相应内容已经提交,则会报出IOException异常;

                      而使用clearBuffer()方法,即使内容已经提交给客户端,也能够访问该方法。

out对象管理缓冲区的常用方法
方法返回值说明
clear()void清除缓冲区中尚存的内容
clearBuffer()void清除当前缓冲区中尚存的内容
flush()void刷新流
isAutoFlush()boolean检查当前缓冲区是自动清空,还是满了就抛出异常
getBufferSize()int获取缓冲区的大小
向客户端输出数据

out对象的另一个重要的功能就是向客户端写入数据。

out对象提供了以下两个像爷们中输出信息的方法:

  • print():在页面中打印字符串信息,不换行
  • println():在页面中打印字符串信息,并且换行

3.7其他内置对象

获取会话范围的pageContext对象

pageContext对象的作用是取得任何范围的参数,通过它可以获取JSP页面的out,request,response,session,application等对象。

pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用pageContext对象。

pageContext对象的常用方法
方法返回值说明
forward(String path)void将JSP页面重新定向至另一个页面
getAttribute(String name)Object获取参数值
getAttributeNamesInScope(int scope)Enumeration获取某范围的参数名称集合
getRequest()ServletRequest获取request对象
getResponse()ServletResponse获取response对象
getOut()JspWriter获取out对象
getSession()HttpSession获取session对象
getPage()Object获取page对象
setAttribute(String name,Object value)void设置指定参数属性

读取web.xml配置信息的config对象

config对象主要作用是取得服务器的配置信息。通过pageContext对象的getServletConfig()方法可以获取一个config对象。当一个Servlet初始化时,容器把某些信息通过config对象传递给这个Servlet。

config对象的常用方法
方法返回值说明
getInitParameter(String name)String获取服务器指定参数的初始值
getInitParameterNames()Enumeration获取服务器所有初始参数名称
getServletContext()ServletContext获取Servlet上下文
getServletName()String获取Servlet服务器名

应答或请求的page对象

page对象代表JSP本身,只有在JSP页面内才是合法的。page隐含对象本质上包含当前Servlet接口引用的变量,类似于java编程中的this指针。

page对象的常用方法
方法返回值说明
getClass()Object返回当前Object的类
hashCode()Object返回此Object的哈希代码
toString()String将此Object类转换成字符串对象
equals(Object obj)boolean比较此对象与指定对象是否相等

获取异常信息的exception对象

exception对象的作用是显示异常信息,只有在isErrorPage="true"的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。

exception对象和java所有对象一样,都具有系统的继承结构。exception对象几乎可以定义所有异常情况。在JSP页面中出现没有捕捉到的异常,就会生成exception对象,并把exception对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的exception对象。

exception对象的常用方法
方法说明
getMessage()返回exception对象的异常信息字符串
getLocalizedmessage()返回本地化的异常错误
toString()返回关于异常错误的简单信息描述
fillInStackTrace()重写异常错误的栈执行轨迹
例:获取异常信息的exception对象

(1)创建index.jsp页面,在该页面中编写代码,并通过errorPage属性指定有异常信息时系统将转发至error.jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="gbk" errorPage="error.jsp">
<%
     int apple =Integer.parseInt("ad");
     Out.print("苹果每斤+apple+"元");
%>
(2)error.jsp页面,用于接收传递过来的异常信息

<%@ page language="java" import="java.util.*" pageEncoding="gbk" isErrorPage="true"%>
<body>
           错误提示为:<%=exception.getMessage()%>
</body>
由于将字符串ad转换为int型变量会发生异常,因此系统会转发至error.jsp页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值