Servlet、Jsp

时间:2022-12-16 18:08:36

一、Servlet

1、什么是Servlet?

(1)由sun公司(被oracle公司收购)制定的一种用来扩展web服务器功能的组件规范。简单的讲就是一种用来开发动态Web的技术。
  扩展web服务器功能:web服务器通常只能用来处理静态资源的请求。而使用servlet可以用来处理动态资源的请求,比如访问数据库并向浏览器返回数据。
  组件规范:指的是符合一定规范,实现部分功能,并且需要部署到相应的容器里面才能运行的软件模块。

(2)servlet是一个组件,需要部署到相应的servlet容器中才能运行。
  容器:指的是符合一定规范,提供组件的运行环境的程序。
  比如 tomcat 就是一个容器,提供了servlet的运行环境。

2、基本概念

(1)Servlet 接收用户请求 HttpServletRequest,在doGet(),doPost(),service()中做相应的处理,并将回应HttpServletResponse反馈给用户。
(2)一个Servlet类只会有一个实例,在它初始化时调用init()方法,销毁时调用destroy()方法。
(3)Servlet 可以设置初始化参数,供Servlet内部使用,在web.xml中配置。
(4)一个Servlet可以设置多个URL访问。Servlet不是线程安全的。

3、生命周期

(1)实例化一个servlet对象。
  容器调用servlet构造器,创建相应的对象servlet,request,response。

(2)初始化servlet对象。
  Web容器加载Servlet并将其实例化后,Servlet生命周期开始,容器运行其init()方法进行Servlet的初始化。

(3)响应请求(就绪)。
  请求到达时调用Servlet的service()方法,service()方法会根据需要调用与请求对应的doGet或doPost等方法。

(4)销毁。
  当服务器关闭或项目被卸载时服务器会将Servlet实例销毁,此时会先调用Servlet的destroy()方法。
注:
  init方法和destroy方法只会执行一次,但service方法客户端每次请求 Servlet 时都会执行。Servlet 中有时会用到一些需要初始化与销毁的资源,因此可以把初始化资源的代码放入init方法中,销毁资源的代码放入destroy方法中,这样就不需要每次处理客户端的请求都要初始化与销毁资源。

4、相关类与接口

(1)Servlet接口

package javax.servlet;

import java.io.IOException;

public interface Servlet {
void init(ServletConfig var1) throws ServletException; ServletConfig getServletConfig(); void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException; String getServletInfo(); void destroy();
}

(2)GenericServlet抽象类
  实现了Servlet接口中的部分方法(比如:init, destroy)

(3)HttpServlet抽象类
  继承GenericServlet抽象类,实现了service方法。

5、请求方式(Get、Post)

(1)get请求。
  a、哪些情况下会发送get请求。
    直接在浏览器中输入某个地址。
    点击链接。
    表单默认提交方式。<form method="get">
  b、特点:
    get将表单中数据按照name=value的形式,添加到action 所指向的URL 后面,并且两者使用"?"连接,而各个变量之间使用"&"连接。其会将请求参数显示在浏览器的地址栏,不安全。
    get传输的数据要受到URL长度限制(最大长度是 2048 个字符),只能提交少量数据。

(2)post请求。
  a、哪些情况下发送post请求。
    设置表单提交方式。<form method="post">
  b、特点:
    post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL。其不会将请求参数显示在浏览器地址栏,相对安全。
    post可以传输大量的数据,上传文件通常要使用post方式。

6、重定向(Redirect,地址栏会改变)

(1)什么是重定向?
  重定向指的是服务器通知浏览器向一个新的地址发送请求。
注:
  可以发送一个302状态码和一个Location消息头,(该消息头包含一个地址,此地址称为重定向地址)浏览器收到之后,立即向重定位地址发送请求。

(2)如何重定向?
  response.sendRedirect(String url);
注:
  此处url为重定向地址,可以是任意的。
  重定向之前,容器会先清空response对象中保存的数据。

(3)重定向特点:
  a、重定向地址是任意的。
  b、重定向后,浏览器地址栏的地址会发生改变。

