JSP学习笔记

时间:2016-11-17 13:46

——JSP入门


1、什么是JSP
    JSP(Java Server Pages)是JavaWeb服务器端的动态资源,它与HTML页面的作用是相同的,用来显示数据和获取数据。

    JSP是:
        1)JSP运行在服务器端。
        2)JSP的全称是Java Server Pages
        3)JSP的基础是Servlet(相当于对Servlet进行包装,JSP翻译之后,会生成一个Servlet文件)
        4)JSP是综合技术
            JSP = html + css + java + jsp标签(语法)+ javascript
        5)JSP文件被修改时,不需要重启服务器。
        6)JSP如何访问:http://ip地址:8080/web应用名/jsp文件
        7)JSP是一种动态网页技术。

2、为什么需要JSP
    程序员在开发过程中,发现Servlet做界面非常不方便。
    JSP+Java类(service、JavaBeans)+Servlet,就会构成MVC的开发模式。
    MVC模式是目前软件公司中通用的开发模式。

3、JSP的作用
    Servlet:
        缺点:不适合设置HTML响应体,需要大量的print来输出页面标签。
        优点:动态资源,可以编程。

    HTML:
        缺点:HTML是静态页面,不能包含动态信息。
        优点:不用为输出HTML标签而发愁。

    JSP:
        优点:在原有HTML的基础上添加Java脚本,构成JSP页面。

4、JSP和Servlet的分工
    JSP:
        作为请求发起页面:例如显示表格、超链接。
        作为请求结束页面:例如显示数据。
    Servlet:
        作为请求中处理数据的环节。

5、JSP的组成
    JSP = HTML + Java脚本 + JSP标签(指令)
    JSP中无需创建即可使用的对象一共有9个,被称为9大内置对象,例如request对象、out对象。
    3种Java脚本:
        *   <% ... %>:Java代码片段(常用),用于定义0 ~ N条Java语句。
            (方法内可以写什么,这里就可以写什么)
            语句;

        *   <%= ...%>:Java表达式,用于输出一条表达式(或变量)的值。
            (response.getWriter().println(这里可以放什么,他就可以放什么))
            表达式

            *   <%! ... %>:声明,用来创建类的成员变量和成员方法(一般不用,但容易被考到)
            (类中可以放什么,它就可以放什么)
            声明

    案例:
        演示JSP中Java脚本的使用。
            1)获取表单数据
            2)把字符串转换成int类型
            3)进行加法运算得到结果
            4)将结果保存到request域中
            5)转发到result.jsp中

        演示JSP与Servlet的分工。

6、JSP原理(理解)
    1)JSP其实是一种特殊的Servlet
        *   继承了org.apache.jasper.runtime.HttpJspBase(HttpJspBase间接实现了Servlet接口)
        *   当JSP页面第一次被访问时,服务器会把JSP翻译成Java文件(这个Java文件其实是一个Servlet类)
        *   然后再把java文件编译成.class
        *   然后创建该类对象
        *   最后调用它的service()方法
        *   第二次请求同一JSP时,直接调用service()方法,不再初始化对象。
    2)在Tomcat的work目录下可以找到JSP对应的.java源文件。
    3)查看JSP对应.java文件:
        *   java脚本
        *   html

7、JSP注释
    <%--  --%>:当服务器把JSP编译成java文件时就已经忽略了注释部分,也就是.java文件中就不会保存注释部分了。
    <!-- <%=num %>-->:该表达式会执行,并且获取num的值,但是会被HTML注释掉,不会显示在页面中。

——JSP原理细节分析

1、Web服务器如何调用并执行一个JSP页面?
    见JSP运行机制。

2、JSP页面中的HTML标签如何被发送到客户端?
    使用out.write("  ");写入客户端页面,因为JSP翻译之后是一个Servlet文件,而out又是Servlet的内置对象,所以可以直接使用。
    out.write()和out.print()方法完全相同,输出字符串用write,输出变量用print。

3、JSP页面中的Java代码服务器是如何执行的?
    先将JSP文件转换成一个Servlet文件,然后编译为class文件,再执行。
    在<%  %>中定义的变量,会转换为service方法的局部变量。
    在<%!  %>中定义的变量或者方法,会转换为Servlet的成员属性或者成员方法。

