JSP内置对象概览

JSP内置对象概览在 JSP 之中 已经专门为用户的使用提供了许多的内置对象 所谓的内置主要指所有的对象不用再由用户自己进行对象的实例化操作 而可以直接进行使用 WEB 容器为用户准备好了这些内置对象 nbsp nbsp 在 JSP 中为了简化用户的开发 提供了九个内置对象 这些内置对象将由容器为用户进行实例化 而用户直接使用即可 而不用像在 java 中那样 必须通过关键字 new 进行实例化对象之后才可以使用 nbsp nbsp 例如 之前

    在JSP之中,已经专门为用户的使用提供了许多的内置对象,所谓的内置主要指所有的对象不用再由用户自己进行对象的实例化操作,而可以直接进行使用。WEB容器为用户准备好了这些内置对象。

    在JSP中为了简化用户的开发,提供了九个内置对象,这些内置对象将由容器为用户进行实例化,而用户直接使用即可,而不用像在java中那样,必须通过关键字new进行实例化对象之后才可以使用。

    例如,之前学习的request,有一个接收参数的方法:public String getParameter(String paramName),实际上对于request本身就是一个内置对象。

WEB容器为用户准备好了这些内置对象。

JSP内置对象概览

前面的5个最为重要。

Request中有getParameter()方法,那么这个方法要想查询,不能直接查request,要通过javax.servlet.http.HttpServletRequest接口完成。

如果要想进行这些方法的查询,必须通过JAVAEE文档。

JSP内置对象—四种属性范围

    在JSP中提供了四种属性的保存范围,所谓的属性保存范围,指的就是一个设置的对象,可以在多少个页面中保存并可以继续使用。

四种属性范围:

1):pageContext:只在一个页面中保存属性,跳转之后无效。

2):request:只在一次请求中保存,服务器跳转后依然有效。

3):session:在一次会话范围中,无论何种跳转都可以使用,但是新开浏览器无法使用。

4):application:在整个服务器上保存,所有用户都可以使用。

JSP内置对象概览

四个内置对象,每个都有以上三个属性操作方法

设置属性的时候属性的名称是String,而属性的内容是Object,很明显,可以设置任意的内容。



通过代码来验证各个属性范围的特点。

1.Page属性范围(pageContext范围)

Page属性范围(使用pageContext表示,但是一般来讲都习惯于将这种范围称为page范围)表示将一个属性设置在本页上,跳转之后无法取得。

【scope_01.jsp的内容如下:】

<%@ page contentType="text/html" pageEncoding="GBK"%>

<%@ page import="java.util.*"%>

page范围演示

<% //设置属性

   pageContext.setAttribute(“name”,”斜雨”);

   pageContext.setAttribute(“birthday”,new Date());

%>

<%

   String username = (String)pageContext.getAttribute(“name”);

   Date userbirthday = (Date)pageContext.getAttribute(“birthday”);

%>

   

姓名:<%=username%>

   

生日:<%=userbirthday%>

执行此代码的结果如下所示:

JSP内置对象概览

现在发生了服务器跳转之后,发现内容无法取得了,则一个page范围中的内容只能保存在一个页面。例子如下:

【scope_02.jsp的内容如下:】

<%@ page contentType="text/html" pageEncoding="GBK"%>

<%@ page import="java.util.*"%>

page范围演示

<% //设置属性

   pageContext.setAttribute(“name”,”斜雨”);

   pageContext.setAttribute(“birthday”,new Date());

%>


【scope_03.jsp的内容如下:】

<%@ page contentType="text/html" pageEncoding="GBK"%>

<%@ page import="java.util.*"%>

page范围演示

<%

   String username = (String)pageContext.getAttribute(“name”);

   Date userbirthday = (Date)pageContext.getAttribute(“birthday”);

%>

姓名:<%=username%>

生日:<%=userbirthday%>

执行scope_02.jsp的结果如下所示:

JSP内置对象概览

如果现在希望服务器端跳转后可以继续取得属性,则可以将范围扩大到request。

2.Request属性范围

如果要在服务器跳转之后属性可以继续保存下来,则可以使用request属性范围操作,request属性范围表示的是在服务器跳转之后,所有设置的内容依然会被保留下来。

【re-scope_01.jsp的内容如下:】

<%@ page contentType="text/html" pageEncoding="GBK"%>

