JSP 隐式对象

什么是 JSP 隐式对象?

  • JSP 隐式对象是在 JSP 到 servlet 的转换阶段创建的。
  • 这些对象可以直接在服务方法中的脚本中使用。
  • 它们由容器自动创建,并且可以使用对象来访问。

JSP 中有多少个隐式对象?

容器中有 9 种类型的隐式对象可用:

  1. 输出
  2. 请求
  3. 响应
  4. 配置
  5. 应用程序
  6. 时间
  7. 页面上下文
  8. 特殊课程

让我们逐一研究

1)出局

  • Out 是隐式对象之一,用于将数据写入缓冲区,并将输出发送到客户端作为响应
  • Out 对象允许我们访问 servlet 的输出流
  • Out 是 javax.servlet.jsp.jspWriter 类的对象
  • 在与 小服务程序,我们需要 printwriter 对象

示例:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP1</title>
</head>
<body>
<% int num1=10;int num2=20;
out.println("num1 is " +num1);
out.println("num2 is "+num2);
%>
</body>
</html>

代码说明:

代码行 11-12– out 用于打印到输出流

当我们执行上述代码时,我们得到以下输出:

在 JSP 中

输出:

  • 在输出中,我们得到了 num1 和 num2 的值

2) 请求

  • 请求对象是 java.servlet.http.HttpServletRequest 的一个实例,它是服务方法的参数之一
  • 容器将为每个请求创建它。
  • 它将用于请求参数、标头信息、服务器名称等信息。
  • 它使用 getParameter() 来访问请求参数。

示例:

Implicit_jsp2.jsp(从该表单向 guru.jsp 发送请求)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru form JSP2</title>
</head>
<body>
<form action="guru.jsp">
<input type="text" name="username">
<input type="submit" value="submit">
</form>
</body>
</html>

Guru.jsp(采取行动的地方)

JSP 中的请求

代码说明:

代码行10-13: 在implicit_jsp2.jsp(form)中发送请求,因此变量用户名被处理并发送到guru.jsp,这是JSP的操作。

Guru.jsp

代码行10-11: 它是处理请求的动作 jsp,并且用户名是从表单 jsp 中获取的。

执行上述代码时,将获得以下输出

输出:

JSP 中的请求

当你编写测试并点击提交按钮时,你会得到以下输出“欢迎测试”。

JSP 中的请求

3)响应

  • “Response” 是实现 HttpServletResponse 接口的类的实例
  • 容器生成此对象并作为参数传递给 _jspservice() 方法
  • 容器会为每个请求创建“响应对象”。
  • 它代表可以给予客户端的响应
  • 响应隐式对象用于内容类型、添加 cookie 和重定向到响应页面

示例:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP4</title>
</head>
<body>
<%response.setContentType("text/html"); %>
</body>
</html>

代码说明:

代码行11: 在响应对象中,我们可以设置内容类型

这里我们只设置了响应对象中的内容类型。因此,这里没有输出。

4)配置

  • “Config” 的类型为 java.servlet.servletConfig
  • 它由容器为每个 jsp 页面创建
  • 用于获取web.xml中的初始化参数

示例:

Web.xml(指定 servlet 的名称和映射)

JSP 中的配置

Implicit_jsp5.jsp(获取servlet名称的值)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP5</title>
</head>
<body>
<% String servletName = config.getServletName();
out.println("Servlet Name is " +servletName);%>
</body>
</html>

代码说明:

在 web.xml 中

代码行14-17: 在 web.xml 中,我们将 servlet 映射到类。

Implicit_jsp5.jsp

代码行10-11: 要获取 JSP 中 servlet 的名称,我们可以使用 config.getServletName,它将帮助我们获取 servlet 的名称。

执行上述代码时,您将获得以下输出:

JSP 中的响应

输出:

  • Servlet 名称为“GuruServlet”,因为该名称存在于 web.xml 中

5)应用

  • Application对象(代码行10)是javax.servlet.ServletContext的一个实例,用于获取JSP中的上下文信息和属性。
  • 当应用程序部署时,容器会为每个应用程序创建一个应用程序对象。
  • Servletcontext 对象包含一组用于与 servlet 容器交互的方法。我们可以找到有关 servlet 容器的信息