7、转发(Forward,地址栏不会改变)

(1)什么是转发?
  一个web组件将一个未完成的处理,转发给另外一个web组件继续做。
  常用情况:一个servlet将处理结果转交给另一个jsp来展现。(当然也可以直接在一个jsp文件中直接写相关处理代码,但不建议这么做)
注:
  web组件指的是一个jsp或者servlet(不规范定义)

(2)如何转发?

step1:绑定数据到request,内部采用HashMap保存数据。
request.setAttribute(String name, Object obj);
step2:获得转发器。
RequestDispatcher rd = request.getRequestDispatcher(String uri);
step3:转发。
rd.forward(request, response);
比如(转发到success.jsp页面):
request.getRequestDispatcher("success.jsp").forward(request, response); 获取数据:
Object request.getAttribute(String name);

(3)转发特点:
  a、转发之后,浏览器地址栏不变。
  b、转发的目的地必须是同一个应用。

8、转发与重定向的区别

(1)能够共享request?
  转发可以,重定向不行。
注:
  容器收到请求后,会创建request与response对象,当响应发送完毕,会销毁这两个对象。所以重定向(跳转到另一个页面)不行。

(2)浏览器地址栏有无变化?
  转发无变化,重定向有变化。

(3)目的地有无限制?
  转发有限制(只在同一个应用中转发),重定向无限制(可以跳转到任意连接)。

(4)从效率来说
  forward:高。
  redirect:低。

二、JSP

1、什么是JSP?

  JSP(Java Server Pages)是由sun公司制定的一种服务器端动态页面技术规范。
注:
  虽然servlet也可以生成动态页面,但是过于平凡调用(out.println),且不易维护(比如修改页面就得修改java代码),所以sun公司制定了JSP规范。
  jsp是一个以(.jsp)为后缀的文件,容器会将这个文件转换为一个对应的servlet并执行。

2、JSP与servlet的关系?

(1)Servlet是一个特殊的Java程序,它运行于服务器的JVM中,通过服务器的支持向浏览器提供显示内容。
(2)JSP本质上是Servlet的一种简易形式,JSP会被服务器处理成一个类似于Servlet的Java程序,可以简化页面内容的生成。
(3)Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
(4)JSP侧重于视图,Servlet更侧重于控制逻辑,在MVC架构模式中,JSP适合充当视图(view)而Servlet适合充当控制器(controller)。

3、JSP内置对象

(1)request:封装客户端的请求,其中包含来自GET或POST请求的参数;
(2)response:封装服务器对客户端的响应;
(3)pageContext:通过该对象可以获取其他对象;
(4)session:封装用户会话的对象;
(5)application:封装服务器运行环境的对象;
(6)out:输出服务器响应的输出流对象;
(7)config:Web应用的配置对象;
(8)page:JSP页面本身(相当于Java程序中的this);
(9)exception:封装页面抛出异常的对象。

参考:
  JSP九大内置对象,七大动作,三大指令 https://blog.csdn.net/qq_34337272/article/details/64310849

4、JSP动作

(1)jsp:include:
  在页面被请求的时候引入一个文件,可以包含静态和动态页面。(此处与include指令有区别,include只能用于包含静态页面)

【格式:】
<jsp:include page="文件路径"/>

(2)jsp:useBean:
  寻找或者实例化一个 JavaBean。

【格式:】
<jsp:useBean id="javaBean的名称" scope="有效范围" class="包名.类名"></jsp:useBean>

(3)jsp:setProperty:
  设置 JavaBean 的属性。

【格式:】
<jsp:setProparty name="javaBean名称" proparty="属性名" param="参数名" />

(4)jsp:getProperty:
  读取某个 JavaBean 的属性。

【格式:】
<jsp:getProparty name="bean的名称" proparty="属性名称"/>

(5)jsp:forward:
  把请求转到一个新的页面。

【格式:】
<jsp:forword page="文件路径"/>

(6)jsp:plugin(不常用):
  用来产生客户端浏览器的特别标签(object或embed),可以使用它来插入Applet或JavaBean。

