JSP 隐式对象
什么是 JSP 隐式对象?
- JSP 隐式对象是在 JSP 翻译成 Servlet 的过程中创建的。
- 这些对象可以直接在 service 方法中的脚本段中使用。
- 它们由容器自动创建,并且可以通过对象访问。
JSP 中有多少个隐式对象?
容器中共有 9 种隐式对象
- Out
- 请求
- Response
- Config
- 应用
- Session
- PageContext
- Page
- Exception
一个接一个地学习
1) Out
- Out 是一个隐式对象,用于将数据写入缓冲区并响应客户端发送输出。
- Out 对象允许我们访问 Servlet 的输出流。
- Out 是 javax.servlet.jsp.JspWriter 类的对象。
- 在处理 Servlet 时,我们需要 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 用于打印到输出流。
当我们执行上面的代码时,我们会得到以下输出。
输出
- 在输出中,我们得到了 num1 和 num2 的值。
2) Request
- request 对象是 java.servlet.http.HttpServletRequest 的一个实例,它是 service 方法的参数之一。
- 容器会为每个请求创建它。
- 它用于请求信息,如参数、头部信息、服务器名称等。
- 它使用 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 (执行操作的地方)
代码解释
代码行 10-13 : 在 implicit_jsp2.jsp (表单) 中发送请求,因此变量 username 被处理并发送到 guru.jsp,这是 JSP 的操作。
Guru.jsp
代码行 10-11: 这是操作 jsp,请求在此处处理,并且 username 从表单 jsp 获取。
当您执行上述代码时,您会得到以下输出
输出
当您输入 test 并单击提交按钮时,您将获得以下输出“Welcome Test”。
3) Response
- “Response”是实现 HttpServletResponse 接口的类的实例。
- 容器生成此对象并将其作为参数传递给 _jspservice() 方法。
- “Response 对象”将由容器为每个请求创建。
- 它代表可以发送给客户端的响应。
- response 隐式对象用于设置内容类型、添加 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: 在 response 对象中,我们可以设置内容类型。
这里我们只在 response 对象中设置了 content type,因此没有输出。
4) Config
- “Config”的类型是 java.servlet.servletConfig。
- 它由容器为每个 jsp 页面创建。
- 它用于获取 web.xml 中的初始化参数。
示例
Web.xml (指定 Servlet 的名称和映射)
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 的名称。
当您执行上述代码时,您会得到以下输出
输出
- Servlet 名称是“GuruServlet”,因为该名称存在于 web.xml 中。
5) Application
- Application 对象 (代码行 10) 是 javax.servlet.ServletContext 的一个实例,用于获取 JSP 中的上下文信息和属性。
- Application 对象由容器每应用程序创建一个,当应用程序部署时。
- 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) Session
- session 持有 “httpsession” 对象 (代码行 10)。
- Session 对象用于获取、设置和删除会话范围的属性,也用于获取会话信息。
示例
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 (getAttribute)
<%@ 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: 我们正在 session 变量中设置 user 属性,并且该值可以从任何调用它的 jsp ( _jsp8.jsp ) 的 session 中获取。
代码行 12: 我们在 href 中调用另一个 jsp,其中我们将获取 user 属性的值,该属性已在 (_jsp7.jsp) 中设置。
Implicit_jsp8.jsp
代码行 11: 我们正在从 session 对象中获取 user 属性的值并显示该值。
当您执行上述代码时,您会得到以下输出
当您单击用户名链接时,您将获得以下输出。
输出
- 当我们在 implicit_jsp7.jsp 中单击链接时,我们会重定向到第二个 jsp 页面,即 (_jsp8.jsp) 页面,并且我们会从 user 属性的 session 对象中获取值 (_jsp7.jsp)。
7) PageContext
- 此对象是 pagecontext 类型。
- 它用于从特定范围获取、设置和删除属性。
范围有 4 种类型。
- Page
- 请求
- Session
- 应用
示例
<%@ 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 对象设置属性,它有三个参数。
- 键
- 值
- 范围
在上面的代码中,键是 student,值是“gurustudent”,而范围是 page 范围。这里范围是“page”,只能通过 page 范围获取。
代码行 12:我们正在使用 pageContext 获取属性的值。
当您执行上述代码时,您会得到以下输出
输出
- 输出将打印“student name is gurustudent”。
8) Page
- Page 隐式变量保存当前执行的对应 jsp 的 Servlet 对象。
- 充当当前 jsp 页面的 this 对象。
示例
在此示例中,我们使用 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:在此示例中,我们尝试使用 page 对象的 toString() 方法,并尝试获取 JSP 页面的字符串名称。
当您执行代码时,您会得到以下输出。
输出
- 输出是以上 jsp 页面的字符串名称。
9) Exception
- Exception 是 Throwable 类的隐式对象。
- 它用于 JSP 中的异常处理。
- exception 对象只能在错误页面中使用。示例:
<%@ 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 的异常对象。
输出
我们在数组中得到了 ArrayIndexOfBoundsException,其中我们得到了一个 num1 数组的第五个元素。