JSP 隐式对象
什么是 JSP 隐式对象?
- JSP 隐式对象是在 JSP 到 servlet 的转换阶段创建的。
- 这些对象可以直接在服务方法中的脚本中使用。
- 它们由容器自动创建,并且可以使用对象来访问。
JSP 中有多少个隐式对象?
容器中有 9 种类型的隐式对象可用:
- 输出
- 请求
- 响应
- 配置
- 应用程序
- 时间
- 页面上下文
- 页
- 特殊课程
让我们逐一研究
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 用于打印到输出流
当我们执行上述代码时,我们得到以下输出:
输出:
- 在输出中,我们得到了 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(采取行动的地方)
代码说明:
代码行10-13: 在implicit_jsp2.jsp(form)中发送请求,因此变量用户名被处理并发送到guru.jsp,这是JSP的操作。
Guru.jsp
代码行10-11: 它是处理请求的动作 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 的名称和映射)
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对象(代码行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: 我们从会话对象中获取用户属性的值并显示该值
执行上述代码时,您将获得以下输出:
当您单击用户名的链接时。 您将获得以下输出。
输出:
- 当我们点击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 获取属性的值
执行上述代码时,您将获得以下输出:
输出:
- 输出将打印“学生姓名是 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 页面的字符串名称
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 的异常对象。
输出:
我们在数组中得到了 ArrayIndexOfBoundsException,其中我们得到了第五个元素的 num1 数组。