4、Web服务器在调用JSP时,会给JSP提供一些什么Java对象。
    九个内置对象。
    application、pageContext、request、session、page、response、exception、out、config。


——JSP运行机制

1、JSP运行机制

        图片

    如果是第一次访问该JSP文件,Web服务器就会将该文件转换成一个Servlet文件(xxx_jsp.java,这个文件本身就是一个Servlet文件),然后再将其编译成(.class文件),然后将class文件加载到内存中,成为一个单例对象。
    如果是第二次访问该JSP文件,则不再进行编译等操作,直接访问内存中的单例对象。

    如何判断是否已经访问过该JSP文件?
        Web服务器有一套管理机制,会判断JSP文件是否已经被访问过(是否存在对象)。
        因此,JSP也是单例的,换而言之,因为Servlet是单例的,所以JSP也是单例的。
        如果某个JSP文件被修改了,再次访问该JSP就相当于第一次访问该文件。

        图片

    查看JSP生成的Servlet:
        tomcat根目录/work/Catalina/localhost

2、JSP基本组成
    模板数据
        模板数据是JSP容器不处理的部分,例如JSP页面中的HTML内容。
    元素
        概念:
            元素是必须由JSP容器处理的部分,例如Java代码。
        1)指令
        2)脚本
        3)动作
        4)注释

——JSP指令元素

    指令元素主要用于为转换阶段提供整个JSP页面的相关信息,该指令不产生任何的输出信息到当前的输出流中。
    一般都会把JSP指令放到JSP文件最上方,但这不是必须的。
    指令元素用于从JSP发送一个信息到容器,比如设置全局变量,文字编码,引入包等。


    在一个JSP页面中,可以有0~N个指令。

