JSP PageContext – 隐式对象
PageContext 扩展了JspContext以提供有用的上下文细节,而 JSP 技术应用于 Servlet 环境。 PageContext 是一个实例,它可以访问与 JSP 页面相关的所有名称空间,可以访问某些页面属性和应用程序详细信息上的层。因此,隐式对象连接到 pageContext。
- PageContext 类是一个抽象类,它被形成为扩展以通过兼容的 JSP 引擎运行时环境提供依赖于应用程序的应用程序。在 JSP 中, pageContext 是javax.servlet.jsp.PageContext 的一个实例。
- 整个 JSP 页面由 PageContext 对象表示。这个对象被认为是一种获取页面详细信息的方法,同时远离大多数执行信息。
- 对于每个请求,这个 pageContext 对象保存响应和请求对象的凭据。通过访问pageContext对象的属性,得到out、session、config、application对象。
- 该 pageContext 对象进一步保存有关提供给 JSP 页面的指令的信息,以及页面范围、缓冲信息和 errorPageURL。
- 通过使用 pageContext 对象,您可以设置属性、获取属性和删除存在于不同范围中的属性,例如page 、 request 、 session和application范围,如下所示:
- 页– 范围:PAGE_CONTEXT
- 请求- 范围:REQUEST_CONTEXT
- 会话– 范围:SESSION_CONTEXT
- 应用程序- 范围:APPLICATION_CONTEXT
Note: Page scope is the default scope in JSP.
句法:
public abstract class PageContext
extends JspContext
语法:使用 pageContext
pageContext.methodName(“name of attribute”, “scope”);
承前启后,现在让我们讨论一下pageContext隐式对象中使用的方法。下面提出了几种在 pageContext 对象中使用的方法,其中最常涉及的方法将在下面单独深入讨论,然后用干净的Java程序来说明 JSP PageContext 类中隐式对象的实现。
Remember: It supports over 40 methods which are inherited from ContextClass.
方法一: getAttribute(String AttributeName, int Scope)
getAttribute方法在描述的范围内查找属性。例如,下面给出的 getAttribute 方法的语句在 Session(会话层)的范围内查找属性“GeeksforGeeks”。如果它找到了该属性,那么它将将该属性分配给 Object obj,否则它将返回 Null。
句法:
Object obj = pageContext.getAttribute("GeeksforGeeks", PageContext.SESSION_CONTEXT);
相应地,该方法也可以用于更多其他范围,如下所示:
- Object obj = pageContext.getAttribute(“GeeksforGeeks”, PageContext.REQUEST_CONTEXT);
- Object obj = pageContext.getAttribute(“GeeksforGeeks”, PageContext.PAGE_CONTEXT);
- Object obj = pageContext.getAttribute(“GeeksforGeeks”, PageContext.APPLICATION_CONTEXT);
方法二: findAttribute(String AttributeName)
findAttribute() 方法按照下面列出的顺序在所有四个级别中查找描述的属性。在任何级别,如果没有找到属性,那么它将返回 NULL。
Page --> Request --> Session and Application
方法三: void setAttribute(String AttributeName, Object AttributeValue, int Scope)
此方法在给定范围内设置属性。例如,考虑下面给出的语句将在应用范围内保存一个属性“数据”,其值为“这是数据”。
句法:
pageContext.setAttribute(“data”, “This is data”, PageContext. APPLICATION_CONTEXT);
相应地,该方法会在Request的范围内设计一个名为attr1的属性,其值为“Attr1 value”如下:
pageContext.setAttribute(“attr1”, “Attr1 value”, PageContext. REQUEST_CONTEXT);
方法四: void removeAttribute(String AttributeName, int Scope)
在 命令 到 从给定范围中删除属性,使用此方法。例如,考虑下面给出的 JSP 语句将从页面范围中删除属性“Attr”。
句法:
pageContext.removeAttribute(“Attr”, PageContext. PAGE_CONTEXT);
最后,让我们通过说明 pageContext 隐式对象的 HTML 代码示例来实现
示例 1: index.html
第 1 页:在此 HTML 页面中,我们只是要求用户输入名称。
HTML
GeeksforGeeks
HTML
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
Insert title here
<%
String name=request.getParameter("uname");
out.print("Welcome "+name);
pageContext.setAttribute("user",name,PageContext.SESSION_SCOPE);
%>
second jsp page
HTML
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
Insert title here
<%
String name=(String)pageContext.getAttribute("user",PageContext.SESSION_SCOPE);
out.print("Hello "+name);
%>
第 2 页:这是一个 JSP 页面,我们使用具有会话范围的 pageContext 隐式对象保存用户名,这意味着我们将能够访问详细信息,直到用户的会话处于活动状态。
示例 2: welcome.jsp
HTML
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
Insert title here
<%
String name=request.getParameter("uname");
out.print("Welcome "+name);
pageContext.setAttribute("user",name,PageContext.SESSION_SCOPE);
%>
second jsp page
第 3 页:在这个 JSP 页面中,我们使用 getAttribute 方法检索保存的属性。这里要考虑的一点是,我们已经保存了具有会话作用域的属性,因此我们需要将作用域声明为会话,以便检索这些属性的值。
示例 3: second.jsp
HTML
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
Insert title here
<%
String name=(String)pageContext.getAttribute("user",PageContext.SESSION_SCOPE);
out.print("Hello "+name);
%>
输出:
我们在其中接收用户名的 HTML 页面。
B JSP 页面以及详细信息页面链接。
C User Credentials 显示我们通过 pageContext 实例从 html 页面移动到此页面的页面。