<%@ page import="java.util.*"%>

page范围演示

<% //设置属性

   request.setAttribute(“name”,”斜雨”);

   request.setAttribute(“birthday”,new Date());

%>


【re-scope_02.jsp的内容如下:】

<%@ page contentType="text/html" pageEncoding="GBK"%>

<%@ page import="java.util.*"%>

page范围演示

<%

   String username = (String)request.getAttribute(“name”);

   Date userbirthday = (Date)request.getAttribute(“birthday”);

%>

姓名:<%=username%>

生日:<%=userbirthday%>

执行re-scope_01.jsp的结果如下所示:

JSP内置对象概览

    页面跳转之后,可以取得了,而且如果现在一直有服务器跳转,则可以一直传递下去,但是如果换了一种形式,使用超链接进行页面的跳转,首先地址栏会发生改变,一旦地址栏发生改变的跳转,都统一称为客户端跳转,客户端跳转是无法传递request属性的。

使用超链接:

将re-scope_01.jsp的如下内容:


更改为:




re-scope_02.jsp

>通过链接取得属性

则发生的是客户端跳转,而且不能传递参数。

关于request属性范围的理解:

    Request表示的是客户端的请求,正常情况下,一次请求服务器只会给予一次回应,那么这个时候如果是服务器端跳转,请求的地址栏没有改变,所以也就相当于回应了一次,而如果地址栏改变了,就相当于是发出了第二次请求,则第一次请求的内容肯定就已经消失了,所以无法取得。

    所以,如果是客户端跳转,则就相当于发出了两次请求,那么肯定第一次的请求将不再存在。如果现在希望不管是服务器端还是客户端跳转,都可以保存的话,则就可以继续扩大范围,扩大到session属性范围。

3.Session属性范围

如果现在希望一个属性设置之后,可以在任何一个与设置页面相关的页面中取得的话,则就可以使用session属性范围,使用session设置属性之后,不管是客户端跳转还是服务器端跳转,只要属性设置了就都可以取得。

【se-scope_01.jsp的内容如下:】

<%@ page contentType="text/html" pageEncoding="GBK"%>

<%@ page import="java.util.*"%>

page范围演示

<% //设置属性

   session.setAttribute(“name”,”斜雨”);

   session.setAttribute(“birthday”,new Date());

%>


【se-scope_02.jsp的内容如下:】

<%@ page contentType="text/html" pageEncoding="GBK"%>

<%@ page import="java.util.*"%>

page范围演示

<%

   String username = (String)session.getAttribute(“name”);

   Date userbirthday = (Date)session.getAttribute(“birthday”);

%>

姓名:<%=username%>

生日:<%=userbirthday%>

执行se-scope_01.jsp的结果如下所示:

JSP内置对象概览

将语句:

换为:

通过链接取得属性

就变成了客户端跳转

    一般情况下,再打开了一个新的浏览器的话,则就无法取得之前设置的session了,因为每一个session只保存在当前的浏览器之中,并且可以从相关的页面中取得。

对于服务器而言,每一个连接到它的客户端都是一个session

在打开原来的Chrome浏览器的前提下,再次打开一个新的IE浏览器,复制原来的链接,得到的结果如下:

JSP内置对象概览

    如果要想让属性设置一次之后,不管是否是新的浏览器打开都可以访问的话,则就可以使用application属性范围了。

Application属性范围

    如果现在希望设置一个属性,可以让所有的用户(每一个session)都能看得见的话,则可以将属性范围设置成application,这样属性就保存在了服务器之上了。

只要是通过application设置的属性,则所有的session都可以取得,表示公共的内容,但是如果此时服务器重新启动了,则无法取得了,因为关闭后属性消失,要想再次访问,则可以重新设置。

关闭服务器,再次打开服务器,再次刷新原来的结果页面,发现的内容如下:

JSP内置对象概览

    既然application属性范围的内容都是保存在了服务器上,如果现在要同时设置很多个application的话,则服务器的性能肯定会有所降低,而且四种属性范围都是保存在服务器的,这个时候就给出了一个原则:能使用page范围的就不要使用request,能使用request的就不要使用session,能使用session的就不要使用application,因为保存范围越窄,则肯定对于服务器的压力就越低。

