• JSP的9大内置对象和4大域对象(作用域)


    九大内置对象

    内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用

    JSP中九大内置对象为:

    • pageContext 页面上下文对象     类型 javax.servlet.jsp.PageContext 作用域 Page
    • request 请求对象                   类型 javax.servlet.ServletRequest 作用域 Request
    • response 响应对象                类型 javax.servlet.SrvletResponse 作用域 Page
    • session 会话对象                   类型 javax.servlet.http.HttpSession 作用域 Session
    • application 应用程序对象         类型 javax.servlet.ServletContext 作用域 Application
    • out 输出对象                          类型 javax.servlet.jsp.JspWriter 作用域 Page
    • config 配置对象                     类型 javax.servlet.ServletConfig 作用域 Page
    • exception 例外对象          类型 javax.lang.Throwable 作用域 page
    • page 页面对象                 类型javax.lang.Object 作用域 Page

    1)pageContext

    ①javax.servlet.jsp.PageContext(抽象类)类型,pageContext 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性。此对象提供自身和其他3个作用域层次的属性查询和修改能力,同时可以获取其他8个内置对象。它也提供了转发请求到其它资源和包含其他资源的方法:该对象的方法都是抽象方法。作用域为page(页面执行期)。

    ②常用的方法有 :findAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope,一般情况下pageContext对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。

    2)request

    ①javax.servlet.ServletRequest的子类型,equest 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,封装了由WEB浏览器或其它客户端生      成地HTTP请求的细节(参数,属性,头标和数据等),是最常用的对象。作用域为request(用户请求期)。

    ②常用的方法有:getParameter、getParameterNames 和getParameterValues等,通过调用这几个方法来获取请求对象中所包含的参数的值,方法可查看API。

    3)response

    ①javax.servlet.ServletResponse的子类型,response 对象代表的是对客户端的响应,此对象封装了返回到HTTP客户端的输出,向页面作者提供设置响应头标和状     态码的方式。经常用来设置HTTP标题,添加cookie,设置响应内容的类型和状态,发送HTTP重定向和编码URL等。作用域为page(页面执行期)。

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

    ③常用方法有:sendRedirect、setContentType、encodeRedirectURL、addHeader、addCookie、getWriter等

    4)session

    ①avax.servlet.http.HttpSession类型,主要用于跟踪对话。HttpSession是一个类似哈希表的与单一WEB浏览器会话相关的对象,它存在于HTTP请求之间,可以存     储任何类型的命名对象。作用域session(会话期)。若不需要在请求之间跟踪会话对象,可以通过在page指令中指定session="false"。

    ②session对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在     cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。注意:不要把cookie也理解为九大内置对象之一,cookie主要是实现了session的作用。

    概要:
    HTTP是无状态(stateless)协议;
    Web Server 对每一个客户端请求都没有历史记忆;
    Session用来保存客户端状态信息;
    由Web Server 写入;
    存于客户端;
    客户端的每次访问都把上次的session记录传递给Web Server;
    Web Server读取客户端提交的session来获取客户端的状态信息。

    ③常用方法有:getAttribute、setAttribute、removeAttribute、setMaxInactiveInterval、getId、 getValue、 getValueNames和putValue等。

    5)application

    ①javax.servlet.ServletContext类型,作用域是application(整个程序运行期)。它提供了关于服务器版本,应用级初始化参数和应用内资源绝对路径,注册信息的方     式,负责提供应用程序在服务器中运行时的一些全局信息。

    ②常用的方法有:getMimeType、getRealPath、getResourceAsStream等。

    ③获取ServletContext对象的途径:

    方法一:通过GenericServlet提供的 getServletContext()

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         ServletContext servletContext3 = getServletContext();
    }   
    方法二:通过ServletConfig提供的getServletContext()
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext2 = getServletConfig().getServletContext();
    }   
    方法三:通过HttpServletRequest获取
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         ServletContext servletContext1 = req.getServletContext();
    }   
    方法四:通过HttpSession获取。
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = req.getSession().getServletContext();
    }

    servlet的环境通过调用getServletConfig().getContext()方法获得。

    6)out

    ①javax.servlet.jsp.JspWriter类型,代表输出流的对象。作用域为page(页面执行期)。

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

    7)config

    ①javax.servlet.ServletConfig类型,“config” 对象提供一些配置信息,作用域为page(页面执行期)。

    ②常用的方法有:getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。

    8)exception

    ①java.lang.Throwable类型,通过JSP错误页面中一个catch块已经益出但没有捕获的java.lang.Throwable的任意实例,传向了errorPage的URI。作用域为page(页面执行期)。

    ②“exception” 代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了page指令“<%@ page isErrorPage="true "%>”的JSP文件中使用。

    9)page

    ①java.lang.Object类型,指向页面自身的方式。作用域为page(页面执行期)。

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

    四大作用域

    四个域对象:pageContext  --  page域                              

                          request  --  request域

                          session  -- session域

                          application  --  context域

     1)域对象作用:保存数据和获取数据,用于数据共享。

     2)域对象方法:setAttribute("name",Object) 保存数据

                                getAttribute("name")  获取数据

                                removeAttribute("name") 清除数据

     3)域对象作用范围:

                                      page域: 只能在当前jsp页面中使用(当前页面)

                                      request域: 只能在同一个请求中使用(转发)

                                      session域: 只能在同一个会话(session对象)中使用(私有的)

                                      context域: 只能在同一个web应用中使用。(全局的)

      1、如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。 从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。
      2、如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。就算在这个过程中,使用request对象的getRequestDispatcher("path").forward(request, response)的请求转发方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量,但如果使用了response对象的sendRedirect("path")重定向方式,那这个request域就会失去效果。因为response的sendRedirect("path")重定向方式,跟request对象的getRequestDispatcher("path").forward(request, response)的请求转发方式是有区别的,因为重定向涉及到浏览器的两次请求和两次响应,故第二次的request会将第一次的request域刷新。

      3、如果把变量放到session里,就说明它的作用域是session,有效范围是当前会话。所谓当前会话,是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量。

      session是在服务器端建立的,浏览器访问服务器会有一个jsessionid,浏览器端通过 jsessionid定位服务器端的session,session的创建和销毁由服务器端控制。当浏览器关闭后,session还存在在服务器端,只不过你新开的浏览器去访问服务器会创建另一个session,这个时候的jsessionid已经不一样了。也就不能访问上一次的哪个session里面的内容了。

      那服务器端session如何创建的呢? 普通htm不会创建,jsp默认是创建的,只要你访问一个任何一个jsp就会创建(不过只创建一次),你关闭浏览器从新访问又会创建一个,这些创建的 session由服务器自己控制销毁(tomcat默认为30分钟,web.xml中配置),你也可以在服务器端代码中手动调用session.invalidate()销毁它。

      注意:如果JSP没有显示的使用 <%@page session="false"%> 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession session = HttpServletRequest.getSession(true),这也是JSP中隐含的session对象的来历。

      4、如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。与上述三个不同的是,application里的变量可以被所有用户共用。如果用户甲的操作修改了application中的变量,用户乙访问时得到的是修改后的值。

    EL表达式获取指定域中变量值:  例如${pageScope.name.value} 

    域范围: pageScoep / requestScope / sessionScope / applicationScope

  • 相关阅读:
    windows 运行hadoop的WordCount报nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)
    java对象比较==和equals的区别
    java poi处理excel多sheet并实现排序
    hadoop-eclipse插件编译及windows下运行wordcount项目
    hadoop动态添加删除节点datanode及恢复
    hadoop的client搭建-即集群外主机访问hadoop
    appium+python,app自动化测试框架
    [adb]查看 App的appPackage和appActivity
    Django基础(二)
    JavaScript、Dom和jQuery
  • 原文地址:https://www.cnblogs.com/cookiewu/p/10488233.html
Copyright © 2020-2023  润新知