1、page
    页面属性指令,对整个页面进行配置。
    page指令是最为常用的指令,也是属性最多的指令。
    page指令没有必须的属性,都是可选属性,例如:<%@page %>,没有属性也可以。
    在JSP页面中,任何指令都可以重复出现。

    1)格式:
        <%@ page attr1="value1" attr2="value2" ...%>,一般都会把JSP指令放在JSP文件的最上方,但这不是必须的。

    2)注意:
        page指令以<%@开始,以%>结束。
        <%@不要有空格,%>也不要有空格。
        各属性名值对之间用空格隔开。
        因为page指令是对整个页面进行设置,所以通常将page指令放在JSP页面的开头位置。

    3)page指令示例:
        <%@ page pageEncoding="UTF-8" %>

    4)page指令中常用属性有:
        language="xxx":JSP中嵌入的代码通常是Java。

        import="包.* ":在该JSP页面中引入包或者某个具体的类。

        errorPage="相对JSP页面的路径":当JSP页面出现错误时,自动跳转到指定的JSP页面,要求使用相对路径,当使用"/"作为开始路径时,表示当前Web应用的根目录,如果不以"/"开头,则表示相对于本JSP页面的路径。

        isErrorPage=[false | true]:指定该JSP页面是否专门用作error页面,如果设为true,则可以在该页面直接使用Exception内置对象。

        contentType="text/html;charset=utf-8":相当于添加一个响应头:Content-Type,指定网页以什么方式显示页面,写了此属性之后,就不需要设置:response.setContentType("text/html;charset=utf-8");

        pageEncoding="utf-8":指定当前JSP页面的编码,指定服务器以什么编码将JSP编译成.java文件。

    5) 以下属性默认为true:
        session=[true | false]:默认true,是否在JSP页面获取session对象。
            这个session就是Servlet中的HttpSession。
            当设置为false时,无法在JSP中使用session对象。
        buffer=[none | 8k | 指定大小]:设置out对象使用的缓冲区,默认8K。
        autoFlush=[true | false]:当buffer满后,是否自动刷新到浏览器。
        isThreadSafe=[true | false]:默认true,表示该JSP的线程安全由程序员控制,false则对应的Servlet实现线程安全接口。

    6)page指令的pageEncoding和contentType
        ①pageEncoding指定当前JSP页面的编码,这个编码是给服务器看的,服务器需要知道当前JSP使用的编码,不然服务器无法正确的将JSP翻译成java文件,所以这个编码只需要与真实的页面编码一致即可。

            在MyEclipse中,在JSP文件上点击右键,选择属性就可以看到当前JSP页面的编码了。

            如果两个属性只提供一个,那么另一个默认值为已设置的那一个。
            如果两个属性都没有设置,那么默认为ISO-8859-1。
            如果JSP页面中存在中文,则一定要设置该属性。

        ②contentType属性与response.setContentType()方法的作用相同,它会完成两项工作,一是设置响应字符流的编码,二是设置content-type响应头,例如:
            <%@page contentType="text/html;charset=utf-8"%>

    7)page指令的import属性
        import指令可以出现多次,只有它可以出现多次。
        import属性值对应的是Java文件中的import语句。
        import属性值可以使用逗号:
        <%@page import="java.util.*,java.net."%>

    8)page指令的errorPage和isErrorPage
        在一个JSP页面出错之后,Tomcat会响应给用户错误信息(500页面)。
        如果不希望Tomcat给用户输出错误信息,那么可以使用page指令的errorPage来指定错误页面,也就是自定义错误页面,例如:
            <%@page errorPage="xxx.jsp"%>
        这时,在当前JSP页面出现错误时,会将请求转发到xx.jsp页面,此时响应码为200。

        isErrorPage为指定当前页面是否为处理错误的页面,属性分为true和false,当设置为true时,响应码为500。
        仅仅当isErrorPage设置为true时,JSP文件才可以使用内置对象中的exception对象。
        将异常信息输出到页面:
            exception.printStackTrace(reqponse.getWriter());

        哪个内置对象不可以随意使用:exception和session

        提示:IE会在响应码为500时,并且响应正文的长度小于等于512B时不给予显示,而是现实“网站无法显示该页面”字样,这时只需要添加一些相应内容即可。

    9)在web.xml文件中配置错误页面
        不止可以通过JSP的page指令来配置错误页面,还可以在web.xml文件中指定错误页面,这种方式与page指令无关。
        <error-page>
            <error-code>404</error-code>
            <location>/error404.jsp</error-page>
        </error-page>
        <error-page>
            <error-code>500</error-code>
            <location>/error500.jsp</location>
        </error-page>
        <error-page>
            <exception-type>java.long.RuntimeException</exception-type>
            <location>/error.jsp</location>
        </error-page>
        如果没有配置这个<error-page>,在抛出RuntimeException时会转发到error500.jsp页面,即响应码为500。

        优先级:内容越细致,匹配度越小的优先级越高。

        <error-page>有两种使用方式:
            *   <error-code>和<location>子元素
            *   <exception-type>和<location>子元素
            其中<error-code>是指定响应码,<location>指定转发的页面,<exception-type>是指定抛出的异常。

        在上述配置标签中:
            *   当出现404时,会跳转到error404.jsp页面
            *   当出现RuntimeException异常时,会跳转到error.jsp页面
            *   当出现非RuntimeException异常时,会跳转到error500.jsp页面
                这种方式会在控制台看到异常信息,而使用page指令时不会在控制台打印异常信息。

    10)page指令的autoFlush和buffer
        buffer表示当前JSP的输出流(out隐藏对象)的缓冲区大小,默认为8kb。

        autoFlush表示在out对象的缓冲区满时如何处理。
        true(默认)表示缓冲区满时把缓冲区自动数据刷新到客户端。
        false表示当缓冲区满时,抛出异常。
        默认值为true。

    11)page指令的isELIgnored
        该指令的属性表示当前JSP页面是否忽略EL表达式,默认值为false,表示不忽略(即支持EL表达式)。
        老版本默认true。

    12)page指令的其他属性
        *   language:只能是Java,这个属性可以看出JSP最初设计时的野心,希望JSP可以转换成其他语言,但是到现在JSP只能转换为Java代码。
        *   info:JSP说明性信息。
        *   isThreadSafe:当前的JSP是否支持并发访问。
            默认为false,为true时,JSP生成的Servlet会实现一个过时的标记接口SingleThreadModel,这时JSP就只能处理单线程的访问。
        *   session:默认为true,表示当前JSP页面可以使用session对象,如果为false表示当前JSP页面不能使用session对象。
        *   extends:指定当前JSP页面生成的Servlet父类。