【格式:】
<jsp:plugin type="applet" code="com.jspdev.ch3.MyApplet" codebass="." align="center" width="200" height="200"></jsp:plugin>

(7)jsp:param (不常用):
  用于设置参数,不能单独使用,主要用在jsp:include、jsp:forword、jsp:plugin指令中。

5、JSP指令

(1)什么是指令?
  通知容器在将jsp转为servlet时,做一些额外的处理,比如导包(import)。

(2)指令的格式:
  <%@指令名 属性=值 %>

(3)page指令:

【常用属性:】
import:等价于 Java 中 import 语句,用于导包,多个包用逗号隔开。
pageEncoding:指定当前页面的编码,如果pageEncoding没有指定,那么默认为contentType的值;如果pageEncoding和contentType都没有指定,那么默认值为iso-8859-1
contentType:等同与调用response.setContentType(“text/html;charset=xxx”); 如果没有指定contentType属性,那么默认为pageEncoding的值; 如果contentType和pageEncoding都没有指定,那么默认值为iso-8859-1
errorPage:如果当前页面出现异常,那么跳转到errorPage指定的jsp页面。
isErrorPage属性:false(默认,缺省),当isErrorPage为true时,表示这是一个异常处理界面,可以使用隐含对象exception。若为false,则不行。
session属性,true(默认,缺省),当session为false时,不能使用session隐含对象。
language:当前JSP编译后的语言!默认为java。 【举例:】
<%@ page language="java" import="java.util.*, java.text.*" pageEncoding="UTF-8"%>

(4)include指令:

【属性:】
file:告诉容器,在将jsp文件转换为servlet类时,将file属性指定的文件的内容插入到该指令所在的位置。 【格式:】
<%@ include file=”文件相对 url 地址” %>

(5)taglib指令:
  taglib指令是用来在当前jsp页面中导入第三方的标签库 (需要先把第三方标签库所需jar包放到类路径中)。

【属性:】
prefix:指定标签前缀,这个东西可以随意起名
uri:指定第三方标签库的uri(唯一标识) 【举例:】
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" % prefix="c" >

6、include指令include动作的区别

(1)include指令:
  JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件,与JSP同时编译执行。
  语法格式如下: <%@ include file="文件相对 url 地址" %>

(2)include动作:
  <jsp:include>动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。
  语法格式如下: <jsp:include page="相对 URL 地址"/>

7、Request对象相关方法(大概了解一下即可)

// 设置名字为var1的request 的参数值。
void setAttribute(String var1, Object var2); // 删除请求中的一个属性
void removeAttribute(String var1); // 返回 var1 指定的属性值
Object getAttribute(String var1); // 返回request 对象所有属性的名字集合,结果是一个枚举的实例。
Enumeration<String> getAttributeNames(); // 返回客户端的所有 Cookie 对象,结果是一个Cookie 数组
Cookie[] getCookies(); // 返回请求中的字符编码方式
String getCharacterEncoding(); // 获得HTTP协议定义的文件头信息
String getHeader(String var1); // 返回指定名字的request Header 的所有值,结果是一个枚举的实例
Enumeration<String> getHeaders(String var1); // 返回所有 request Header 的名字,结果是一个枚举的实例
Enumeration<String> getHeaderNames(); // 返回请求的输入流,用于获得请求中的数据
ServletInputStream getInputStream() throws IOException; // 获得客户端向服务器端传送数据的方法
String getMethod(); // 获得客户端传送给服务器端的有 name指定的参数值
String getParameter(String var1); // 获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
Enumeration<String> getParameterNames(); // 获得有name指定的参数的所有值
String[] getParameterValues(String var1); // 获取客户端向服务器端传送数据所依据的协议名称
String getProtocol(); // 获取发出请求字符串的客户端地址
String getRequestURI(); // 获取客户端的 IP 地址
String getRemoteAddr(); // 获取客户端的名字
String getRemoteHost(); // 返回和请求相关 Session
HttpSession getSession(); // 获取服务器的名字
String getServerName(); // 获取客户端所请求的脚本文件的路径
String getServletPath(); // 获取服务器的端口号
int getServerPort();

