JSP面试题都在这里(二)

简介: 下面是我整理下来的JSP知识点:

jsp有哪些内置对象?作用分别是什么?

jsp有哪些内置对象?作用分别是什么?

九个内置对象:

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

其中,request、response、session、application、config这五个对象和Servlet的API是一样的。这5个对象我就不解释了。

在JSP中,尤其重要的是pageContext对象。

pageContext是内置对象中最重要的一个对象,它代表着JSP页面编译后的内容(也就是JSP页面的运行环境)!

pageContext对象

  • 既然它代表了JSP页面编译后的内容,理所当然的:它封装了对其他8大内置对象的引用!,也就是说,通过pageContext可以获取到其他的8个内置对象!
  <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>获取八大内置对象</title>
    </head>
    <body>
    <%
        System.out.println(pageContext.getSession());
        System.out.println(pageContext.getRequest());
        System.out.println(pageContext.getResponse());
        System.out.println(pageContext.getException());
        System.out.println(pageContext.getPage());
        System.out.println(pageContext.getServletConfig());
        System.out.println(pageContext.getServletContext());
        System.out.println(pageContext.getOut());
    %>
    </body>
    </html>

看下效果:

image.jpeg

pageContext作为域对象

  • 类似于request,session,ServletContext作为域对象而言都有以下三个方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 当然了,pageContext也不例外,pageContext也有这三个方法
  • pageContext本质上代表的是当前JSP页面编译后的内容,作为域对象而言,它就代表着当前JSP页面(也就是page)!也就是说:pageContext域对象只在page范围内有效,超出了page范围就无效了
  • 首先来看看在page范围内能不能使用
  <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>使用page域对象</title>
    </head>
    <body>
    <%
        pageContext.setAttribute("name", "zhongfucheng");
    %>
    <%
        String value = (String) pageContext.getAttribute("name");
        System.out.println(value);
    %>
    </body>
    </html>

效果如下:

11.jpg

  • 我们现在来试验一下是不是超出了page范围就无效了!
  • 在2.jsp中request域对象设置属性
 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>request域对象设置属性</title>
    </head>
    <body>
    <%
        //这是request域对象保存的内容
        request.setAttribute("name","zhongfucheng");
    %>
    <%--跳转到1.jsp中--%>
    <jsp:forward page="1.jsp"/>
    </body>
    </html>

企图在1.jsp中pageContext取出request存进去的属性

  <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>在page域对象获取属性</title>
    </head>
    <body>
    <%
        //企图获取request域对象存进的属性
        String value = (String) pageContext.getAttribute("name");
        System.out.println(value);
    %>
    </body>
    </html>

效果如下:

12.jpg

  • pageContext本质上代表着编译后JSP的内容,pageContext还可以封装了访问其他域的方法
  • 上面的pageContext默认是page范围的,但pageContext对象重载了set、get、removeAttribute这三个方法
  • getAttribute(String name,int scope)
  • setAttribute(String name,Object value,int scope)
  • removeAttribute(String name,int scope)
  • 多了一个设置域范围的一个参数,如果不指定默认就是page。当然了,pageContext把request、session、application、page这几个域对象封装着了静态变量供我们使用
  • PageContext.APPLICATION_SCOPE
  • PageContext.SESSION_SCOPE
  • PageContext.REQUEST_SCOPE
  • PageContext.PAGE_SCOPE
  • 刚才我们没有使用重载方法的时候,使用pageContext是无法获取到request域对象设置的属性的。现在我们使用重载后的方法看一下能不能获取得到
 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>在page域对象获取request域对象的属性</title>
    </head>
    <body>
    <%
        //使用重载的方法获取request域对象的属性
        String value = (String) pageContext.getAttribute("name",pageContext.REQUEST_SCOPE);
        System.out.println(value);
    %>
    </body>
    </html>

效果:

13.jpg

  • pageContexst还有这么一个方法:
  • findAttribute(String name)
  • 该方法会查找各个域的属性,从小到大开始寻找!也就是page—>request->session->application。
  • 我们用此方法看能不能查找出request域对象的属性吧!
  <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>使用findAttribute</title>
    </head>
    <body>
    <%
        //使用findAttribute查找2.jsp中request域对象的属性
        String value = (String) pageContext.findAttribute("name");
        System.out.println(value);
    %>
    </body>
    </html>

效果如下:

14.jpg

out对象:

  • out对象用于向浏览器输出数据,与之对应的是Servlet的PrintWriter对象。然而这个out对象的类型并不是PrintWriter,是JspWriter

15.jpg

  • 我们可以简单理解为:JspWriter就是带缓存的PrintWrieter
  • out对象的原理如下:

16.jpg

  • 只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中
  • 设置page指令的buffer属性关闭了out对象的缓存功能
  • out对象的缓冲区已满
  • 整个JSP页面结束
  • 一般我们在JSP页面输出都是用表达式(<%=%>),所以out对象用得并不是很多
目录
相关文章
|
安全 前端开发 Java
Java面试题日积月累(jsp/Servlet面试题20道)
Java面试题日积月累(jsp/Servlet面试题20道)
93 0
每日一道面试题之 介绍一下jsp 的 4 种作用域
每日一道面试题之 介绍一下jsp 的 4 种作用域
|
存储 Java
每日一道面试题之jsp 有哪些内置对象?作用分别是什么?
每日一道面试题之jsp 有哪些内置对象?作用分别是什么?
|
前端开发 Java 容器
每日一道面试题之jsp 和 servlet 有什么区别?
每日一道面试题之jsp 和 servlet 有什么区别?
|
Java 程序员 容器
Java 最常见的面试题:jsp 和 servlet 有什么区别?
Java 最常见的面试题:jsp 和 servlet 有什么区别?
Java 最常见的面试题:说一下 jsp 的 4 种作用域?
Java 最常见的面试题:说一下 jsp 的 4 种作用域?
Java 最常见的面试题: jsp 有哪些内置对象?作用分别是什么?
Java 最常见的面试题: jsp 有哪些内置对象?作用分别是什么?
|
设计模式 前端开发 IDE
JSP面试题都在这里(三)
下面是我整理下来的JSP知识点:
167 0
JSP面试题都在这里(三)
|
Java
JSP面试题都在这里(一)
下面是我整理下来的JSP知识点:
71 0
JSP面试题都在这里(一)
|
Web App开发 前端开发 Java
JSP面试题都在这里
下面是我整理下来的JSP知识点: 图上的知识点都可以在我其他的文章内找到相应内容。 JSP常见面试题 jsp静态包含和动态包含的区别 jsp静态包含和动态包含的区别 在讲解request对象的时候,我们曾经使用过request.
1266 0
下一篇
DataWorks