el语句:${person.dog.name}如何知道属性“person”的类型是person?

mpbci0fu  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(268)

这个问题在这里已经有答案了

el是否自动转换/强制转换类型?${a.name}实际上是如何工作的(2个答案)
四天前关门了。
我有头一本书中的这些照片:


我要你们注意替换 ${person.dog.name} . 我唯一想知道的是,它如何知道属性“person”是person类型的对象?当然, getAttribute() 返回对象,所以必须将其强制转换为person,但它如何知道它是由person类生成的?
我猜这个代码使用 findAttribute() 以前,查找存储值为“person”的属性的范围。后来它试着用 getAttribute() . 所以在它找到它之后,它得到了它-但是它仍然不知道它在现实中得到了什么。那么,它是如何/在哪里“发现”它属于person类型的呢?

5m1hhzi4

5m1hhzi41#

el引擎可以看到 person 在美化的hashmap中查找 request.setAttribute 正在填充-美化的hashmap)。
它在那里找到一个对象,因为你设置了它。它获取并调用这个对象 .getClass() 在它上面,它回来了 Person.class . 然后,它在上运行一个大写函数 dog 生产 getDog . 然后使用 .getFields() 以及所有使用 .getMethods() ,查找名为 dog 或者一个名为 getDog . 它找到方法并调用它。
重复这个原则,了解它最终如何处理 .name 部分。
现在el有了一个对象(在任何对象上调用getname的结果,wsas通过反射调用getdog返回) person 是),然后把它串起来。
我不认为这是html逃避它,所以这是一本“有用”的书,告诉你如何使用过时的技术(jsp)来创建安全漏洞。伟大的。
你有新书吗?你可能想买一些不到10年的东西:)

ne5o7dgx

ne5o7dgx2#

没有。通过查找方法,使用反射来解析属性 getDog() 在任何物体上 person 决定,然后重复这个过程。

相关问题