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

 
 

前言

只有光头才能变强。

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

什么是JSP内置对象

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

细心的朋友会发现,我们没有在JSP页面上定义过out对象,却可以直接使用!其实out对象就是JSP内置对象之一

九个内置对象:


out对象

out对象的API

640?wx_fmt=png
640?wx_fmt=png

request

640?wx_fmt=png

response

640?wx_fmt=png

config

640?wx_fmt=png

session

640?wx_fmt=png

注意:在page指令配置如下信息,session将不可使用

<%@page session="false" %>

application

640?wx_fmt=png

page

exception

<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" %><html><head>    <title></title></head><body><%--模拟空指针异常的错误--%><%    String sss = null;    sss.length();%></body></html>"java" errorPage="error.jsp" %>

<html>
<head>
    <title></title>
</head>
<body>

<%--模拟空指针异常的错误--%>
<%

    String sss = null;
    sss.length();
%>

</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %><html><head>    <title>错误页面</title></head><body><%    out.println("程序抛出了异常:" + exception);%></body></html>"java" isErrorPage="true" %>

<html>
<head>
    <title>错误页面</title>
</head>
<body>

<%
    out.println("程序抛出了异常:" + exception);
%>

</body>
</html>
640?wx_fmt=png

pageContext

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

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>"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>
640?wx_fmt=png

pageContext作为域对象

<%@ 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>"java" %>
<html>
<head>
    <title>使用page域对象</title>
</head>
<body>
<%
    pageContext.setAttribute("name""zhongfucheng");
%>
<%
    String value = (String) pageContext.getAttribute("name");
    System.out.println(value);
%>

</body>
</html>
640?wx_fmt=png
<%@ 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>"java" %>
<html>
<head>
    <title>request域对象设置属性</title>
</head>
<body>
<%
    //这是request域对象保存的内容
    request.setAttribute("name","zhongfucheng");
%>

<%--跳转到1.jsp中--%>

<jsp:forward page="1.jsp"/>

</body>
</html>
<%@ 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>"java" %>
<html>
<head>
    <title>在page域对象获取属性</title>
</head>
<body>

<%
    //企图获取request域对象存进的属性
    String value = (String) pageContext.getAttribute("name");
    System.out.println(value);
%>

</body>
</html>
640?wx_fmt=png

<%@ 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>"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>
640?wx_fmt=png

<%@ 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>"java" %>
<html>
<head>
    <title>使用findAttribute</title>
</head>
<body>

<%

    //使用findAttribute查找2.jsp中request域对象的属性
    String value = (String) pageContext.findAttribute("name");
    System.out.println(value);
%>

</body>
</html>
640?wx_fmt=png

引入和跳转

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

640?wx_fmt=png

4种属性范围

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

  1. page【只在一个页面中保存属性,跳转页面无效】

  2. requet【只在一次请求中保存属性,服务器跳转有效,浏览器跳转无效】

  3. session【在一个会话范围中保存属性,无论何种跳转均有效,关闭浏览器后无效】

  4. application【在整个服务器中保存,所有用户都可以使用】


  1. setAttribute(String name, Object o )

  2. getAttribute(String name)

  3. removeAttribute(String name)

应用场景

  1. request:如果客户向服务器发请求,产生的数据,用户看完就没用了,像这样的数据就存在request域,像新闻数据,属于用户看完就没用的

  2. session:如果客户向服务器发请求,产生的数据,用户用完了等一会儿还有用,像这样的数据就存在session域中,像购物数据,用户需要看到自己购物信息,并且等一会儿,还要用这个购物数据结帐

  3. servletContext:如果客户向服务器发请求,产生的数据,用户用完了,还要给其它用户用,像这样的数据就存在servletContext域中,像聊天数据


最后

乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,不妨来关注一下!

640?wx_fmt=jpeg

有帮助?好看!转发! 640


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值