2、include(静态导入)
    该指令用于引入一个文件(通常是JSP文件),JSP引擎会把两个JSP文件翻译成一个Servlet文件,然后编译成一个class文件,因此也称为静态引入。
    与RequestDispatcher的include()方法功能相似,包含与被包含是两个Servlet,即两个class文件,它们只是在运行时合并了。
    被引入的JSP文件,只需要保留page指令即可,<html><body>标签不要写。

    include指令在哪一行引入,就将被引入的代码写在哪一行。

    <%@include %>该指令是在JSP编译成java文件的时候完成的。

    格式:
        <%@ include file="文件名"%>

    应用:
        为了保证网站的整体风格,常将文件头部和尾部做成单独的文件,网站其他页面使用包含指令进行包含。

    <%@ include file=" " %>:静态引入
    <jsp:include file=" "></jsp:include>:动态引入
    相同点:
        把一个文件引入到另外一个文件中。
    不同点:
        静态引入:>%@include%>(合并)
            运行前就引入。
            把两个JSP翻译成一个Servlet,所以被引入的文件不要包含<html><body>等标签。
            静态包含时需要注意变量的使用,因为在运行前就引入,所以变量等数据会被当做一个字符串来处理。
        动态引入:<jsp:include>(调用)
            运行时才引入。
            把两个JSP文件分别翻译,生成两个文件,所以被引入的JSP文件包含有<html><body>也不会报错。

    <%@include%>才是真正的合并文件,而<jsp:include>仅仅是调用,把输出结果合并。
        调用:org.apache.jasper.runtime.JspRuntimeLibrary.include(request,response,"xx.jsp",out,false); 

3、taglib(导入标签库)
    该指令允许在JSP页面中使用自定义的标签。
    <myTag:xx  属性  >
    <myTag:youTag num1="123">

    两个属性:
        prefix:指定标签库在本页面中的前缀,由程序员自己定义,表示当前页面所有库中的标签必须使用该前缀名称,用于区分不同标签库。
        uri:指定标签库的位置。

    格式:
        <%@taglib prefix="c" uri="xxxxx.xxx.com"%>

    使用:
        <c:xxx>


——JSP脚本元素

    脚本元素可以理解为就是Java代码片段。
    脚本段(scriplet):<% Java代码%>
    表达式:<%= 表达式%>
        注意区分表达式和语句:
            <%= 12*5%>:是表达式
            <%= 12*5;%>:是语句,单独存在会报错。
    声明(declaration):<%! 声明Java代码%>
        <%! 变量声明%>
        <%! 方法声明%> 
    当有!的时候会将代码放到类中、service方法外,也就是该Servlet中,而不加!的时候,变量会默认放在service方法中(方法不会放到service中),也就是说,方法声明必须加 ! 。
 
——JSP页面注释

    JSP页面模块注释:<%-- --%>
    HTML注释:<!-- -->
    区别:
        <!-- -->会在Servlet中对应生成out.write("<!-- -->");这样在返回给浏览器的静态页面中也会生成<!-- -->,只是用户看不到而已。
        <%-- --%>在Servlet中没有任何输出,建议使用<%-- --%>

——JSP基础动作标签

    动作标签的作用是用来简化Java脚本的。
    JSP动作标签是JavaWeb内置的动作标签,它们是已经定义好的动作标签,可以直接拿来使用。
    如果JSP动作标签不够用,可以自定义标签,JavaWeb一共提供了20个JSP动作标签。
    JSP动作标签格式:
        <jsp:标签名 ... >

    动作标签是由服务器来解释执行的,它与Java代码一样,都是在服务器端执行的。
    HTML标签由浏览器来执行

