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

gir*_*iri 18 java jsp servlets

每当我研究JSP和Servlets时,我都会遇到隐含对象,这个术语的意思是什么?

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

谢谢

Bal*_*usC 14

这些是其中已被放置在范围由servlet容器,因此,它的由EL(表达式语言)访问的对象,如PageContext,HttpServletRequest#getParameter(),HttpServletRequest#getHeader()等.这些只是为了方便,所以你不需要使用旧的fahioned 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>
Run Code Online (Sandbox Code Playgroud)

你可以这样做

${pageContext.session.maxInactiveInterval}<br>
${param.foo}<br>
${header['user-agent']}<br>
${cookie.foo}<br>
Run Code Online (Sandbox Code Playgroud)

您会看到它们遵循要访问的JavaBean约定(即您可以使用JavaBean方式调用getter).你看到我使用大括号[]来获取user-agent,那是因为它-是EL中的保留字符,所以${header.user-agent}不会起作用,它会尝试返回结果request.getHeader("user") - pageContext.findAttribute("agent")显然不起作用.

有关它们的概述,请查看Java EE教程中的隐式对象一章.


R v*_*ijn 5

JSP中的隐式对象是容器自动创建的对象,容器使它们可供开发人员使用,开发人员不需要显式创建它们.由于这些对象是由容器自动创建的,因此可以使用标准变量进行访问; 因此,它们被称为隐式对象.

隐式对象由容器解析并插入生成的servlet代码中.它们仅在jspService方法中可用,而不在任何声明中.隐式对象用于不同目的.我们自己的方法(用户定义的方法)无法访问它们,因为它们是服务方法的本地方法,并且是在jsp转换为servlet的过程中创建的.但是如果我们希望在这些函数中本地使用它们,我们可以将它们传递给我们自己的方法.

资料来源:roseindia.net