什么是隐式对象?这是什么意思?
每当我学习JSP和Servlets时,我都会遇到单词隐式对象,这个术语是什么意思?
如何在不实例化对象的情况下在我的程序中调用它们?谁实例化隐式对象?请详细说明。
谢谢
每当我学习JSP和Servlets时,我都会遇到单词隐式对象,这个术语是什么意思?
如何在不实例化对象的情况下在我的程序中调用它们?谁实例化隐式对象?请详细说明。
谢谢
这些对象已经被 servlet 容器放置在作用域中,以便 EL(表达式语言)可以访问它,例如 PageContext
、HttpServletRequest#getParameter()
、HttpServletRequest#getHeader()
等。这些只是为了方便,这样你就不需要使用旧的脚本来获取它们。
所以而不是例如
<%= pageContext.getSession().getMaxInactiveInterval() %><br>
<%= request.getParameter("foo") %><br>
<%= request.getHeader("user-agent") %><br>
<% for (Cookie cookie : request.getCookies()) { // Watch out with NPE!
if (cookie.getName().equals("foo")) {
out.write(cookie.getValue());
}
}
%><br>
你可以做
${pageContext.session.maxInactiveInterval}<br>
${param.foo}<br>
${header['user-agent']}<br>
${cookie.foo}<br>
你会看到它们遵循JavaBean约定进行访问(即,你可以用JavaBean的方式调用getters)。你看我用大括号符号来得到,那是因为是EL中的保留字符,所以不会起作用,它会尝试返回结果,其结果显然不起作用。[]
user-agent
-
${header.user-agent}
request.getHeader("user") - pageContext.findAttribute("agent")
有关所有这些内容的概述,请查看 Java EE 教程中的隐式对象一章。
JSP中的隐式对象是由容器自动创建的对象,容器使它们可供开发人员使用,开发人员不需要显式创建它们。由于这些对象由容器自动创建,并使用标准变量进行访问;因此,它们被称为隐式对象。
隐式对象由容器解析并插入到生成的 Servlet 代码中。它们仅在 jspService 方法中可用,在任何声明中都不可用。隐式对象用于不同的目的。我们自己的方法(用户定义的方法)无法访问它们,因为它们是服务方法的本地,并且是在jsp转换为servlet时创建的。但是,如果我们希望在这些函数中本地使用它们,则可以将它们传递给我们自己的方法。
资料来源:roseindia.net