1、<jsp:include>:
    在页面得到请求时动态包含一个文件。

    <jsp:include>标签和<@include>指令是不同的:
        include指令是在编译时期完成的,即把当前JSP和被包含的JSP合并成一个JSP文件,然后再编译成一个Servlet。
        include动作标签是在运行时期完成的包含,即当前JSP和被包含的JSP都会各自生成一个Servlet,然后在执行当前JSP的Servlet时完成包含另一个JSP的Servlet,它与RequestDispatcher的include()方法是相同的。

        include指令才是真正的合并。
        include动作标签相当于调用。

    <jsp:include page="文件路径" flush="true | false"> </jsp:include>
    例如:
        <jsp:include page="文件路径" flush="true | false">
            <jsp:param name="参数名1" value="参数1的值"/>
            <jsp:param name="参数名2" value="参数2的值"/>
        </jsp:include>

    当a.jsp动态包含b.jsp时,编译后的a.java文件中会有如下代码:
图片

2、<jsp:forward>:
    它与RequestDispatcher的forward方法一样,留头不留体。 
    forward动作元素用来实现网页跳转,即当前页面跳转到其他指定页面。
    跳转的目标页面可以是静态的HTML页面、JSP页面或者Servlet类。
        <jsp:forward page="文件路径" flush="true | false"></jsp:forward>
    例如:
         <jsp:forward page="文件路径" flush="true | false" >
            <jsp:param name="参数名1" value="参数1的值"/>
            <jsp:param name="参数名1" value="参数1的值"/>
        </jsp:forward>
    不能将JSP页面直接放置在WebRoot目录下,否则可以根据地址栏中的JSP地址直接获取到该JSP文件。 
        <a href="http://IP地址:8080/地址">获取JSP文件</a>
    为了避免通过浏览器访问到源文件,可以将JSP文件放置到WEB-INF下,Tomcat有一个默认的保护机制:
        不能通过浏览器访问WEB-INF。
    通常情况下会在WEB-INF外放置一个充当入口的JSP文件,内部代码为:<jsp:forward page="/WEB-INF/xxx.jsp"></jsp:forward>
    当通过该指令进入WEB-INF之后,就可以任意访问WEB-INF目录下的所有文件了。 

3、<jsp:param>:设置传送参数,通常与<jsp:include>结合使用。
    param动作元素必须配合include动作元素、forward动作元素和plugin等元素,在加载外部程序或是网页跳转的时候,传递参数给另外一个JSP程序。

    用来给转发或包含的页面传递参数。
    通过request.getParameter(name);方法来获取参数。

    <jsp:forward page="b.jsp">
        <jsp:param value="value1" name="name1" />
        <jsp:param value="value2" name="name2" />
    </jsp:forward>
    当页面转发到b.jsp之后,就可以使用request.getParameter(name);来获取参数了。

4、<jsp:useBean>:创建一个JavaBean实例,使用JavaBean组件。
    useBean动作元素用来在JSP中创建并使用一个JavaBean。
    实际工作中常用JavaBean作组件开发,而在JSP中只需要声明并使用这个组件,这样可以较大限度的实现静态内容和动态内容的分离。
        <jsp:useBean id="bean的名称" scope="有效范围" class="包名.类名"></useBean>

5、<jsp:setProperty>:设置JavaBean的初始值。
    setProperty动作元素设置Bean中的属性值。
    <jsp:setProperty name="bean的名称" property="*" />
    <jsp:setProperty name="bean的名称" property="属性名称" />
    <jsp:setProperty name="bean的名称" property="属性名称" param="参数名称" />
    <jsp:setProperty name="bean的名称" property="属性名称" value="属性值" />

6、<jsp:getProperty>:获取JavaBean的属性值。
    getProperty动作元素用于获取Bean中的属性值并将其转换为字符串,用于在页面中显示。
    <jsp:getProperty name="bean的名称" property="属性名称" />

7、<jsp:plugin>:使用插件

8、<jsp:fallback>

——JSP内置对象

out(JspWriter)

    out对象是JSPWriter类的实例,是向客户端输出内容时常用的对象。
    等同于response.getWriter()
    out向客户端输出字节流数据。
    方法摘要:
        out.println(" "); 

page(this)

    page对象就是当前JSP页面本身(JSP本身就是个类),它是Object类的实例:Object page = this;

application(ServletContext)

    Servlet类的对象。

    application对象实现了用户间数据的共享,可存放全局变量,它的作用域最大,开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在,这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作,在任何地方对此对象属性进行操作,对将影响到其他用户对此对象的访问(static),服务器的启动和关闭决定了application对象的生命,它是ServletContext的实例。

