JSP第二篇【内置对象的介绍、4种属性范围、应用场景】(二)

简介: JSP引擎在调用JSP对应的jspServlet时,会传递或创建9个与web开发相关的对象供jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用

pageContext

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

pageContext获取8个内置对象

  • 既然它代表了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>

看下效果:

41.jpg

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>

效果如下:42.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>

效果如下:43.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>
  • 效果:

44.jpg

  • pageContexst还有这么一个方法:
  • findAttribute(String name)
  • 该方法会查找各个域的属性,从小到大开始寻找!也就是page—>request->session->application。这个是EL表达式的原理!,EL表达式后面会讲到!
  • 我们用此方法看能不能查找出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>

效果如下:45.jpg

引入和跳转

PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和include方法

  • pageContext.forward(String url)
  • pageContext.include(String url)
    46.jpg

4种属性范围

到目前为止,我们已经学了4种属性范围了。

  1. page【只在一个页面中保存属性,跳转页面无效】
  2. requet【只在一次请求中保存属性,服务器跳转有效,浏览器跳转无效】
  3. session【在一个会话范围中保存属性,无论何种跳转均有效,关闭浏览器后无效】
  4. application【在整个服务器中保存,所有用户都可以使用】

  • 4个内置对象都支持以下的方法:
  • setAttribute(String name, Object o )
  • getAttribute(String name)
  • removeAttribute(String name)

应用场景

  1. request:如果客户向服务器发请求,产生的数据,用户看完就没用了,像这样的数据就存在request域,像新闻数据,属于用户看完就没用的
  2. session:如果客户向服务器发请求,产生的数据,用户用完了等一会儿还有用,像这样的数据就存在session域中,像购物数据,用户需要看到自己购物信息,并且等一会儿,还要用这个购物数据结帐
  3. servletContext:如果客户向服务器发请求,产生的数据,用户用完了,还要给其它用户用,像这样的数据就存在servletContext域中,像聊天数据

如果文章有错的地方欢迎指正,大家互相交流。

目录
相关文章
|
6月前
|
Java
17JavaWeb基础 - JSP的九大内置对象/四大作用域
17JavaWeb基础 - JSP的九大内置对象/四大作用域
34 0
|
7月前
|
Java
jsp内置对象和路径
jsp内置对象和路径
52 0
|
9月前
|
Java
欢迎来到Jsp编程课时四——内置对象 中四大作用域。(二)
欢迎来到Jsp编程课时四——内置对象 中四大作用域。(二)
83 0
欢迎来到Jsp编程课时四——内置对象 中四大作用域。(二)
|
9月前
|
Java 存储
欢迎来到Jsp编程课时四——内置对象 中四大作用域。(一)
欢迎来到Jsp编程课时四——内置对象 中四大作用域。(一)
38 0
欢迎来到Jsp编程课时四——内置对象 中四大作用域。(一)
|
6月前
|
存储 Java
每日一道面试题之jsp 有哪些内置对象?作用分别是什么?
每日一道面试题之jsp 有哪些内置对象?作用分别是什么?
|
7月前
|
缓存 安全 Java
JSP内置对象总结
JSP内置对象总结
78 0
|
10月前
|
缓存 Java 应用服务中间件
【Java Web编程 四】深入理解JSP内置对象
【Java Web编程 四】深入理解JSP内置对象
95 0
Java 最常见的面试题: jsp 有哪些内置对象?作用分别是什么?
Java 最常见的面试题: jsp 有哪些内置对象?作用分别是什么?
|
开发框架 Java 中间件
java程序设计与j2ee中间件技术/软件开发技术(III)-实验五-实现一个简单的购物车功能,使用JSP内置对象实现猜数字的小游戏
java程序设计与j2ee中间件技术/软件开发技术(III)-实验五-实现一个简单的购物车功能,使用JSP内置对象实现猜数字的小游戏
200 1
java程序设计与j2ee中间件技术/软件开发技术(III)-实验五-实现一个简单的购物车功能,使用JSP内置对象实现猜数字的小游戏
|
存储 缓存 Java
JAVA Web入门之JSP内置对象的解析及使用(超详细必看)
JAVA Web入门之JSP内置对象的解析及使用(超详细必看)
222 0
JAVA Web入门之JSP内置对象的解析及使用(超详细必看)