什么是隐式对象?这是什么意思?

19

每当我学习JSP和Servlets时,我会遇到隐式对象这个词,它是什么意思?

在我的程序中如何调用它们而无需实例化对象?是谁实例化隐式对象?请详细说明。

谢谢

6个回答

14
那些对象已经被Servlet容器放置在范围内,并且可以通过EL(Expression Language)访问,例如PageContextHttpServletRequest#getParameter()HttpServletRequest#getHeader()等等。这些只是为了方便而存在的,因此您不需要使用老式的scriptlet来获取它们。
所以,例如,代替使用:
<%= 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一样调用getter)。我使用花括号符号[]来获取user-agent,因为在EL中,-是一个保留字符,因此${header.user-agent}不能正常工作,否则它会试图返回request.getHeader("user") - pageContext.findAttribute("agent")的结果,这显然行不通。
要了解所有隐式对象的概述,请参阅Java EE教程中的章节Implicit Objects

5
JSP中的隐式对象是由容器自动创建并提供给开发人员使用的对象,开发人员无需显式创建。由于这些对象是由容器自动创建并使用标准变量访问,因此它们被称为隐式对象。
容器会解析隐式对象并将其插入生成的servlet代码中。它们仅在jspService方法中可用,而不在任何声明中可用。隐式对象用于不同的目的。我们自己的方法(用户定义的方法)无法访问它们,因为它们是局部于服务方法的,并且在将jsp转换为servlet时创建。但是,如果我们希望在这些函数中本地使用它们,我们可以将它们传递给我们自己的方法。
来源: roseindia.net

0

隐式对象是一组Java对象,JSP容器在每个页面中都提供给开发人员使用。这些对象可以通过脚本元素作为内置变量访问,并且还可以通过JavaBeans和Servlets以编程方式访问。

有关详细概述和用法,请参见下面的页面。

http://www.gulland.com/courses/JavaServerPages/jsp_objects.jsp


-1

隐式对象会自动创建并准备好供您使用。您不能使用这些对象的名称创建其他变量。


错误。您确实可以使用相同的变量名。但是,您必须定义作用域。例如,请求作用域。话虽如此,出于不良实践的考虑,我们不应该创建具有隐式对象名称的变量。 - Matthew

-1
JSP隐含对象是由容器在将JSP页面转换为Servlet源代码时自动创建的,以帮助开发人员。

-1

有九种隐式对象,隐式对象也称为预定义变量。
1)请求
2)响应
3)应用程序
4)会话
5)页面
6)页面上下文
7)输出
8)异常
9)配置


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接