深入研究page范围:

    Page范围是通过pageContext对象设置的,但是在javax.servlet.jsp.pageContext类中可以发现以下的一个设置属性的方法。

Abstract void setAttribute(String name,Object value,int scope);

在PageContext类中存在四个表示属性范围的常量,可以直接通过这些常量指定scope的内容:

Public static final int PAGE_SCOPE

Public static final int REQUEST_SCOPE

Public static final int SESSION_SCOPE

Public static final int APPLICATION_SCOPE

【re-scope_03.jsp的内容如下:】

<%@ page contentType="text/html" pageEncoding="GBK"%>

<%@ page import="java.util.*"%>

request范围演示

<% //设置属性

   pageContext.setAttribute(“name”,”斜雨”,PageContext.REQUEST_SCOPE);

   pageContext.setAttribute(“birthday”,new Date(),PageContext.REQUEST_SCOPE);

%>


此时是通过pageContext将一个属性设置成了request范围,执行效果与原来的相同。

一定要注意pageContext可以操作四种范围,这一点直接决定于以后的程序开发问题。

小结:

1.四种属性范围是整个WEB的核心操作;

2.属性范围规定了属性的有效范围;

3.PageContext对象可以直接操作四种属性范围。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227974.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午8:05
下一篇 2026年3月16日 下午8:05


相关推荐

  • TransactionScope 的基本原理简介

    TransactionScope 的基本原理简介C#的事务编程1Db事务DbConnection中创建基于当前连接的DbTransaction2使用TransactionScope,创建环境事务一旦创建,在这个环境包含的DbCo

    2022年7月4日
    37
  • 使用Keras实现 基于注意力机制(Attention)的 LSTM 时间序列预测

    时隔半年多,毕设男孩终于重操旧业,回到了LSTM进行时间序列预测和异常检测的路上。如果有阅读过我之前的博客,可以发现使用LSTM作单类的时间序列异常检测也是基于对于时间序列的预测进行登堂入室LSTM:使用LSTM进行简单的时间序列异常检测本次我们要进行的是使用注意力机制+LSTM进行时间序列预测,项目地址为KerasAttentionMechanism首先我们把它git…

    2022年4月6日
    576
  • pandas无法打开.xlsx文件,xlrd.biffh.XLRDError: Excel xlsx file; not supported

    pandas无法打开.xlsx文件,xlrd.biffh.XLRDError: Excel xlsx file; not supported原因是最近xlrd更新到了2.0.1版本,只支持.xls文件。所以pandas.read_excel(‘xxx.xlsx’)会报错。可以安装旧版xlrd,在cmd中运行:pipuninstallxlrdpipinstallxlrd==1.2.0

    2022年10月20日
    3
  • vue的$on方法_or指令的作用是

    vue的$on方法_or指令的作用是v-on监听事件可以用v-on指令监听DOM事件,并在触发时运行一些JavaScript代码。事件代码可以直接放到v-on后面,也可以写成一个函数。示例代码如下:<divid

    2022年7月30日
    6
  • 字符串如何比较大小

    字符串如何比较大小字符比较 charactercom 是指按照字典次序对单个字符或字符串进行比较大小的操作 一般都是以 ASCII 码值的大小作为字符比较的标准 比较方式 可以使用 String 类的 compareTo 方法来实现 该方法用于判断一个字符串是大于 等于还是小于另一个字符串 返回 int 类型的差值 判断字符串大小的依据是它们在字典中的顺序 实现 Comparable 接口实现 Comparator 接口 Strings1 abc Strings2 efg System o

    2026年3月20日
    2
  • 多项式曲线拟合之最小二乘法推导[通俗易懂]

    多项式曲线拟合之最小二乘法推导[通俗易懂]1、多项式曲线拟合之最小二乘法1.1问题来源1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星。经过40天的跟踪观测后,由于谷神星运行至太阳背后,使得皮亚齐失去了谷神星的位置。随后全世界的科学家利用皮亚齐的已有观测数据开始寻找谷神星,但是根据大多数人计算的结果来寻找谷神星都没有结果。只有时年24岁的高斯所计算的谷神星的轨道,被奥地利天文学家海因里希·奥尔伯斯的观测所证实,使天文界从此可以预测到谷神星的精确位置。同样的方法也产生了哈雷彗星等很多天文学成果。高斯使用的方法就是最小二乘法,

    2022年5月17日
    58

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号