8、request.getAttribute()和 request.getParameter()的区别

(1)值的获取:
  request.getAttribute() 用于获取对象容器的数据值。
  request.getParameter() 用于获取 Get、Post请求所传递的参数值。

(2)取得值得类型:
  request.getAttribute() 返回的是Object,需进行转换。可用setAttribute()设置成任意对象,使用很灵活。
  request.getParameter() 返回的是String,用于读取提交的表单中的值。(获取之后会根据实际需要转换为自己需要的相应类型,比如整型,日期类型啊等等)

9、JSP作用域

(1)page:
  page代表与一个页面相关的对象和属性。

(2)request:
  request代表与Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个Web组件;需要在页面显示的临时数据可以置于此作用域。

(3)session:
  session代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中。

(4)application:
  application代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域。

10、JSP基本规则

(1)以 (.jsp) 为后缀的文件。

(2)若是html(css、js)等代码,直接写即可。
  其最后被转换成out.println()输出。
注:
  out.println()与out.write()的区别:
    对于null值,out.println会直接输出null;
    对于null值,out.write会将其转为空字符串输出。

(3)若是java代码。格式: <% java语句 %>
  其最后被转换为去掉<%%>后的代码。

(4)若是jsp表达式。格式:<%=java表达式 %>
  其最后被转换为out.println(java表达式).
例如:<%=new Date()%>, 相当于 out.printn(new Date());

(5)若是jsp声明。格式:<%!java语句(声明一个变量或一个方法)%>
  其最后被转换为去掉<%!%>后的代码。
例如:
  <%!
    int i = 100;
    int sum(int a, int b){
      return a+b;
    }
  %>
相当于声明了一个属性(成员变量)以及一个方法。

(6)jsp注释。
  <!--注释内容-->,如果注释内容为java代码,那么java代码会被执行。即浏览器代码(服务器返回的代码)中会有执行java代码后的数据,但浏览器不会显示。
  <%--注释内容--%>,如果注释内容为java代码,那么java代码不会被执行。

三、JSTL

1、JSTL是什么?

  JavaServer Pages Standard Tag Library,指的是jsp标准标签库。
  apache开发的一套jsp标签,后来捐献给sun公司,sun公司将其命名为jstl。

2、如何使用jstl?

step1:将jstl相关的jar文件拷贝到WEB-INT\lib目录下。并Build Path。
step2:使用taglib指令导入相应的标签。
  <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
其中:
  uri:是一个命名空间。
  prefix是命名空间的前缀(或者为别名)。

3、if标签

【格式:】
<c:if test="" var="" scope=""></c:if> 相当于if(){}
其中
c指的是命名空间(namespace,为了区分同名元素而设置的一个字符串)。
当test属性(必须)值为true时,容器会执行标签体里的内容。且test属性可以由el表达式来计算。
var属性:指定一个绑定的名称。
scope属性:指定绑定的范围,值可以是page,request,session,application。

4、choose标签

【格式:】
<c:choose>
<c:when test="">
</c:when>
<c:when test="">
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
when可以出现一次或多次,表示一个分支,相当于else if,当test为true时,执行该分支。
otherwise可以出现0次会1次(最多),表示最后一个else。
相当于:
if(){ }else if(){ }else if(){ }else{ }

其余标签以后再补充。。。

四、状态管理(cookie与session)

1、什么是状态管理

  将浏览器与Web服务器间的多次交互作为一个整体来处理,并且将多次交互所涉及的数据(即状态)保存下来,即为状态管理。

2、cookie

(1)什么是cookie?
  服务器临时保存在浏览器端的少量数据。一般用来保存用户信息。

(2)工作原理?
  当浏览器访问服务器时,服务器可以将少量数据以set-cookie消息头的方式发送给浏览器,浏览器会将这些数据临时保存下来。
  当浏览器再次访问服务器时,浏览器会将之前保存的这些数据以cookie消息头的方式发送给服务器。

(3)添加cookie(服务器对浏览器的响应操作,发送set-cookie)

