Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 表达式语言的requestScope对象如何在JSP文件中工作?_Java_Jsp_Servlets_El - Fatal编程技术网

Java 表达式语言的requestScope对象如何在JSP文件中工作?

Java 表达式语言的requestScope对象如何在JSP文件中工作?,java,jsp,servlets,el,Java,Jsp,Servlets,El,因此,我在jsp文件中有以下简单代码: ${requestScope.getClass()} 这让我回想起: class javax.servlet.jsp.el.ImplicitObjectELResolver$ScopeManager$9 这使我认为这个对象是隐式对象解析器类型。(即使在这里我也可能错了……) 好的,当我查看这个漂亮类的文档时:javax.servlet.jsp.el.ImplicitObjectELResolver ,我明白了: 定义EL隐式对象的变量分辨率行为 在JS

因此,我在jsp文件中有以下简单代码:

${requestScope.getClass()}
这让我回想起:

class javax.servlet.jsp.el.ImplicitObjectELResolver$ScopeManager$9
这使我认为这个对象是隐式对象解析器类型。(即使在这里我也可能错了……)

好的,当我查看这个漂亮类的文档时:javax.servlet.jsp.el.ImplicitObjectELResolver ,我明白了:

定义EL隐式对象的变量分辨率行为 在JSP规范中定义

以下变量由该ELResolver按照 JSP规范:

pageContext—pageContext对象。pageScope—将页面范围的属性名称映射到其值的映射

requestScope—将请求范围的属性名称映射到其值的映射

现在我很困惑,因为我想我已经有了类型映射的对象。但是我的对象应该有一个名为requestScope的变量,它是一个映射

那么当我打电话给你的时候会发生什么呢

${requestScope.firstName} 
比如说


我是在地图对象上调用getKey(“firstName”),还是在进行其他操作

已经有一段时间了,所以我可能会离开这里,但我认为EL在决定如何解释您的属性之前,会从多个方面考虑对象的类型。因此,如果您进行调用(“
getClass()
”),并且该方法存在,则会进行调用。否则,如果EL没有找到
getClass()
方法,它可能会去寻找一个映射

另外,仅仅因为类名是
javax.servlet.jsp.el.ImplicitObjectELResolver$ScopeManager$9
,并不意味着该类也不能实现像
Map
这样的接口。我想可能是的。但它仍然是一个类,包含了
对象
中的所有方法,我相信除了Map接口之外,它可能还有自己的几个方法

编辑:


ScopeManager
不是映射,但它的几乎所有方法都返回映射。查看

作为EL解析的一部分,JSP servlet将使用
隐式对象解析程序
解析名称
请求范围
。该解决方案包括调用
getRequestScopeMap()
,它返回类型为
EnumeratedMap
的匿名内部类,该类可以访问请求范围中的所有属性

返回
EnumeratedMap
后,EL解析将继续,方法是使用EL表达式中的给定名称调用
Map
get(…)
方法。例如,中的名称为
firstName

${requestScope.firstName} 


实现可能已从一个版本更改为另一个版本。

对象的类型为
javax.servlet.jsp.el.ImplicitObjectELResolver$ScopeManager$9
。这是类
隐式对象解析器
的嵌套类
ScopeManager
的匿名内部类。这让我很困惑:否则,如果EL没有找到getClass()方法,它可能会去寻找映射。我只是说编译器可以反射地查看对象并确定其类型,在决定如何查找属性之前。自己编写这样的方法并不难。我为自己编写的一些调试代码做了类似的工作。