exception(Throwable)

    只有在错误页面中可以使用该对象。 
    对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生该对象,如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译,它实际上是Throwable的对象。

pageContext(PageContext,只在JSP中有该对象)

    当前页面上下文对象。
    用于操作当前页面和当前页面标签的共享数据。
    pageContext对象提供了对当前JSP页面内所有的对象及名字空间的访问,也就是说它可以访问到本页面所在的session,也可以获取所在的application的某一属性值。
    *   一个顶9个
    *   是域对象,具有set、get、remove方法

    *   代理其它域对象:pageContext.setAttribute("xxx","XXX",PageContext.SESSION_SCOPE);
        指定向session域中添加数据。

    *   全域查找:pageContext.findAttribute("xxx");
        在四大域对象中按照范围从小到大的顺序依次查找。
        为了方便全域查找,在起名时一般定义为session_xxx,pagecontext_sss。

    *   获取其它8个内置对象
        getSession()等方法。

config(ServletConfig)

    对应Servlet中的ServletConfig。

    config对象是在一个Servlet初始化时,JSP引擎向他传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成(以及服务器的有关信息(通过传递一个ServletContext对象)。
    该对象代表JSP对应的Servlet的配置,可以得到web.xml中的参数 -- ServletConfig。 

request(HttpServletRequest)

    客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。
    它是HttpServletRequest类的实例,作用域是同一个请求之内,页面跳转通过forward跳转页面,则目标页面可以拿到request中的属性值,redirect是重定向,属性值会丢失。
    方法摘要:
        getParameter(String name);
            通过表单中的name值来获取对应属性。
        getParameterValues(String name);
            通过name来获取字符串数组,返回值是String[ ]。
        setAttribute(String name,Object obj)
            设置名字为name的obj的值为obj。
        getAttribute(String name);
            返回由name指定的属性值,如果不存在就返回null。
        getCookie(); 

response(HttpServletResponse)

    response对象包含了响应客户请求的有关信息,但是JSP中很少用到它,它是HttpServletResponse类的实例。
    方法摘要:
        addCookie(Cookie cookie)
        sendRedirect("路径名"); 

session(HttpSession)

    session对象是指客户端与服务器的一次会话,从客户连接到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例,用于保存用户的信息,跟踪用户的行为。
    不是每个JSP页面中都可以使用该对象,如果在某个JSP页面中设置<%@page session="false" %>,说明这个页面中不能使用session。
    方法摘要:
        setAttribute(String name,Object obj);
        getAttribute(String name);




    这9个对象中有很多是极少使用的:config、page、exception
    这9个对象中有两个对象不是每个JSP页面都可以使用的:exception、session

Servlet三大作用域:
        ServletContext
        session
        request

JSP四大作用域:
    pageContext(1,范围最小)
        域对象,存放的数据只能在当前页面使用。
    request(2,范围第二小)
        域对象,存放的数据只在一次request中有效。
    session(3,范围第二大)
        域对象,存放的数据在一次会话中有效。
    application(4,范围最大)
    域对象,存放的数据在整个Web应用运行期间均有效。

内置对象所对应的类:
    request                    HttpServletRequest
    response                 HttpServletResponse
    session                    HttpSession
    exception                 Exception
    page                         this(当前对象,也就是当前JSP页面)
    config                       ServletConfig
    application                ServletContext
    pageContext             PageContext
    out                            JspWriter



    request对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象常用的方法有:getParameter、getParameterNames 和getParameterValues 通过调用这几个方法来获取请求对象中所包含的参数的值。

    response 对象代表的是对客户端的响应,也就是说可以通过response 对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用

    pageContext 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性常用的方法有 :findAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope一般情况下pageContext对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。

    session    对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。

    application 对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。

    out 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out” 对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了pirnt和println之外,还包括clear、clearBuffer、 flush、getBufferSize和getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法

    config对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。

    page对象代表了正在运行的由JSP文件产生的类对象,不建议一般使用。

    exception对象则代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage="true "%>”的JSP文件中使用四个作用域。
原文地址:https://www.cnblogs.com/wwwwyc/p/6375275.html