【服务器向客户端发送Cookie:】
Cookie c =new Cookie("name","value"); //创建Cookie
c.setMaxAge(60*60*24); //设置最大时效,此处设置的最大时效为一天
response.addCookie(c); //把Cookie放入到HTTP响应中 setMaxAge(int seconds)
缺省此方法时,浏览器会把cookie保存在内存里。只要浏览器不关闭,cookie就一直存在。浏览器关闭后,cookie会被销毁。
注:
seconds单位是秒,
seconds > 0, 浏览器会将cookie保存在硬盘上。若超过指定时间,则cookie被删除。
seconds < 0,缺省值,cookie放在内存中。
seconds = 0,删除cookie。
比如:删除一个名称为“cart”的cookie.
Cookie c = new Cookie("cart", "");
c.setMaxAge(0);
response.addCookie(c);
若想对cookie修改,则发送一个同名的cookie即可。

(4)获取cookie

【服务器从客户端读取Cookie:】
String name ="name";
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(int i = 0;i< cookies.length;i++){
Cookie cookie = cookies[i];
cookie.getValue();
}
}

3、session(会话)

(1)什么是session?
  服务器端为维护状态而创建的一个特殊的对象。

(2)工作原理
  浏览器访问服务器时,服务器会创建一个session对象,该session对象有一个唯一的id(称为sessionId)。服务器会将sessionId以set-cookie的方式发送给浏览器。
  浏览器再次访问服务器时,浏览器会将sessionId以cookie的方式发送给服务器,服务器再依据sessionId找到对应的session对象。
注:
  Http协议是一种无状态协议,服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session。

(3)如何获得session对象?
 方式一:
  HttpSession s = request.getSession(true/false);
   true:
    先查看请求当中有没有sessionId,如果没有sessionId,则创建一个session对象。
    如果有sessionId,则依据该sessionId查找相应的对象,如果找到了,则返回这个session对象,如果没有找到(超时),则创建一个新的session对象。
   false:
    先查看请求当中有没有sessionId,如果没有sessionId,则返回null。
    如果有sessionId,则依据该sessionId查找相应的对象,如果找到了,则返回这个session对象,如果没有找到(超时),则返回null。
 方式二:

   HttpSession s = request.getSession();
  等价于:
   HttpSession s = request.getSession(true);

(4)session超时。
  a)、什么是session超时?
    服务器会将空闲时间过长的session对象删除。
  b)、缺省的超时时间。
    服务器缺省的时间限制一般为30分钟。
    可在tomcat(容器)文件夹中的conf文件夹,找到web.xml并设置,单位为分钟(不建议修改)。

Servlet、Jsp

  c)、setMaxInActiveInterval(int seconds) //设置超时时间。

(5)session验证:
  登录成功后,将一会数据绑定到session对象上。
比如:
  session.setAttribute("user", user);
  对于需要保护的资源,(比如success.jsp),添加session验证代码。

【比如:】
Object obj = session.getAttribute("user");
if(obj == null){
response.sendRedirect("login.jsp");
}

(6)session小结:
  a)、相对于cookie,session的优点是安全的,可以保存大量数据,可以保存的数据类型更丰富。
  b)、cookie是将状态(数据)保存在浏览器端,而session保存在服务器端,如果访问量大,使用session机制会占用大量的内存空间。

