📜  JSP PageContext – 隐式对象

📅  最后修改于: 2022-05-13 01:55:08.199000             🧑  作者: Mango

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 对象,您可以设置属性、获取属性和删除存在于不同范围中的属性,例如pagerequestsessionapplication范围,如下所示:
  1. – 范围:PAGE_CONTEXT
  2. 请求- 范围:REQUEST_CONTEXT
  3. 会话– 范围:SESSION_CONTEXT
  4. 应用程序- 范围:APPLICATION_CONTEXT

句法:

public abstract class PageContext
extends JspContext

语法:使用 pageContext



pageContext.methodName(“name of attribute”, “scope”);

承前启后,现在让我们讨论一下pageContext隐式对象中使用的方法。下面提出了几种在 pageContext 对象中使用的方法,其中最常涉及的方法将在下面单独深入讨论,然后用干净的Java程序来说明 JSP PageContext 类中隐式对象的实现。

方法一: 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 页面移动到此页面的页面。