示例:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Implicit JSP6</title>
</head>
<body>
<% application.getContextPath(); %>
</body>
</html>

代码说明:

  • 在上面的代码中,application 属性有助于获取 JSP 页面的上下文路径。

6)会议

  • 会话正在持有“httpsession”对象(代码行 10)。
  • 会话对象用于获取、设置和删除会话范围的属性,也用于获取会话信息

示例:

Implicit_jsp7(属性已设置)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit JSP</title>
</head>
<body>
<% session.setAttribute("user","GuruJSP"); %>
<a href="implicit_jsp8.jsp">Click here to get user name</a>
</body>
</html>

Implicit_jsp8.jsp(获取属性)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>implicit Guru JSP8</title>
</head>
<body>
<% String name = (String)session.getAttribute("user");
out.println("User Name is " +name);
%>
</body>
</html>

代码说明:

Implicit_jsp7.jsp

代码行11: 我们在会话变量中设置属性用户,并且可以从调用该 jsp 的会话中获取该值(_jsp8.jsp)。

代码行12: 我们正在 href 上调用另一个 jsp,在其中我们将获取设置的属性用户的值。

Implicit_jsp8.jsp

代码行11: 我们从会话对象中获取用户属性的值并显示该值

执行上述代码时,您将获得以下输出:

JSP 中的会话

当您单击用户名的链接时。 您将获得以下输出。

JSP 中的会话

输出:

  • 当我们点击implicit_jsp7.jsp中给出的链接时,我们会被重定向到第二个jsp页面,即(_jsp8.jsp)页面,并从用户属性(_jsp7.jsp)的会话对象中获取值。

7)页面上下文

  • 这个对象是pagecontext类型的。
  • 它用于获取、设置和删除特定范围的属性

范围有 4 种类型:

  • 请求
  • 时间
  • 应用程序

示例:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP9</title>
</head>
<body>
<% pageContext.setAttribute("student","gurustudent",pageContext.PAGE_SCOPE);
String name = (String)pageContext.getAttribute("student");
out.println("student name is " +name);
%>
</body>
</html>

代码说明:

代码行11: 我们使用 pageContext 对象设置属性,它有三个参数:

  • 主要
  • 价值观
  • 范围

上面的代码中,key 是 student,value 是“gurustudent”,scope 是 page 范围。这里范围是“page”,只能使用 page 范围来获取。

代码行12: 我们使用 pageContext 获取属性的值

执行上述代码时,您将获得以下输出:

JSP 中的 PageContext

输出:

  • 输出将打印“学生姓名是 gurustudent”。

8)页面

  • Page 隐式变量保存了相应 jsp 的当前执行的 servlet 对象。
  • 充当当前 jsp 页面的此对象。

示例:

在此示例中,我们使用 page 对象通过 toString 方法获取页面名称

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP10</title>
</head>
<body>
<% String pageName = page.toString();
out.println("Page Name is " +pageName);%>
</body>
</html>

代码说明:

代码行10-11: 在这个例子中,我们尝试使用页面对象的 toString() 方法并尝试获取 JSP 页面的字符串名称。

执行代码时,您会得到以下输出:

JSP 中的页面

输出:

  • 输出是上述 jsp 页面的字符串名称

9)例外

  • Exception 是 throwable 类的隐式对象。
  • 它用于 JSP中的异常处理.
  • 异常对象只能在错误页面中使用。示例:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP 11</title>
</head>
<body>
<%int[] num1={1,2,3,4};
out.println(num1[5]);%>
<%= exception %>
</body>
</html>

代码说明:

代码行 10-12 – 它有一个数字数组,即 num1,有四个元素。在输出中,我们尝试从 num1 打印数组的第五个元素,该元素未在数组列表中声明。因此它用于获取 jsp 的异常对象。

输出:

JSP 中的异常

我们在数组中得到了 ArrayIndexOfBoundsException,其中我们得到了第五个元素的 num1 数组。