Servlet、Jsp的更多相关文章

  1. JBoss和Tomcat版本、及Servlet、JSP规范版本对应一览 【转】

    原文地址:http://blog.csdn.net/hills/article/details/40896357 JBoss和Tomcat版本.及Servlet.JSP规范版本对应一览 JBossAS ...

  2. java web中servlet、jsp、html 互相访问的路径问题

    java web中servlet.jsp.html 互相访问的路径问题 在java web种经常出现 404找不到网页的错误,究其原因,一般是访问的路径不对. java web中的路径使用按我的分法可 ...

  3. Servlet、JSP中页面跳转的方式

    一.Servlet:当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面.1)  redirect 方式response.sendRedirect("success ...

  4. Servlet、JSP选择题&lpar;2&rpar;

    Java EE软件工程师认证考试 试题库-选择题 一.    选择题(包括单选和双选) 1.B 编写一个Filter,需要(  ) A. 继承Filter 类 B. 实现Filter 接口 C. 继承 ...

  5. Java Web开发之Servlet、JSP基础

    有好多年不搞Java Web开发了,这几天正好国庆放假,放松之余也有兴趣回头看看Java Web开发技术的基础. 我们都知道,Servlet是Java Web开发的重要基础,但是由于Servlet开发 ...

  6. 基于Servlet、JSP、JDBC、MySQL的一个简单的用户注冊模块&lpar;附完整源代码&rpar;

    近期看老罗视频,做了一个简单的用户注冊系统.用户通过网页(JSP)输入用户名.真名和password,Servlet接收后通过JDBC将信息保存到MySQL中.尽管是个简单的不能再简单的东西,但麻雀虽 ...

  7. 如何查看Servlet、JSP的版本(Tomcat V7&period;0&period;70)

    1. 简要说明:Tomcat6.0 所支持的是Servlet2.5,Tomcat 7.0 所支持的Servlet3.0,Servlet2.5 和Servlet3.0的差异较大,对于Servlet3.0 ...

  8. Servlet、JSP选择题

    Java EE软件工程师认证考试 试题库-选择题   一.    选择题(包括单选和双选) 1.A 对于B/S架构的工作流程,以下说法正确的是(   )(选择一项) A. 浏览器接受用户的输入--&g ...

  9. 基于Servlet、JSP、JDBC、MySQL登录模块&lpar;包括使用的过滤器和配置&rpar;

    遇见前文的注冊模块,本篇是登录模块.主要包含登录主界面,和登录相关编写的LoginAction.LoginDao和LoginService.以及配置的Filter.以下按逻辑顺序记录具体过程和代码: ...

随机推荐

  1. Hawk 4&period;3 转换器

    转换器是最为常用的一种类型,当然它的使用也是最复杂的. 转换器有三种子类型: A:单文档->单文档:例如仅将某一列的字符提取出来 B:单文档->多文档:典型的如从爬虫转换,每一行url都可 ...

  2. 前端页面使用 Json对象与Json字符串之间的互相转换

    前言 在前端页面很多时候都会用到Json这种格式的数据,最近没有前端,后端的我也要什么都要搞,对于Json对象与Json字符串之间的转换终于摸清楚了几种方式,归纳如下! 一:Json对象转换为json ...

  3. 如何编译ReactNative示例程序Examples

    通过示例程序可以看到一些基本组件的使用,对于学习ReactNative是很有帮助的. 编译示例程序需要将整个项目导入到androidStudio中,androidStudio导入项目时选择react- ...

  4. 五、Android学习第四天补充——Android的常用控件(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 五.Android学习第四天补充——Android的常用控件 熟悉常用的A ...

  5. Congruence relation 同余关系

    https://en.wikipedia.org/wiki/Congruence_relation https://zh.wikipedia.org/wiki/%E5%90%8C%E9%A4%98%E ...

  6. Program B--CodeForces 492B

    Description Vanya walks late at night along a straight street of length l, lit by n *s. Consid ...

  7. 在 Transact-SQL 中使用 TRY&period;&period;&period;CATCH

    在 Transact-SQL 中使用 TRY...CATCH (注:本文来自于 http://msdn.microsoft.com/zh-cn/library/ms179296.aspx)       ...

  8. &lbrack;转&rsqb;Jquery中AJAX错误信息调试参考

    下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求 ...

  9. CircleImageView自定义圆形控件的使用

    1.自定义圆形控件github地址: https://github.com/hdodenhof/CircleImageView 主要的类: package de.hdodenhof.circleima ...

  10. Java基础笔记-String类2

    StringBuffer 特点: 是字符串缓冲区. 是一个容器,其长度可变,可以操作添加多个数据类型. 最后通过toString方法变成字符串. 被final锁修饰,因此不能被继承. 存储: 方法1: ...