原文: https://beginnersbook.com/2013/11/jsp-implicit-object-pagecontext-with-examples/

它是javax.servlet.jsp.PageContext的一个实例。使用此对象,您可以在以下任何级别找到属性,获取属性,设置属性和删除属性:

  1. JSP 页面 - 范围:PAGE_CONTEXT
  2. HTTP 请求 - 范围:REQUEST_CONTEXT
  3. HTTP 会话 - 范围:SESSION_CONTEXT
  4. 应用级别 - 范围:APPLICATION_CONTEXT

pageContext隐式对象的方法

  1. Object findAttribute(String AttributeName):**此方法按以下顺序搜索所有四个级别中的指定属性 - 页面,请求,会话和应用。当在任何级别找不到属性时,它返回NULL

  2. Object getAttribute (String AttributeName, int Scope): 它在指定范围内查找属性。此方法类似于findAttribute方法。唯一的区别是findAttribute会按顺序在所有四个级别中查找,而getAttribute则在指定的范围中查找。 例如在以下语句中,getAttribute方法将在会话范围(或会话级别/层)中搜索属性"BeginnersBook"。如果找到该属性,则将其分配给Object obj,否则将返回Null

    1. Object obj = pageContext.getAttribute("BeginnersBook", PageContext.SESSION_CONTEXT);


同样,该方法也可用于其他范围:

  1. Object obj = pageContext.getAttribute("BeginnersBook", PageContext. REQUEST_CONTEXT);
  2. Object obj = pageContext.getAttribute("BeginnersBook", PageContext. PAGE_CONTEXT);
  3. Object obj = pageContext.getAttribute("BeginnersBook", PageContext. APPLICATION_CONTEXT);
  1. void removeAttribute(String AttributeName, int Scope):此方法用于从给定范围中删除属性。例如 - 下面的 JSP 语句将从页面范围中删除属性"MyAttr"
    1. pageContext.removeAttribute(“MyAttr”, PageContext. PAGE_CONTEXT);
  1. void setAttribute(String AttributeName, Object AttributeValue, int Scope):它在给定范围内写入属性。示例–下面的语句将在应用程序范围内存储值为"This is my data"的属性"mydata"
    1. pageContext.setAttribute(“mydata”, “This is my data”, PageContext. APPLICATION_CONTEXT);


类似地,这将在请求范围中创建名为attr1的属性,其值为"Attr1 value"

  1. pageContext.setAttribute(“attr1”, “Attr1 value”, PageContext. REQUEST_CONTEXT);

pageContext隐式对象示例

index.html

在这里,我们只是要求用户输入登录详细信息。

  1. <html>
  2. <head>
  3. <title> User Login Page – Enter details</title>
  4. </head>
  5. <body>
  6. <form action="validation.jsp">
  7. Enter User-Id: <input type="text" name="uid"><br>
  8. Enter Password: <input type="text" name="upass"><br>
  9. <input type="submit" value="Login">
  10. </form>
  11. </body>
  12. </html>

validation.jsp

在此页面中,我们使用pageContext隐式对象和会话范围存储用户凭据,这意味着我们将能够访问详细信息,直到用户的会话处于活动状态。我们还可以使用其他范围参数存储属性,例如页面,应用和请求。

  1. <html>
  2. <head> <title> Validation JSP Page</title>
  3. </head>
  4. <body>
  5. <%
  6. String id=request.getParameter("uid");
  7. String pass=request.getParameter("upass");
  8. out.println("hello "+id);
  9. pageContext.setAttribute("UName", id, PageContext.SESSION_SCOPE);
  10. pageContext.setAttribute("UPassword", pass, PageContext.SESSION_SCOPE);
  11. %>
  12. <a href="display.jsp">Click here to see what you have entered </a>
  13. </body>
  14. </html>

display.jsp

在这个 JSP 页面中,我们使用getAttribute方法获取存储的属性。这里需要注意的是,我们已经使用会话范围存储了属性,因此我们必须将范围指定为会话才能获取这些属性的值。

  1. <html>
  2. <head>
  3. <title>Displaying User Details</title>
  4. </head>
  5. <body>
  6. <%
  7. String username= (String) pageContext.getAttribute("UName", PageContext.SESSION_SCOPE);
  8. String userpassword= (String) pageContext.getAttribute("UPassword", PageContext.SESSION_SCOPE);
  9. out.println("Hi "+username);
  10. out.println("Your Password is: "+userpassword);
  11. %>
  12. </body>
  13. </html>

示例输出的屏幕截图:

我们从用户接收用户 ID 和密码的登录页面。

JSP 中的`pageContext`隐式对象 - 图1

有详细页面链接的页面:

JSP 中的`pageContext`隐式对象 - 图2

用户凭据显示页面,我们已通过pageContext实例从登录页面传递到此页面。

JSP 中的`pageContext`隐式对象 - 图3

如果您对pageContext隐式对象有任何疑问,请随时通过删除评论来询问。我们非常乐意为您提供帮助!